Mercurial > hg > xemacs-beta
diff lisp/process.el @ 930:eaedf30d9d76
[xemacs-hg @ 2002-07-23 08:34:59 by youngs]
2002-07-15 Jerry James <james@xemacs.org>
* make-docfile.c: Change whitespace and organization to reduce the
size of the diff against FSF Emacs sources and synch to Emacs 21.2.
Remove unused DO_REALLOC.
Mark XEmacs changes and additions more clearly.
Reintroduce previously deleted Emacs code inside #if 0 ... #endif.
* make-docfile.c (next_extra_elc): Replace goto with do-while.
* make-docfile.c (main): Put XEmacs-only args in one place.
* make-docfile.c (write_c_args): Change buff to buf to match
Emacs. Replace pointer arithmetic with simpler array syntax.
* make-docfile.c (scan_c_file): Note that DEFSIMPLE and DEFPRED no
longer exist. Correct the "name too long" test (off by one).
Die with message if a DEFUN has no docstring instead of hanging.
* make-docfile.c (scan_lisp_file): Introduce while loops used in
Emacs sources to skip consecutive blank lines.
2002-07-21 John Paul Wallington <jpw@xemacs.org>
* process.el (substitute-env-vars): New function; sync with
GNU Emacs 21.1.50.
(setenv): Add optional arg SUBSTITUTE-ENV-VARS; sync with
GNU Emacs 21.1.50.
2002-07-20 Mike Sperber <mike@xemacs.org>
* eval.c (run_post_gc_hook): Use more correct flags when running
post-gc-hook.
2002-07-20 Mike Sperber <mike@xemacs.org>
* process-unix.c (child_setup): Don't try to close file
descriptors for chid process once again---it's already being done
in close_process_descs.
(unix_create_process): Call begin_dont_check_for_quit to inhibit
unwanted interaction (and thus breaking of X event synchronicity)
in the child.
2002-07-15 Jerry James <james@xemacs.org>
* lisp.h: Make Qdll_error visible globally.
* symbols.c (check_sane_subr): Revert 2002-06-26 change.
Check only if !initialized.
* symbols.c (check_module_subr): Add parameter. Duplicate
check_sane_subr checks, but signal an error instead of asserting.
* symbols.c (defsubr): Use check_module_subr parameter.
* symbols.c (defsubr_macro): Ditto.
author | youngs |
---|---|
date | Tue, 23 Jul 2002 08:35:11 +0000 |
parents | 5fc81edb7a38 |
children | 23eaac87b4b0 |
line wrap: on
line diff
--- a/lisp/process.el Sun Jul 21 04:51:07 2002 +0000 +++ b/lisp/process.el Tue Jul 23 08:35:11 2002 +0000 @@ -535,11 +535,40 @@ ;; History list for VALUE argument to setenv. (defvar setenv-history nil) -(defun setenv (variable &optional value unset) +(defun substitute-env-vars (string) + "Substitute environment variables referred to in STRING. +`$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." + (let ((start 0)) + (while (string-match + ;; XEmacs change - FSF use their rx macro to generate this regexp + "\\(?:\\$\\(\\(?:[a-zA-Z0-9_]\\)+\\)\\)\\|\\(?:\\${\\(\\(?:.\\|\n\\)*?\\)}\\)\\|\\$\\$" + string start) + (cond ((match-beginning 1) + (let ((value (getenv (match-string 1 string)))) + (setq string (replace-match (or value "") t t string) + start (+ (match-beginning 0) (length value))))) + ((match-beginning 2) + (let ((value (getenv (match-string 2 string)))) + (setq string (replace-match (or value "") t t string) + start (+ (match-beginning 0) (length value))))) + (t + (setq string (replace-match "$" t t string) + start (+ (match-beginning 0) 1))))) + string)) + +(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, if non-nil, means to remove VARIABLE from the environment. +SUBSTITUTE-ENV-VARS, if non-nil, means to substitute environment +variables in VALUE using `substitute-env-vars'. + Interactively, a prefix argument means to unset the variable. Interactively, the current value (if any) of the variable appears at the front of the history list when you type in the new value. @@ -553,7 +582,10 @@ (list var (read-from-minibuffer (format "Set %s to value: " var) nil nil nil 'setenv-history (getenv var)))))) - (if unset (setq value nil)) + (if unset + (setq value nil) + (if substitute-env-vars + (setq value (substitute-env-vars value)))) (if (string-match "=" variable) (error "Environment variable name `%s' contains `='" variable) (let ((pattern (concat "\\`" (regexp-quote (concat variable "="))))