;;; env.el --- functions to manipulate environment variables
-;; Copyright (C) 1991, 1994, 2000, 2001, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 1991, 1994, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
;; Maintainer: FSF
;; Keywords: processes, unix
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
`$FOO' where FOO is an environment variable name means to substitute
the value of that variable. The variable name should be terminated
with a character not a letter, digit or underscore; otherwise, enclose
-the entire variable name in braces. Use `$$' to insert a single
-dollar sign."
+the entire variable name in braces. For instance, in `ab$cd-x',
+`$cd' is treated as an environment variable.
+
+Use `$$' to insert a single dollar sign."
(let ((start 0))
(while (string-match
(eval-when-compile
- (rx (or (and "$" (submatch (1+ (regexp "[:alnum:]_"))))
+ (rx (or (and "$" (submatch (1+ (regexp "[[:alnum:]_]"))))
(and "${" (submatch (minimal-match (0+ anything))) "}")
"$$")))
string start)
(defun setenv (variable &optional value unset substitute-env-vars)
"Set the value of the environment variable named VARIABLE to VALUE.
-VARIABLE should be a string. VALUE is optional; if not provided or is
-`nil', the environment variable VARIABLE will be removed. UNSET
+VARIABLE should be a string. VALUE is optional; if not provided or
+nil, the environment variable VARIABLE will be removed. UNSET
if non-nil means to remove VARIABLE from the environment.
SUBSTITUTE-ENV-VARS, if non-nil, means to substitute environment
variables in VALUE with `substitute-env-vars', where see.
nil
t))))
(if (and (multibyte-string-p variable) locale-coding-system)
- (unless (memq (coding-system-base locale-coding-system)
- (find-coding-systems-string (concat variable value)))
- (error "Can't encode `%s=%s' with `locale-coding-system'"
- variable (or value "")))
- (unless (memq 'undecided (find-coding-systems-string variable))
- (error "Can't encode `%s=%s' with unspecified `locale-coding-system'"
- variable (or value ""))))
- (if unset
+ (let ((codings (find-coding-systems-string (concat variable value))))
+ (unless (or (eq 'undecided (car codings))
+ (memq (coding-system-base locale-coding-system) codings))
+ (error "Can't encode `%s=%s' with `locale-coding-system'"
+ variable (or value "")))))
+ (if unset
(setq value nil)
(if substitute-env-vars
(setq value (substitute-env-vars value))))
(provide 'env)
+;;; arch-tag: b7d6a8f7-bc81-46db-8e39-8d721d4ed0b8
;;; env.el ends here