annotate lisp/env.el @ 56905:661d52db56de

(isearch-toggle-regexp): Set `isearch-success' and `isearch-adjusted' to `t'. (isearch-toggle-case-fold): Set `isearch-success' to `t'. (isearch-message-prefix): Add "pending" for isearch-adjusted. (isearch-other-meta-char): Restore isearch-point unconditionally. (isearch-query-replace): Add new arg `regexp-flag' and use it. Set point to start of match if region is not active in transient mark mode (to include the current match to region boundaries). Push the search string to `query-replace-from-history-variable'. Add prompt "Query replace regexp" for isearch-regexp. Add region beginning/end as last arguments of `perform-replace.' (isearch-query-replace-regexp): Replace code by the call to `isearch-query-replace' with arg `t'.
author Juri Linkov <juri@jurta.org>
date Fri, 03 Sep 2004 20:32:57 +0000
parents 695cf19ef79e
children 6fb026ad601f 375f2633d815
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38412
253f761ad37b Some fixes to follow coding conventions in files maintained by FSF.
Pavel Janík <Pavel@Janik.cz>
parents: 28917
diff changeset
1 ;;; env.el --- functions to manipulate environment variables
658
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 584
diff changeset
2
49968
80ed3e75ba10 (read-envvar-name): Decode names.
Dave Love <fx@gnu.org>
parents: 49588
diff changeset
3 ;; Copyright (C) 1991, 1994, 2000, 2001, 2003 Free Software Foundation, Inc.
1185
4ec50a934e54 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 814
diff changeset
4
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 658
diff changeset
5 ;; Maintainer: FSF
2315
9e7ec92a4fdf Added or corrected Commentary headers
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1218
diff changeset
6 ;; Keywords: processes, unix
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 658
diff changeset
7
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13018
diff changeset
8 ;; This file is part of GNU Emacs.
489
3d2d0362a496 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13018
diff changeset
10 ;; GNU Emacs is free software; you can redistribute it and/or modify
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13018
diff changeset
11 ;; it under the terms of the GNU General Public License as published by
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13018
diff changeset
12 ;; the Free Software Foundation; either version 2, or (at your option)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13018
diff changeset
13 ;; any later version.
489
3d2d0362a496 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13018
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13018
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13018
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13018
diff changeset
18 ;; GNU General Public License for more details.
489
3d2d0362a496 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
19
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13018
diff changeset
20 ;; You should have received a copy of the GNU General Public License
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13018
diff changeset
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13018
diff changeset
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13018
diff changeset
23 ;; Boston, MA 02111-1307, USA.
489
3d2d0362a496 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
24
2315
9e7ec92a4fdf Added or corrected Commentary headers
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1218
diff changeset
25 ;;; Commentary:
9e7ec92a4fdf Added or corrected Commentary headers
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1218
diff changeset
26
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13018
diff changeset
27 ;; UNIX processes inherit a list of name-to-string associations from their
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13018
diff changeset
28 ;; parents called their `environment'; these are commonly used to control
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13018
diff changeset
29 ;; program options. This package permits you to set environment variables
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13018
diff changeset
30 ;; to be passed to any sub-process run under Emacs.
2315
9e7ec92a4fdf Added or corrected Commentary headers
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1218
diff changeset
31
49968
80ed3e75ba10 (read-envvar-name): Decode names.
Dave Love <fx@gnu.org>
parents: 49588
diff changeset
32 ;; Note that the environment string `process-environment' is not
80ed3e75ba10 (read-envvar-name): Decode names.
Dave Love <fx@gnu.org>
parents: 49588
diff changeset
33 ;; decoded, but the args of `setenv' and `getenv' are normally
80ed3e75ba10 (read-envvar-name): Decode names.
Dave Love <fx@gnu.org>
parents: 49588
diff changeset
34 ;; multibyte text and get coding conversion.
80ed3e75ba10 (read-envvar-name): Decode names.
Dave Love <fx@gnu.org>
parents: 49588
diff changeset
35
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 658
diff changeset
36 ;;; Code:
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 658
diff changeset
37
9220
8f05784959cc (setenv-history): New history list.
Richard M. Stallman <rms@gnu.org>
parents: 8005
diff changeset
38 ;; History list for environment variable names.
8f05784959cc (setenv-history): New history list.
Richard M. Stallman <rms@gnu.org>
parents: 8005
diff changeset
39 (defvar read-envvar-name-history nil)
8f05784959cc (setenv-history): New history list.
Richard M. Stallman <rms@gnu.org>
parents: 8005
diff changeset
40
8f05784959cc (setenv-history): New history list.
Richard M. Stallman <rms@gnu.org>
parents: 8005
diff changeset
41 (defun read-envvar-name (prompt &optional mustmatch)
8f05784959cc (setenv-history): New history list.
Richard M. Stallman <rms@gnu.org>
parents: 8005
diff changeset
42 "Read environment variable name, prompting with PROMPT.
9345
832197fec54d (read-envvar-name): Special meaning for MUSTMATCH
Richard M. Stallman <rms@gnu.org>
parents: 9220
diff changeset
43 Optional second arg MUSTMATCH, if non-nil, means require existing envvar name.
832197fec54d (read-envvar-name): Special meaning for MUSTMATCH
Richard M. Stallman <rms@gnu.org>
parents: 9220
diff changeset
44 If it is also not t, RET does not exit if it does non-null completion."
9220
8f05784959cc (setenv-history): New history list.
Richard M. Stallman <rms@gnu.org>
parents: 8005
diff changeset
45 (completing-read prompt
49968
80ed3e75ba10 (read-envvar-name): Decode names.
Dave Love <fx@gnu.org>
parents: 49588
diff changeset
46 (mapcar (lambda (enventry)
80ed3e75ba10 (read-envvar-name): Decode names.
Dave Love <fx@gnu.org>
parents: 49588
diff changeset
47 (list (if enable-multibyte-characters
80ed3e75ba10 (read-envvar-name): Decode names.
Dave Love <fx@gnu.org>
parents: 49588
diff changeset
48 (decode-coding-string
80ed3e75ba10 (read-envvar-name): Decode names.
Dave Love <fx@gnu.org>
parents: 49588
diff changeset
49 (substring enventry 0
80ed3e75ba10 (read-envvar-name): Decode names.
Dave Love <fx@gnu.org>
parents: 49588
diff changeset
50 (string-match "=" enventry))
80ed3e75ba10 (read-envvar-name): Decode names.
Dave Love <fx@gnu.org>
parents: 49588
diff changeset
51 locale-coding-system t)
80ed3e75ba10 (read-envvar-name): Decode names.
Dave Love <fx@gnu.org>
parents: 49588
diff changeset
52 (substring enventry 0
80ed3e75ba10 (read-envvar-name): Decode names.
Dave Love <fx@gnu.org>
parents: 49588
diff changeset
53 (string-match "=" enventry)))))
9220
8f05784959cc (setenv-history): New history list.
Richard M. Stallman <rms@gnu.org>
parents: 8005
diff changeset
54 process-environment)
8f05784959cc (setenv-history): New history list.
Richard M. Stallman <rms@gnu.org>
parents: 8005
diff changeset
55 nil mustmatch nil 'read-envvar-name-history))
8f05784959cc (setenv-history): New history list.
Richard M. Stallman <rms@gnu.org>
parents: 8005
diff changeset
56
8f05784959cc (setenv-history): New history list.
Richard M. Stallman <rms@gnu.org>
parents: 8005
diff changeset
57 ;; History list for VALUE argument to setenv.
8f05784959cc (setenv-history): New history list.
Richard M. Stallman <rms@gnu.org>
parents: 8005
diff changeset
58 (defvar setenv-history nil)
8f05784959cc (setenv-history): New history list.
Richard M. Stallman <rms@gnu.org>
parents: 8005
diff changeset
59
39554
c1fb5574fc7a (substitute-env-vars): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 39126
diff changeset
60
c1fb5574fc7a (substitute-env-vars): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 39126
diff changeset
61 (defun substitute-env-vars (string)
c1fb5574fc7a (substitute-env-vars): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 39126
diff changeset
62 "Substitute environment variables referred to in STRING.
c1fb5574fc7a (substitute-env-vars): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 39126
diff changeset
63 `$FOO' where FOO is an environment variable name means to substitute
c1fb5574fc7a (substitute-env-vars): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 39126
diff changeset
64 the value of that variable. The variable name should be terminated
c1fb5574fc7a (substitute-env-vars): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 39126
diff changeset
65 with a character not a letter, digit or underscore; otherwise, enclose
51279
92f5fdc30889 (substitute-env-vars): Fix typo.
Richard M. Stallman <rms@gnu.org>
parents: 50873
diff changeset
66 the entire variable name in braces. For instance, in `ab$cd-x',
92f5fdc30889 (substitute-env-vars): Fix typo.
Richard M. Stallman <rms@gnu.org>
parents: 50873
diff changeset
67 `$cd' is treated as an environment variable.
92f5fdc30889 (substitute-env-vars): Fix typo.
Richard M. Stallman <rms@gnu.org>
parents: 50873
diff changeset
68
92f5fdc30889 (substitute-env-vars): Fix typo.
Richard M. Stallman <rms@gnu.org>
parents: 50873
diff changeset
69 Use `$$' to insert a single dollar sign."
39554
c1fb5574fc7a (substitute-env-vars): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 39126
diff changeset
70 (let ((start 0))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 40430
diff changeset
71 (while (string-match
49968
80ed3e75ba10 (read-envvar-name): Decode names.
Dave Love <fx@gnu.org>
parents: 49588
diff changeset
72 (eval-when-compile
51279
92f5fdc30889 (substitute-env-vars): Fix typo.
Richard M. Stallman <rms@gnu.org>
parents: 50873
diff changeset
73 (rx (or (and "$" (submatch (1+ (regexp "[[:alnum:]_]"))))
49968
80ed3e75ba10 (read-envvar-name): Decode names.
Dave Love <fx@gnu.org>
parents: 49588
diff changeset
74 (and "${" (submatch (minimal-match (0+ anything))) "}")
80ed3e75ba10 (read-envvar-name): Decode names.
Dave Love <fx@gnu.org>
parents: 49588
diff changeset
75 "$$")))
39554
c1fb5574fc7a (substitute-env-vars): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 39126
diff changeset
76 string start)
c1fb5574fc7a (substitute-env-vars): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 39126
diff changeset
77 (cond ((match-beginning 1)
c1fb5574fc7a (substitute-env-vars): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 39126
diff changeset
78 (let ((value (getenv (match-string 1 string))))
c1fb5574fc7a (substitute-env-vars): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 39126
diff changeset
79 (setq string (replace-match (or value "") t t string)
c1fb5574fc7a (substitute-env-vars): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 39126
diff changeset
80 start (+ (match-beginning 0) (length value)))))
c1fb5574fc7a (substitute-env-vars): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 39126
diff changeset
81 ((match-beginning 2)
c1fb5574fc7a (substitute-env-vars): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 39126
diff changeset
82 (let ((value (getenv (match-string 2 string))))
c1fb5574fc7a (substitute-env-vars): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 39126
diff changeset
83 (setq string (replace-match (or value "") t t string)
c1fb5574fc7a (substitute-env-vars): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 39126
diff changeset
84 start (+ (match-beginning 0) (length value)))))
c1fb5574fc7a (substitute-env-vars): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 39126
diff changeset
85 (t
c1fb5574fc7a (substitute-env-vars): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 39126
diff changeset
86 (setq string (replace-match "$" t t string)
c1fb5574fc7a (substitute-env-vars): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 39126
diff changeset
87 start (+ (match-beginning 0) 1)))))
c1fb5574fc7a (substitute-env-vars): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 39126
diff changeset
88 string))
c1fb5574fc7a (substitute-env-vars): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 39126
diff changeset
89
49968
80ed3e75ba10 (read-envvar-name): Decode names.
Dave Love <fx@gnu.org>
parents: 49588
diff changeset
90 ;; Fixme: Should `process-environment' be recoded if LC_CTYPE &c is set?
39554
c1fb5574fc7a (substitute-env-vars): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 39126
diff changeset
91
c1fb5574fc7a (substitute-env-vars): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 39126
diff changeset
92 (defun setenv (variable &optional value unset substitute-env-vars)
489
3d2d0362a496 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
93 "Set the value of the environment variable named VARIABLE to VALUE.
50873
562c854aa190 (setenv): Don't quote nil and t in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 49977
diff changeset
94 VARIABLE should be a string. VALUE is optional; if not provided or
562c854aa190 (setenv): Don't quote nil and t in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 49977
diff changeset
95 nil, the environment variable VARIABLE will be removed. UNSET
39554
c1fb5574fc7a (substitute-env-vars): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 39126
diff changeset
96 if non-nil means to remove VARIABLE from the environment.
c1fb5574fc7a (substitute-env-vars): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 39126
diff changeset
97 SUBSTITUTE-ENV-VARS, if non-nil, means to substitute environment
c1fb5574fc7a (substitute-env-vars): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 39126
diff changeset
98 variables in VALUE with `substitute-env-vars', where see.
c1fb5574fc7a (substitute-env-vars): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 39126
diff changeset
99 Value is the new value if VARIABLE, or nil if removed from the
c1fb5574fc7a (substitute-env-vars): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 39126
diff changeset
100 environment.
8004
a86eceda6537 (setenv): Rewrite. Provide a way to unset interactively.
Richard M. Stallman <rms@gnu.org>
parents: 8002
diff changeset
101
a86eceda6537 (setenv): Rewrite. Provide a way to unset interactively.
Richard M. Stallman <rms@gnu.org>
parents: 8002
diff changeset
102 Interactively, a prefix argument means to unset the variable.
9220
8f05784959cc (setenv-history): New history list.
Richard M. Stallman <rms@gnu.org>
parents: 8005
diff changeset
103 Interactively, the current value (if any) of the variable
8f05784959cc (setenv-history): New history list.
Richard M. Stallman <rms@gnu.org>
parents: 8005
diff changeset
104 appears at the front of the history list when you type in the new value.
39554
c1fb5574fc7a (substitute-env-vars): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 39126
diff changeset
105 Interactively, always replace environment variables in the new value.
9220
8f05784959cc (setenv-history): New history list.
Richard M. Stallman <rms@gnu.org>
parents: 8005
diff changeset
106
49968
80ed3e75ba10 (read-envvar-name): Decode names.
Dave Love <fx@gnu.org>
parents: 49588
diff changeset
107 This function works by modifying `process-environment'.
80ed3e75ba10 (read-envvar-name): Decode names.
Dave Love <fx@gnu.org>
parents: 49588
diff changeset
108
80ed3e75ba10 (read-envvar-name): Decode names.
Dave Love <fx@gnu.org>
parents: 49588
diff changeset
109 As a special case, setting variable `TZ' calls `set-time-zone-rule' as
80ed3e75ba10 (read-envvar-name): Decode names.
Dave Love <fx@gnu.org>
parents: 49588
diff changeset
110 a side-effect."
8004
a86eceda6537 (setenv): Rewrite. Provide a way to unset interactively.
Richard M. Stallman <rms@gnu.org>
parents: 8002
diff changeset
111 (interactive
a86eceda6537 (setenv): Rewrite. Provide a way to unset interactively.
Richard M. Stallman <rms@gnu.org>
parents: 8002
diff changeset
112 (if current-prefix-arg
9345
832197fec54d (read-envvar-name): Special meaning for MUSTMATCH
Richard M. Stallman <rms@gnu.org>
parents: 9220
diff changeset
113 (list (read-envvar-name "Clear environment variable: " 'exact) nil t)
39126
c0713ad66d33 (setenv): Interactively, if VARIABLE has a current value,
Gerd Moellmann <gerd@gnu.org>
parents: 38412
diff changeset
114 (let* ((var (read-envvar-name "Set environment variable: " nil))
c0713ad66d33 (setenv): Interactively, if VARIABLE has a current value,
Gerd Moellmann <gerd@gnu.org>
parents: 38412
diff changeset
115 (value (getenv var)))
c0713ad66d33 (setenv): Interactively, if VARIABLE has a current value,
Gerd Moellmann <gerd@gnu.org>
parents: 38412
diff changeset
116 (when value
c0713ad66d33 (setenv): Interactively, if VARIABLE has a current value,
Gerd Moellmann <gerd@gnu.org>
parents: 38412
diff changeset
117 (push value setenv-history))
9220
8f05784959cc (setenv-history): New history list.
Richard M. Stallman <rms@gnu.org>
parents: 8005
diff changeset
118 ;; Here finally we specify the args to give call setenv with.
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 40430
diff changeset
119 (list var
39554
c1fb5574fc7a (substitute-env-vars): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 39126
diff changeset
120 (read-from-minibuffer (format "Set %s to value: " var)
c1fb5574fc7a (substitute-env-vars): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 39126
diff changeset
121 nil nil nil 'setenv-history
c1fb5574fc7a (substitute-env-vars): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 39126
diff changeset
122 value)
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 40430
diff changeset
123 nil
39554
c1fb5574fc7a (substitute-env-vars): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 39126
diff changeset
124 t))))
49968
80ed3e75ba10 (read-envvar-name): Decode names.
Dave Love <fx@gnu.org>
parents: 49588
diff changeset
125 (if (and (multibyte-string-p variable) locale-coding-system)
49977
f491c5cee974 (setenv): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 49968
diff changeset
126 (let ((codings (find-coding-systems-string (concat variable value))))
f491c5cee974 (setenv): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 49968
diff changeset
127 (unless (or (eq 'undecided (car codings))
f491c5cee974 (setenv): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 49968
diff changeset
128 (memq (coding-system-base locale-coding-system) codings))
f491c5cee974 (setenv): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 49968
diff changeset
129 (error "Can't encode `%s=%s' with `locale-coding-system'"
f491c5cee974 (setenv): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 49968
diff changeset
130 variable (or value "")))))
50873
562c854aa190 (setenv): Don't quote nil and t in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 49977
diff changeset
131 (if unset
39554
c1fb5574fc7a (substitute-env-vars): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 39126
diff changeset
132 (setq value nil)
c1fb5574fc7a (substitute-env-vars): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 39126
diff changeset
133 (if substitute-env-vars
c1fb5574fc7a (substitute-env-vars): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 39126
diff changeset
134 (setq value (substitute-env-vars value))))
49968
80ed3e75ba10 (read-envvar-name): Decode names.
Dave Love <fx@gnu.org>
parents: 49588
diff changeset
135 (if (multibyte-string-p variable)
80ed3e75ba10 (read-envvar-name): Decode names.
Dave Love <fx@gnu.org>
parents: 49588
diff changeset
136 (setq variable (encode-coding-string variable locale-coding-system)))
80ed3e75ba10 (read-envvar-name): Decode names.
Dave Love <fx@gnu.org>
parents: 49588
diff changeset
137 (if (and value (multibyte-string-p value))
80ed3e75ba10 (read-envvar-name): Decode names.
Dave Love <fx@gnu.org>
parents: 49588
diff changeset
138 (setq value (encode-coding-string value locale-coding-system)))
489
3d2d0362a496 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
139 (if (string-match "=" variable)
2403
05d8916e4cde renamed to env.el; changed setenv to putenv.
Noah Friedman <friedman@splode.com>
parents: 2315
diff changeset
140 (error "Environment variable name `%s' contains `='" variable)
1185
4ec50a934e54 entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 814
diff changeset
141 (let ((pattern (concat "\\`" (regexp-quote (concat variable "="))))
3667
f4a7ac2ec651 (setenv): Treat case as significant.
Richard M. Stallman <rms@gnu.org>
parents: 2410
diff changeset
142 (case-fold-search nil)
8004
a86eceda6537 (setenv): Rewrite. Provide a way to unset interactively.
Richard M. Stallman <rms@gnu.org>
parents: 8002
diff changeset
143 (scan process-environment)
a86eceda6537 (setenv): Rewrite. Provide a way to unset interactively.
Richard M. Stallman <rms@gnu.org>
parents: 8002
diff changeset
144 found)
13018
9c090a7674c8 (setenv): Call set-time-zone-rule when setting TZ.
Richard M. Stallman <rms@gnu.org>
parents: 9345
diff changeset
145 (if (string-equal "TZ" variable)
9c090a7674c8 (setenv): Call set-time-zone-rule when setting TZ.
Richard M. Stallman <rms@gnu.org>
parents: 9345
diff changeset
146 (set-time-zone-rule value))
8004
a86eceda6537 (setenv): Rewrite. Provide a way to unset interactively.
Richard M. Stallman <rms@gnu.org>
parents: 8002
diff changeset
147 (while scan
a86eceda6537 (setenv): Rewrite. Provide a way to unset interactively.
Richard M. Stallman <rms@gnu.org>
parents: 8002
diff changeset
148 (cond ((string-match pattern (car scan))
a86eceda6537 (setenv): Rewrite. Provide a way to unset interactively.
Richard M. Stallman <rms@gnu.org>
parents: 8002
diff changeset
149 (setq found t)
a86eceda6537 (setenv): Rewrite. Provide a way to unset interactively.
Richard M. Stallman <rms@gnu.org>
parents: 8002
diff changeset
150 (if (eq nil value)
49968
80ed3e75ba10 (read-envvar-name): Decode names.
Dave Love <fx@gnu.org>
parents: 49588
diff changeset
151 (setq process-environment (delq (car scan)
80ed3e75ba10 (read-envvar-name): Decode names.
Dave Love <fx@gnu.org>
parents: 49588
diff changeset
152 process-environment))
8004
a86eceda6537 (setenv): Rewrite. Provide a way to unset interactively.
Richard M. Stallman <rms@gnu.org>
parents: 8002
diff changeset
153 (setcar scan (concat variable "=" value)))
a86eceda6537 (setenv): Rewrite. Provide a way to unset interactively.
Richard M. Stallman <rms@gnu.org>
parents: 8002
diff changeset
154 (setq scan nil)))
a86eceda6537 (setenv): Rewrite. Provide a way to unset interactively.
Richard M. Stallman <rms@gnu.org>
parents: 8002
diff changeset
155 (setq scan (cdr scan)))
a86eceda6537 (setenv): Rewrite. Provide a way to unset interactively.
Richard M. Stallman <rms@gnu.org>
parents: 8002
diff changeset
156 (or found
a86eceda6537 (setenv): Rewrite. Provide a way to unset interactively.
Richard M. Stallman <rms@gnu.org>
parents: 8002
diff changeset
157 (if value
8002
f8c8bbeca971 (setenv): Do something even if process-environment is nil.
Richard M. Stallman <rms@gnu.org>
parents: 3667
diff changeset
158 (setq process-environment
8004
a86eceda6537 (setenv): Rewrite. Provide a way to unset interactively.
Richard M. Stallman <rms@gnu.org>
parents: 8002
diff changeset
159 (cons (concat variable "=" value)
39554
c1fb5574fc7a (substitute-env-vars): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 39126
diff changeset
160 process-environment))))))
c1fb5574fc7a (substitute-env-vars): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 39126
diff changeset
161 value)
584
4cd7543be581 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 489
diff changeset
162
28917
845292e36d62 (getenv): New function, interactively callable.
Gerd Moellmann <gerd@gnu.org>
parents: 21201
diff changeset
163 (defun getenv (variable)
845292e36d62 (getenv): New function, interactively callable.
Gerd Moellmann <gerd@gnu.org>
parents: 21201
diff changeset
164 "Get the value of environment variable VARIABLE.
845292e36d62 (getenv): New function, interactively callable.
Gerd Moellmann <gerd@gnu.org>
parents: 21201
diff changeset
165 VARIABLE should be a string. Value is nil if VARIABLE is undefined in
845292e36d62 (getenv): New function, interactively callable.
Gerd Moellmann <gerd@gnu.org>
parents: 21201
diff changeset
166 the environment. Otherwise, value is a string.
845292e36d62 (getenv): New function, interactively callable.
Gerd Moellmann <gerd@gnu.org>
parents: 21201
diff changeset
167
845292e36d62 (getenv): New function, interactively callable.
Gerd Moellmann <gerd@gnu.org>
parents: 21201
diff changeset
168 This function consults the variable `process-environment'
845292e36d62 (getenv): New function, interactively callable.
Gerd Moellmann <gerd@gnu.org>
parents: 21201
diff changeset
169 for its value."
845292e36d62 (getenv): New function, interactively callable.
Gerd Moellmann <gerd@gnu.org>
parents: 21201
diff changeset
170 (interactive (list (read-envvar-name "Get environment variable: " t)))
49968
80ed3e75ba10 (read-envvar-name): Decode names.
Dave Love <fx@gnu.org>
parents: 49588
diff changeset
171 (let ((value (getenv-internal (if (multibyte-string-p variable)
80ed3e75ba10 (read-envvar-name): Decode names.
Dave Love <fx@gnu.org>
parents: 49588
diff changeset
172 (encode-coding-string
80ed3e75ba10 (read-envvar-name): Decode names.
Dave Love <fx@gnu.org>
parents: 49588
diff changeset
173 variable locale-coding-system)
80ed3e75ba10 (read-envvar-name): Decode names.
Dave Love <fx@gnu.org>
parents: 49588
diff changeset
174 variable))))
80ed3e75ba10 (read-envvar-name): Decode names.
Dave Love <fx@gnu.org>
parents: 49588
diff changeset
175 (if (and enable-multibyte-characters value)
80ed3e75ba10 (read-envvar-name): Decode names.
Dave Love <fx@gnu.org>
parents: 49588
diff changeset
176 (setq value (decode-coding-string value locale-coding-system)))
28917
845292e36d62 (getenv): New function, interactively callable.
Gerd Moellmann <gerd@gnu.org>
parents: 21201
diff changeset
177 (when (interactive-p)
845292e36d62 (getenv): New function, interactively callable.
Gerd Moellmann <gerd@gnu.org>
parents: 21201
diff changeset
178 (message "%s" (if value value "Not set")))
845292e36d62 (getenv): New function, interactively callable.
Gerd Moellmann <gerd@gnu.org>
parents: 21201
diff changeset
179 value))
845292e36d62 (getenv): New function, interactively callable.
Gerd Moellmann <gerd@gnu.org>
parents: 21201
diff changeset
180
2403
05d8916e4cde renamed to env.el; changed setenv to putenv.
Noah Friedman <friedman@splode.com>
parents: 2315
diff changeset
181 (provide 'env)
05d8916e4cde renamed to env.el; changed setenv to putenv.
Noah Friedman <friedman@splode.com>
parents: 2315
diff changeset
182
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51279
diff changeset
183 ;;; arch-tag: b7d6a8f7-bc81-46db-8e39-8d721d4ed0b8
2403
05d8916e4cde renamed to env.el; changed setenv to putenv.
Noah Friedman <friedman@splode.com>
parents: 2315
diff changeset
184 ;;; env.el ends here