Add copyright and license notice.
[bpt/emacs.git] / lisp / env.el
index a6626dc..4538e2d 100644 (file)
@@ -1,7 +1,7 @@
 ;;; env.el --- functions to manipulate environment variables
 
 ;; Copyright (C) 1991, 1994, 2000, 2001, 2002, 2003, 2004,
 ;;; env.el --- functions to manipulate environment variables
 
 ;; Copyright (C) 1991, 1994, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006, 2007 Free Software Foundation, Inc.
+;;   2005, 2006, 2007, 2008 Free Software Foundation, Inc.
 
 ;; Maintainer: FSF
 ;; Keywords: processes, unix
 
 ;; Maintainer: FSF
 ;; Keywords: processes, unix
@@ -10,7 +10,7 @@
 
 ;; GNU Emacs is free software; you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 
 ;; GNU Emacs is free software; you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
+;; the Free Software Foundation; either version 3, or (at your option)
 ;; any later version.
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
 ;; any later version.
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
@@ -47,15 +47,15 @@ Optional second arg MUSTMATCH, if non-nil, means require existing envvar name.
 If it is also not t, RET does not exit if it does non-null completion."
   (completing-read prompt
                   (mapcar (lambda (enventry)
 If it is also not t, RET does not exit if it does non-null completion."
   (completing-read prompt
                   (mapcar (lambda (enventry)
-                            (list (if enable-multibyte-characters
-                                      (decode-coding-string
-                                       (substring enventry 0
-                                                  (string-match "=" enventry))
-                                       locale-coding-system t)
-                                    (substring enventry 0
-                                               (string-match "=" enventry)))))
+                             (let ((str (substring enventry 0
+                                             (string-match "=" enventry))))
+                               (if (multibyte-string-p str)
+                                   (decode-coding-string
+                                    str locale-coding-system t)
+                                 str)))
                           (append process-environment
                           (append process-environment
-                                  (frame-parameter (frame-with-environment) 'environment)))
+                                  ;;(frame-environment)
+                                  ))
                   nil mustmatch nil 'read-envvar-name-history))
 
 ;; History list for VALUE argument to setenv.
                   nil mustmatch nil 'read-envvar-name-history))
 
 ;; History list for VALUE argument to setenv.
@@ -127,7 +127,7 @@ Changes ENV by side-effect, and returns its new value."
 
 ;; Fixme: Should the environment be recoded if LC_CTYPE &c is set?
 
 
 ;; Fixme: Should the environment be recoded if LC_CTYPE &c is set?
 
-(defun setenv (variable &optional value substitute-env-vars frame)
+(defun setenv (variable &optional value 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
 nil, the environment variable VARIABLE will be removed.
   "Set the value of the environment variable named VARIABLE to VALUE.
 VARIABLE should be a string.  VALUE is optional; if not provided or
 nil, the environment variable VARIABLE will be removed.
@@ -142,19 +142,11 @@ SUBSTITUTE-ENV-VARS, if non-nil, means to substitute environment
 variables in VALUE with `substitute-env-vars', which see.
 This is normally used only for interactive calls.
 
 variables in VALUE with `substitute-env-vars', which see.
 This is normally used only for interactive calls.
 
-If optional parameter FRAME is non-nil, this function modifies
-only the frame-local value of VARIABLE on FRAME, ignoring
-`process-environment'.  Note that frames on the same terminal
-device usually share their environment, so calling `setenv' on
-one of them affects the others as well.
-
-If FRAME is nil, `setenv' changes the global value of VARIABLE by
-modifying `process-environment'.  Note that the global value
-overrides any frame-local values.
-
 The return value is the new value of VARIABLE, or nil if
 it was removed from the environment.
 
 The return value is the new value of VARIABLE, or nil if
 it was removed from the environment.
 
+This function works by modifying `process-environment'.
+
 As a special case, setting variable `TZ' calls `set-time-zone-rule' as
 a side-effect."
   (interactive
 As a special case, setting variable `TZ' calls `set-time-zone-rule' as
 a side-effect."
   (interactive
@@ -187,13 +179,8 @@ a side-effect."
       (error "Environment variable name `%s' contains `='" variable))
   (if (string-equal "TZ" variable)
       (set-time-zone-rule value))
       (error "Environment variable name `%s' contains `='" variable))
   (if (string-equal "TZ" variable)
       (set-time-zone-rule value))
-  (if (null frame)
-      (setq process-environment (setenv-internal process-environment
-                                                variable value t))
-    (setq frame (frame-with-environment frame))
-    (set-frame-parameter frame 'environment
-                        (setenv-internal (frame-parameter frame 'environment)
-                                         variable value nil)))
+  (setq process-environment (setenv-internal process-environment
+                                             variable value t))
   value)
 
 (defun getenv (variable &optional frame)
   value)
 
 (defun getenv (variable &optional frame)
@@ -238,8 +225,7 @@ Non-ASCII characters are encoded according to the initial value of
 `locale-coding-system', i.e. the elements must normally be decoded for use.
 See `setenv' and `getenv'."
   (let* ((env (append process-environment
 `locale-coding-system', i.e. the elements must normally be decoded for use.
 See `setenv' and `getenv'."
   (let* ((env (append process-environment
-                     (frame-parameter (frame-with-environment frame)
-                                      'environment)
+                      ;; (frame-environment frame)
                      nil))
         (scan env)
         prev seen)
                      nil))
         (scan env)
         prev seen)
@@ -269,46 +255,7 @@ See `setenv' and `getenv'."
              scan (cdr scan))))
     env))
 
              scan (cdr scan))))
     env))
 
-(defmacro let-environment (varlist &rest body)
-  "Evaluate BODY with environment variables set according to VARLIST.
-The environment variables are then restored to their previous
-values.
-The value of the last form in BODY is returned.
-
-Each element of VARLIST is either a string (which variable is
-then removed from the environment), or a list (NAME
-VALUEFORM) (which sets NAME to the value of VALUEFORM, a string).
-All the VALUEFORMs are evaluated before any variables are set."
-  (declare (indent 2))
-  (let ((old-env (make-symbol "old-env"))
-       (name (make-symbol "name"))
-       (value (make-symbol "value"))
-       (entry (make-symbol "entry"))
-       (frame (make-symbol "frame")))
-    `(let ((,frame (selected-frame))
-           ,old-env)
-       ;; Evaluate VALUEFORMs and replace them in VARLIST with their values.
-       (dolist (,entry ,varlist)
-        (unless (stringp ,entry)
-          (if (cdr (cdr ,entry))
-              (error "`let-environment' bindings can have only one value-form"))
-          (setcdr ,entry (eval (cadr ,entry)))))
-       ;; Set the variables.
-       (dolist (,entry ,varlist)
-        (let ((,name (if (stringp ,entry) ,entry (car ,entry)))
-              (,value (if (consp ,entry) (cdr ,entry))))
-          (setq ,old-env (cons (cons ,name (getenv ,name)) ,old-env))
-          (setenv ,name ,value)))
-       (unwind-protect
-          (progn ,@body)
-        ;; Restore old values.
-        (with-selected-frame (if (frame-live-p ,frame)
-                                 ,frame
-                               (selected-frame))
-          (dolist (,entry ,old-env)
-            (setenv (car ,entry) (cdr ,entry))))))))
-
 (provide 'env)
 
 (provide 'env)
 
-;;; arch-tag: b7d6a8f7-bc81-46db-8e39-8d721d4ed0b8
+;; arch-tag: b7d6a8f7-bc81-46db-8e39-8d721d4ed0b8
 ;;; env.el ends here
 ;;; env.el ends here