]> code.delx.au - gnu-emacs/blobdiff - lisp/env.el
(rmail-current-message, rmail-inbox-list): Add defvars.
[gnu-emacs] / lisp / env.el
index 912634482bf37719750b47db8c1619f62379c9cd..409765f5ff4e941fd0d7f58e3c8adbfeac5b408d 100644 (file)
@@ -1,6 +1,7 @@
 ;;; 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
@@ -19,8 +20,8 @@
 
 ;; 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:
 
@@ -63,12 +64,14 @@ If it is also not t, RET does not exit if it does non-null completion."
 `$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)
@@ -89,8 +92,8 @@ dollar sign."
 
 (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.
@@ -121,14 +124,12 @@ a side-effect."
             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))))
@@ -180,4 +181,5 @@ for its value."
 
 (provide 'env)
 
+;;; arch-tag: b7d6a8f7-bc81-46db-8e39-8d721d4ed0b8
 ;;; env.el ends here