annotate lisp/termdev.el @ 83416:4513d8dcdfd5

Reimplement and extend support for terminal-local environment variables. * lisp/termdev.el: New file. Move terminal parameter-related functions here from frame.el. (terminal-getenv, with-terminal-environment): Reimplement and extend. (terminal-setenv, terminal-setenv-internal): New functions. * lisp/frame.el (make-frame-on-tty, framep-on-display, suspend-frame): Extend doc string, update parameter names. (terminal-id, terminal-parameter-alist, terminal-parameters) (terminal-parameter-p, terminal-parameter, set-terminal-parameter) (terminal-handle-delete-frame, terminal-getenv, terminal-getenv) (with-terminal-environment): Move to termdev.el. * lisp/loadup.el: Load termdev as well. * lisp/Makefile.in (lisp, shortlisp): Add termdev.elc. * lisp/makefile.MPW (shortlisp): Ditto. * lisp/ebuff-menu.el (electric-buffer-menu-mode-map): Bind C-z to `suspend-frame', not `suspend-emacs'. * lisp/echistory.el (electric-history-map): Ditto. * lisp/ebrowse.el (ebrowse-electric-list-mode-map): Ditto. * lisp/ebrowse.el (ebrowse-electric-position-mode-map): Ditto. * lisp/startup.el (normal-splash-screen): Use `save-buffers-kill-display' instead of `save-buffers-kill-emacs'. * lisp/x-win.el (x-initialize-window-system): Add 'global-ok option to `terminal-getenv'. * src/term.c (suspend-tty): Update doc string. git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-456
author Karoly Lorentey <lorentey@elte.hu>
date Thu, 22 Dec 2005 21:02:45 +0000
parents
children 521d3f18b3d1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
83416
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
1 ;;; termdev.el --- functions for dealing with terminals
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
2
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
3 ;; Copyright (C) 2005 Free Software Foundation, Inc.
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
4
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
5 ;; Author: Karoly Lorentey <karoly@lorentey.hu>
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
6 ;; Created: 2005-12-22
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
7 ;; Keywords: internal
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
8
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
10
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
14 ;; any later version.
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
15
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
19 ;; GNU General Public License for more details.
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
20
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
23 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
24 ;; Boston, MA 02110-1301, USA.
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
25
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
26 (substitute-key-definition 'suspend-emacs 'suspend-frame global-map)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
27
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
28 (defun terminal-id (terminal)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
29 "Return the numerical id of terminal TERMINAL.
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
30
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
31 TERMINAL can be a terminal id (an integer), a frame, or
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
32 nil (meaning the selected frame's terminal). Alternatively,
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
33 TERMINAL may be the name of an X display
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
34 device (HOST.SERVER.SCREEN) or a tty device file."
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
35 (cond
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
36 ((integerp terminal)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
37 (if (display-live-p terminal)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
38 terminal
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
39 (signal 'wrong-type-argument (list 'display-live-p terminal))))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
40 ((or (null terminal) (framep terminal))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
41 (frame-display terminal))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
42 ((stringp terminal)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
43 (let ((f (car (filtered-frame-list (lambda (frame)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
44 (or (equal (frame-parameter frame 'display) terminal)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
45 (equal (frame-parameter frame 'tty) terminal)))))))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
46 (or f (error "Display %s does not exist" terminal))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
47 (frame-display f)))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
48 (t
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
49 (error "Invalid argument %s in `terminal-id'" terminal))))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
50
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
51 (defvar terminal-parameter-alist nil
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
52 "An alist of terminal parameter alists.")
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
53
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
54 (defun terminal-parameters (&optional terminal)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
55 "Return the paramater-alist of terminal TERMINAL.
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
56 It is a list of elements of the form (PARM . VALUE), where PARM is a symbol.
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
57
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
58 TERMINAL can be a terminal id, a frame, or nil (meaning the
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
59 selected frame's terminal)."
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
60 (cdr (assq (terminal-id terminal) terminal-parameter-alist)))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
61
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
62 (defun terminal-parameter-p (terminal parameter)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
63 "Return non-nil if PARAMETER is a terminal parameter on TERMINAL.
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
64
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
65 The actual value returned in that case is a cell (PARAMETER . VALUE),
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
66 where VALUE is the current value of PARAMETER.
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
67
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
68 TERMINAL can be a terminal id, a frame, or nil (meaning the
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
69 selected frame's terminal)."
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
70 (assq parameter (cdr (assq (terminal-id terminal) terminal-parameter-alist))))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
71
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
72 (defun terminal-parameter (terminal parameter)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
73 "Return TERMINAL's value for parameter PARAMETER.
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
74
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
75 TERMINAL can be a terminal id, a frame, or nil (meaning the
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
76 selected frame's terminal)."
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
77 (cdr (terminal-parameter-p terminal parameter)))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
78
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
79 (defun set-terminal-parameter (terminal parameter value)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
80 "Set TERMINAL's value for parameter PARAMETER to VALUE.
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
81 Returns the previous value of PARAMETER.
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
82
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
83 TERMINAL can be a terminal id, a frame, or nil (meaning the
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
84 selected frame's terminal)."
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
85 (setq terminal (terminal-id terminal))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
86 (let* ((alist (assq terminal terminal-parameter-alist))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
87 (pair (assq parameter (cdr alist)))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
88 (result (cdr pair)))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
89 (cond
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
90 (pair (setcdr pair value))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
91 (alist (setcdr alist (cons (cons parameter value) (cdr alist))))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
92 (t (setq terminal-parameter-alist
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
93 (cons (cons terminal
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
94 (cons (cons parameter value)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
95 nil))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
96 terminal-parameter-alist))))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
97 result))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
98
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
99 (defun terminal-handle-delete-frame (frame)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
100 "Clean up terminal parameters of FRAME, if it's the last frame on its terminal."
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
101 ;; XXX We assume that the display is closed immediately after the
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
102 ;; last frame is deleted on it. It would be better to create a hook
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
103 ;; called `delete-display-functions', and use it instead.
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
104 (when (and (frame-live-p frame)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
105 (= 1 (length (frames-on-display-list (frame-display frame)))))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
106 (setq terminal-parameter-alist
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
107 (assq-delete-all (frame-display frame) terminal-parameter-alist))))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
108
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
109 (add-hook 'delete-frame-functions 'terminal-handle-delete-frame)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
110
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
111 (defun terminal-getenv (variable &optional terminal global-ok)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
112 "Get the value of VARIABLE in the client environment of TERMINAL.
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
113 VARIABLE should be a string. Value is nil if VARIABLE is undefined in
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
114 the environment. Otherwise, value is a string.
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
115
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
116 If TERMINAL has an associated emacsclient process, then
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
117 `terminal-getenv' looks up VARIABLE in the environment of that
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
118 process; otherwise the function consults the global environment,
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
119 i.e., the environment of the Emacs process itself.
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
120
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
121 If GLOBAL-OK is non-nil, and VARIABLE is not defined in the
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
122 terminal-local environment, then `terminal-getenv' will return
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
123 its value in the global environment instead.
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
124
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
125 TERMINAL can be a terminal id, a frame, or nil (meaning the
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
126 selected frame's terminal)."
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
127 (setq terminal (terminal-id terminal))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
128 (if (not (terminal-parameter-p terminal 'environment))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
129 (getenv variable)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
130 (if (multibyte-string-p variable)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
131 (setq variable (encode-coding-string variable locale-coding-system)))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
132 (let ((env (terminal-parameter terminal 'environment))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
133 result entry)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
134 (while (and env (null result))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
135 (setq entry (car env)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
136 env (cdr env))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
137 (if (and (> (length entry) (length variable))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
138 (eq ?= (aref entry (length variable)))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
139 (equal variable (substring entry 0 (length variable))))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
140 (setq result (substring entry (+ (length variable) 1)))))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
141 (if (and global-ok (null result))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
142 (getenv variable)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
143 (and result (decode-coding-string result locale-coding-system))))))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
144
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
145 (defun terminal-setenv (variable &optional value terminal)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
146 "Set the value of VARIABLE in the environment of TERMINAL.
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
147 VARIABLE should be string. VALUE is optional; if not provided or
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
148 nil, the environment variable VARIABLE is removed. Returned
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
149 value is the new value of VARIABLE, or nil if it was removed from
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
150 the environment.
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
151
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
152 If TERMINAL was created by an emacsclient invocation, then the
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
153 variable is set in the environment of the emacsclient process;
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
154 otherwise the function changes the environment of the Emacs
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
155 process itself.
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
156
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
157 TERMINAL can be a terminal id, a frame, or nil (meaning the
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
158 selected frame's terminal)."
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
159 (if (not (terminal-parameter-p terminal 'environment))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
160 (setenv variable value)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
161 (with-terminal-environment terminal variable
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
162 (setenv variable value))))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
163
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
164 (defun terminal-setenv-internal (variable value terminal)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
165 "Set the value of VARIABLE in the environment of TERMINAL.
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
166 The caller is responsible to ensure that both VARIABLE and VALUE
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
167 are usable in environment variables and that TERMINAL is a
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
168 remote terminal."
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
169 (if (multibyte-string-p variable)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
170 (setq variable (encode-coding-string variable locale-coding-system)))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
171 (if (and value (multibyte-string-p value))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
172 (setq value (encode-coding-string value locale-coding-system)))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
173 (let ((env (terminal-parameter terminal 'environment))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
174 found)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
175 (while (and env (not found))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
176 (if (and (> (length (car env)) (length variable))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
177 (eq ?= (aref (car env) (length variable)))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
178 (equal variable (substring (car env) 0 (length variable))))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
179 (progn
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
180 (if value
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
181 (setcar env (concat variable "=" value))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
182 (set-terminal-parameter terminal 'environment
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
183 (delq (car env)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
184 (terminal-parameter terminal
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
185 'environment))))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
186 (setq found t))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
187 (setq env (cdr env))))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
188 (cond
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
189 ((and value found)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
190 (setcar env (concat variable "=" value)))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
191 ((and value (not found))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
192 (set-terminal-parameter terminal 'environment
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
193 (cons (concat variable "=" value)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
194 (terminal-parameter terminal
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
195 'environment))))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
196 ((and (not value) found)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
197 (set-terminal-parameter terminal 'environment
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
198 (delq (car env)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
199 (terminal-parameter terminal
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
200 'environment)))))))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
201
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
202 (defmacro with-terminal-environment (terminal vars &rest body)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
203 "Evaluate BODY with environment variables VARS set to those of TERMINAL.
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
204 The environment variables are then restored to their previous values.
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
205
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
206 VARS should be a single string, a list of strings, or t for all
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
207 environment variables.
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
208
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
209 TERMINAL can be a terminal id, a frame, or nil (meaning the
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
210 selected frame's terminal).
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
211
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
212 If BODY uses `setenv' to change environment variables in VARS,
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
213 then the new variable values will be remembered for TERMINAL, and
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
214 `terminal-getenv' will return them even outside BODY."
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
215 (declare (indent 2))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
216 (let ((var (make-symbol "var"))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
217 (term (make-symbol "term"))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
218 (v (make-symbol "v"))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
219 (old-env (make-symbol "old-env")))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
220 `(let ((,term ,terminal) ; Evaluate arguments only once.
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
221 (,v ,vars))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
222 (if (stringp ,v)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
223 (setq ,v (list ,v)))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
224 (cond
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
225 ((not (terminal-parameter-p ,term 'environment))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
226 ;; Not a remote terminal; nothing to do.
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
227 (progn ,@body))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
228 ((eq ,v t)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
229 ;; Switch the entire process-environment.
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
230 (let (,old-env process-environment)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
231 (setq process-environment (terminal-parameter ,term 'environment))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
232 (unwind-protect
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
233 (progn ,@body)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
234 (set-terminal-parameter ,term 'environment process-environment)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
235 (setq process-environment ,old-env))))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
236 (t
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
237 ;; Do only a set of variables.
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
238 (let (,old-env)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
239 (dolist (,var ,v)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
240 (setq ,old-env (cons (cons ,var (getenv ,var)) ,old-env))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
241 (setenv ,var (terminal-getenv ,var ,term)))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
242 (unwind-protect
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
243 (progn ,@body)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
244 ;; Split storing new values and restoring old ones so
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
245 ;; that we DTRT even if a variable is specified twice in
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
246 ;; VARS.
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
247 (dolist (,var ,v)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
248 (terminal-setenv-internal ,var (getenv ,var) ,term))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
249 (dolist (,var ,old-env)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
250 (setenv (car ,var) (cdr ,var))))))))))
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
251
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
252 (provide 'termdev)
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
253
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
254 ;;; arch-tag: 4c4df277-1ec1-4f56-bfde-7f156fe62fb2
4513d8dcdfd5 Reimplement and extend support for terminal-local environment variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
diff changeset
255 ;;; termdev.el ends here