Don't use triple-hyphen in a character class.
[bpt/emacs.git] / lisp / env.el
index 6adc9ec..cc68de9 100644 (file)
@@ -1,11 +1,15 @@
-;;; -*-Emacs-Lisp-*- Functions to manipulate environment variables.
+;;; env.el --- functions to manipulate environment variables.
+
 ;;; Copyright Free Software Foundation 1991
 
+;; Maintainer: FSF
+;; Keywords: processes, unix
+
 ;;; This file is part of GNU Emacs.
 
 ;;; 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 1, or (at your option)
+;;; the Free Software Foundation; either version 2, or (at your option)
 ;;; any later version.
 
 ;;; GNU Emacs is distributed in the hope that it will be useful,
 ;;; along with GNU Emacs; see the file COPYING.  If not, write to
 ;;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
 
-(provide 'setenv)
+;;; Commentary:
+
+;; UNIX processes inherit a list of name-to-string associations from
+;; their parents called their `environment'; these are commonly used
+;; to control program options.  This package permits you to set
+;; environment variables to be passed to any sub-process run under Emacs.
 
-(defun setenv (variable value)
+;;; Code:
+
+;;;###autoload
+(defun setenv (variable &optional value)
   "Set the value of the environment variable named VARIABLE to VALUE.
-VARIABLE and VALUE should both be strings.
-This function works by modifying process-environment."
+VARIABLE should be a string.  VALUE is optional; if not provided or is
+`nil', the environment variable VARIABLE will be removed.  
+This function works by modifying `process-environment'."
+  (interactive "sSet environment variable: \nsSet %s to value: ")
   (if (string-match "=" variable)
-      (error "name of environment variable contains an '=' character")
-    (let ((pattern (concat "^" (regexp-quote (concat variable "="))))
+      (error "Environment variable name `%s' contains `='" variable)
+    (let ((pattern (concat "\\`" (regexp-quote (concat variable "="))))
+         (case-fold-search nil)
          (scan process-environment))
       (while scan
        (cond
         ((string-match pattern (car scan))
-         (setcar scan (concat variable "=" value))
+          (if (eq nil value)
+              (setq process-environment (delq (car scan) process-environment))
+            (setcar scan (concat variable "=" value)))
          (setq scan nil))
         ((null (setq scan (cdr scan)))
          (setq process-environment
                (cons (concat variable "=" value) process-environment))))))))
+
+(provide 'env)
+
+;;; env.el ends here