summaryrefslogtreecommitdiff
path: root/lisp/termdev.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/termdev.el')
-rw-r--r--lisp/termdev.el282
1 files changed, 141 insertions, 141 deletions
diff --git a/lisp/termdev.el b/lisp/termdev.el
index f413067d542..5e12740e11c 100644
--- a/lisp/termdev.el
+++ b/lisp/termdev.el
@@ -25,7 +25,7 @@
(substitute-key-definition 'suspend-emacs 'suspend-frame global-map)
-(defun terminal-id (terminal)
+(defun terminal-id (&optional terminal)
"Return the numerical id of terminal TERMINAL.
TERMINAL can be a terminal id (an integer), a frame, or
@@ -48,146 +48,146 @@ device (HOST.SERVER.SCREEN) or a tty device file."
(t
(error "Invalid argument %s in `terminal-id'" terminal))))
-(defun terminal-getenv (variable &optional terminal global-ok)
- "Get the value of VARIABLE in the client environment of TERMINAL.
-VARIABLE should be a string. Value is nil if VARIABLE is undefined in
-the environment. Otherwise, value is a string.
-
-If TERMINAL has an associated emacsclient process, then
-`terminal-getenv' looks up VARIABLE in the environment of that
-process; otherwise the function consults the global environment,
-i.e., the environment of the Emacs process itself.
-
-If GLOBAL-OK is non-nil, and VARIABLE is not defined in the
-terminal-local environment, then `terminal-getenv' will return
-its value in the global environment instead.
-
-TERMINAL can be a terminal id, a frame, or nil (meaning the
-selected frame's terminal)."
- (setq terminal (terminal-id terminal))
- (if (null (terminal-parameter terminal 'environment))
- (getenv variable)
- (if (multibyte-string-p variable)
- (setq variable (encode-coding-string variable locale-coding-system)))
- (let ((env (terminal-parameter terminal 'environment))
- result entry)
- (while (and env (null result))
- (setq entry (car env)
- env (cdr env))
- (if (and (> (length entry) (length variable))
- (eq ?= (aref entry (length variable)))
- (equal variable (substring entry 0 (length variable))))
- (setq result (substring entry (+ (length variable) 1)))))
- (if (and global-ok (null result))
- (getenv variable)
- (and result (decode-coding-string result locale-coding-system))))))
-
-(defun terminal-setenv (variable &optional value terminal)
- "Set the value of VARIABLE in the environment of TERMINAL.
-VARIABLE should be string. VALUE is optional; if not provided or
-nil, the environment variable VARIABLE is removed. Returned
-value is the new value of VARIABLE, or nil if it was removed from
-the environment.
-
-If TERMINAL was created by an emacsclient invocation, then the
-variable is set in the environment of the emacsclient process;
-otherwise the function changes the environment of the Emacs
-process itself.
-
-TERMINAL can be a terminal id, a frame, or nil (meaning the
-selected frame's terminal)."
- (if (null (terminal-parameter terminal 'environment))
- (setenv variable value)
- (with-terminal-environment terminal variable
- (setenv variable value))))
-
-(defun terminal-setenv-internal (variable value terminal)
- "Set the value of VARIABLE in the environment of TERMINAL.
-The caller is responsible to ensure that both VARIABLE and VALUE
-are usable in environment variables and that TERMINAL is a
-remote terminal."
- (if (multibyte-string-p variable)
- (setq variable (encode-coding-string variable locale-coding-system)))
- (if (and value (multibyte-string-p value))
- (setq value (encode-coding-string value locale-coding-system)))
- (let ((env (terminal-parameter terminal 'environment))
- found)
- (while (and env (not found))
- (if (and (> (length (car env)) (length variable))
- (eq ?= (aref (car env) (length variable)))
- (equal variable (substring (car env) 0 (length variable))))
- (progn
- (if value
- (setcar env (concat variable "=" value))
- (set-terminal-parameter terminal 'environment
- (delq (car env)
- (terminal-parameter terminal
- 'environment))))
- (setq found t))
- (setq env (cdr env))))
- (cond
- ((and value found)
- (setcar env (concat variable "=" value)))
- ((and value (not found))
- (set-terminal-parameter terminal 'environment
- (cons (concat variable "=" value)
- (terminal-parameter terminal
- 'environment))))
- ((and (not value) found)
- (set-terminal-parameter terminal 'environment
- (delq (car env)
- (terminal-parameter terminal
- 'environment)))))))
-
-(defmacro with-terminal-environment (terminal vars &rest body)
- "Evaluate BODY with environment variables VARS set to those of TERMINAL.
-The environment variables are then restored to their previous values.
-
-VARS should be a single string, a list of strings, or t for all
-environment variables.
-
-TERMINAL can be a terminal id, a frame, or nil (meaning the
-selected frame's terminal).
-
-If BODY uses `setenv' to change environment variables in VARS,
-then the new variable values will be remembered for TERMINAL, and
-`terminal-getenv' will return them even outside BODY."
- (declare (indent 2))
- (let ((var (make-symbol "var"))
- (term (make-symbol "term"))
- (v (make-symbol "v"))
- (old-env (make-symbol "old-env")))
- `(let ((,term ,terminal) ; Evaluate arguments only once.
- (,v ,vars))
- (if (stringp ,v)
- (setq ,v (list ,v)))
- (cond
- ((null (terminal-parameter ,term 'environment))
- ;; Not a remote terminal; nothing to do.
- (progn ,@body))
- ((eq ,v t)
- ;; Switch the entire process-environment.
- (let (,old-env process-environment)
- (setq process-environment (terminal-parameter ,term 'environment))
- (unwind-protect
- (progn ,@body)
- (set-terminal-parameter ,term 'environment process-environment)
- (setq process-environment ,old-env))))
- (t
- ;; Do only a set of variables.
- (let (,old-env)
- (dolist (,var ,v)
- (setq ,old-env (cons (cons ,var (getenv ,var)) ,old-env))
- (setenv ,var (terminal-getenv ,var ,term)))
- (unwind-protect
- (progn ,@body)
- ;; Split storing new values and restoring old ones so
- ;; that we DTRT even if a variable is specified twice in
- ;; VARS.
- (dolist (,var ,v)
- (terminal-setenv-internal ,var (getenv ,var) ,term))
- (dolist (,var ,old-env)
- (setenv (car ,var) (cdr ,var))))))))))
+;; (defun terminal-getenv (variable &optional terminal global-ok)
+;; "Get the value of VARIABLE in the client environment of TERMINAL.
+;; VARIABLE should be a string. Value is nil if VARIABLE is undefined in
+;; the environment. Otherwise, value is a string.
+
+;; If TERMINAL has an associated emacsclient process, then
+;; `terminal-getenv' looks up VARIABLE in the environment of that
+;; process; otherwise the function consults the global environment,
+;; i.e., the environment of the Emacs process itself.
+
+;; If GLOBAL-OK is non-nil, and VARIABLE is not defined in the
+;; terminal-local environment, then `terminal-getenv' will return
+;; its value in the global environment instead.
+
+;; TERMINAL can be a terminal id, a frame, or nil (meaning the
+;; selected frame's terminal)."
+;; (setq terminal (terminal-id terminal))
+;; (if (null (terminal-parameter terminal 'environment))
+;; (getenv variable)
+;; (if (multibyte-string-p variable)
+;; (setq variable (encode-coding-string variable locale-coding-system)))
+;; (let ((env (terminal-parameter terminal 'environment))
+;; result entry)
+;; (while (and env (null result))
+;; (setq entry (car env)
+;; env (cdr env))
+;; (if (and (> (length entry) (length variable))
+;; (eq ?= (aref entry (length variable)))
+;; (equal variable (substring entry 0 (length variable))))
+;; (setq result (substring entry (+ (length variable) 1)))))
+;; (if (and global-ok (null result))
+;; (getenv variable)
+;; (and result (decode-coding-string result locale-coding-system))))))
+
+;; (defun terminal-setenv (variable &optional value terminal)
+;; "Set the value of VARIABLE in the environment of TERMINAL.
+;; VARIABLE should be string. VALUE is optional; if not provided or
+;; nil, the environment variable VARIABLE is removed. Returned
+;; value is the new value of VARIABLE, or nil if it was removed from
+;; the environment.
+
+;; If TERMINAL was created by an emacsclient invocation, then the
+;; variable is set in the environment of the emacsclient process;
+;; otherwise the function changes the environment of the Emacs
+;; process itself.
+
+;; TERMINAL can be a terminal id, a frame, or nil (meaning the
+;; selected frame's terminal)."
+;; (if (null (terminal-parameter terminal 'environment))
+;; (setenv variable value)
+;; (with-terminal-environment terminal variable
+;; (setenv variable value))))
+
+;; (defun terminal-setenv-internal (variable value terminal)
+;; "Set the value of VARIABLE in the environment of TERMINAL.
+;; The caller is responsible to ensure that both VARIABLE and VALUE
+;; are usable in environment variables and that TERMINAL is a
+;; remote terminal."
+;; (if (multibyte-string-p variable)
+;; (setq variable (encode-coding-string variable locale-coding-system)))
+;; (if (and value (multibyte-string-p value))
+;; (setq value (encode-coding-string value locale-coding-system)))
+;; (let ((env (terminal-parameter terminal 'environment))
+;; found)
+;; (while (and env (not found))
+;; (if (and (> (length (car env)) (length variable))
+;; (eq ?= (aref (car env) (length variable)))
+;; (equal variable (substring (car env) 0 (length variable))))
+;; (progn
+;; (if value
+;; (setcar env (concat variable "=" value))
+;; (set-terminal-parameter terminal 'environment
+;; (delq (car env)
+;; (terminal-parameter terminal
+;; 'environment))))
+;; (setq found t))
+;; (setq env (cdr env))))
+;; (cond
+;; ((and value found)
+;; (setcar env (concat variable "=" value)))
+;; ((and value (not found))
+;; (set-terminal-parameter terminal 'environment
+;; (cons (concat variable "=" value)
+;; (terminal-parameter terminal
+;; 'environment))))
+;; ((and (not value) found)
+;; (set-terminal-parameter terminal 'environment
+;; (delq (car env)
+;; (terminal-parameter terminal
+;; 'environment)))))))
+
+;; (defmacro with-terminal-environment (terminal vars &rest body)
+;; "Evaluate BODY with environment variables VARS set to those of TERMINAL.
+;; The environment variables are then restored to their previous values.
+
+;; VARS should be a single string, a list of strings, or t for all
+;; environment variables.
+
+;; TERMINAL can be a terminal id, a frame, or nil (meaning the
+;; selected frame's terminal).
+
+;; If BODY uses `setenv' to change environment variables in VARS,
+;; then the new variable values will be remembered for TERMINAL, and
+;; `terminal-getenv' will return them even outside BODY."
+;; (declare (indent 2))
+;; (let ((var (make-symbol "var"))
+;; (term (make-symbol "term"))
+;; (v (make-symbol "v"))
+;; (old-env (make-symbol "old-env")))
+;; `(let ((,term ,terminal) ; Evaluate arguments only once.
+;; (,v ,vars))
+;; (if (stringp ,v)
+;; (setq ,v (list ,v)))
+;; (cond
+;; ((null (terminal-parameter ,term 'environment))
+;; ;; Not a remote terminal; nothing to do.
+;; (progn ,@body))
+;; ((eq ,v t)
+;; ;; Switch the entire process-environment.
+;; (let (,old-env process-environment)
+;; (setq process-environment (terminal-parameter ,term 'environment))
+;; (unwind-protect
+;; (progn ,@body)
+;; (set-terminal-parameter ,term 'environment process-environment)
+;; (setq process-environment ,old-env))))
+;; (t
+;; ;; Do only a set of variables.
+;; (let (,old-env)
+;; (dolist (,var ,v)
+;; (setq ,old-env (cons (cons ,var (getenv ,var)) ,old-env))
+;; (setenv ,var (terminal-getenv ,var ,term)))
+;; (unwind-protect
+;; (progn ,@body)
+;; ;; Split storing new values and restoring old ones so
+;; ;; that we DTRT even if a variable is specified twice in
+;; ;; VARS.
+;; (dolist (,var ,v)
+;; (terminal-setenv-internal ,var (getenv ,var) ,term))
+;; (dolist (,var ,old-env)
+;; (setenv (car ,var) (cdr ,var))))))))))
(provide 'termdev)