summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiles Bader <miles@gnu.org>2007-05-16 07:12:33 +0000
committerMiles Bader <miles@gnu.org>2007-05-16 07:12:33 +0000
commit36ab861205a8e5f930918ff4c8e62d158169a32a (patch)
tree90cd759731bae97e70754a58d07d8ca37b8e976c
parenta9683a703b3d03b2f8480f04d081fe366e94e599 (diff)
downloademacs-36ab861205a8e5f930918ff4c8e62d158169a32a.tar.gz
Rudimentary fix for environment variable handling.
* lisp/env.el (getenv): Restore David Kastrup's fix. (environment): Add optional frame parameter. * lisp/mule-cmds.el (set-locale-environment): Fix getenv call. * lisp/term/rxvt.el (rxvt-set-background-mode): Ditto. * lisp/x-win.el (x-initialize-window-system, terminal-init-xterm): Ditto. * lisp/server.el (server-with-environment): Restore the original environment. Revision: emacs@sv.gnu.org/emacs--multi-tty--0--patch-6 Creator: Karoly Lorentey <karoly@lorentey.hu>
-rw-r--r--README.multi-tty113
-rw-r--r--lisp/env.el10
-rw-r--r--lisp/international/mule-cmds.el33
-rw-r--r--lisp/server.el14
-rw-r--r--lisp/term/rxvt.el2
-rw-r--r--lisp/term/x-win.el2
-rw-r--r--lisp/term/xterm.el4
7 files changed, 54 insertions, 124 deletions
diff --git a/README.multi-tty b/README.multi-tty
index ce5b3337eae..41120566ea9 100644
--- a/README.multi-tty
+++ b/README.multi-tty
@@ -19,13 +19,8 @@ nice if they could connect to this instance from a remote ssh session
and check their messages without opening a remote X frame or resorting
to gnus-slave.
-WHO IS DOING IT
----------------
-
-I'm Károly Lőrentey. My address: lorentey@elte.hu.
-
-Comments, bug reports, suggestions and patches are welcome; send them
-to multi-tty@lists.fnord.hu.
+THANKS
+------
The following is a (sadly incomplete) list of people who have
contributed to the project by testing, submitting patches, bug
@@ -70,21 +65,6 @@ Richard Stallman was kind enough to review an earlier version of my
patches.
-MAILING LISTS
--------------
-
-The multi-tty mailing list (discussion & bug reports):
-
- Address: multi-tty@lists.fnord.hu
- Signup: http://lists.fnord.hu/mailman/listinfo/multi-tty
- Archive: http://news.gmane.org/gmane.emacs.multi-tty/
-
-Commit notifications (read-only):
-
- Address: multi-tty-commits@lists.fnord.hu
- Signup: http://lists.fnord.hu/mailman/listinfo/multi-tty-commits
-
-
STATUS
------
@@ -107,13 +87,14 @@ few tricky test cases for you.
Known problems:
* GTK support. If you compile your Emacs with the GTK
- toolkit, some functionality of multi-tty will be lost. In
- particular, you will not be able to work on multiple X
- displays at once. Current releases of GTK have limitations
- and bugs that prevent full-blown multi-display support in
- Emacs. (GTK crashes when Emacs tries to disconnect from an
- X server.) Use the Lucid toolkit if you want to see a
- complete feature set.
+ toolkit, some functionality of multi-tty may be lost. In
+ particular, you may get crashes while working on multiple X
+ displays at once. Previous releases of GTK had limitations
+ and bugs that prevented full-blown multi-display support in
+ Emacs. (GTK crashed when Emacs tries to disconnect from an
+ X server.) Things are much improved in the current GTK
+ version, but if you do experience crashes in libgtk, try
+ compiling Emacs with the Lucid toolkit instead.
* The single-kboard mode.
@@ -154,68 +135,12 @@ Known problems:
HOW TO GET THE BRANCH
---------------------
-The branch uses Bazaar 1 (http://bazaar.canonical.com) for version control.
-
-Retrieving the latest version of the branch:
-
- baz register-archive -f http://aszt.inf.elte.hu/~lorentey/mirror/arch/2004
- baz get lorentey@elte.hu--2004/emacs--multi-tty <directory>
-
-This incantation uses an archive mirror that is hosted on a
-high-bandwidth site. Please note that on average there is a two-hour
-delay for commits to arrive on this mirror. My primary mirror is on the
-low-bandwidth http://lorentey.hu/ site:
-
- baz register-archive -f http://lorentey.hu/arch/2004/
- baz get lorentey@elte.hu--2004/emacs--multi-tty <directory>
+To get the branch, check out the "multi-tty" CVS branch from Emacs CVS.
-This is "instantly" updated, but very slow from outside Hungary.
-(By "instantly" I mean as soon as I connect the notebook I work on to
-a network. It could take days.)
+Alternatively, you can use Bazaar version 1 (not 2) or tla:
-The Arch supermirror provides mirroring services for all public Arch
-repositories. We have a mirror there, too, if you prefer.
-
- baz register-archive -f http://mirrors.sourcecontrol.net/lorentey%40elte.hu--2004
- baz get lorentey@elte.hu--2004/emacs--multi-tty <directory>
-
-My GPG key id is 0FB27A3F; it is available from
-hkp://wwwkeys.eu.pgp.net/, or from my homepage at
-http://lorentey.hu/rolam/gpg.html)
-
-Don't worry if the above checkout takes a few minutes to complete;
-once you have a source tree, updating it to the latest revision will
-be _much_ faster. Use the following command for the update:
-
- baz replay
-
-You can find more information about Bazaar on
-http://bazaar.canonical.com/. It's a distributed source control
-system that is somewhat less broken than competing projects.
-
-If you don't have Bazaar, the branch has a homepage from which you can
-download conventional patches against Emacs CVS HEAD:
-
- http://lorentey.hu/project/emacs.html
-
-I suggest you use Bazaar whenever feasible.
-
-
-DEBIAN PACKAGES
----------------
-
-If you run Debian, or a distribution based on Debian, you are welcome
-to use our binary packages; put these lines in your /etc/apt/sources.list:
-
- # Multi-tty Emacs
- deb http://aszt.inf.elte.hu/~lorentey/mirror/apt unstable multi-tty
- deb-src http://aszt.inf.elte.hu/~lorentey/mirror/apt unstable multi-tty
-
-Note that these packages are intended solely to provide an easy way to
-test the new multi-tty features. They are not to be taken as Emacs
-releases, and it's a mistake to expect robust operation or any kind of
-timely support for them. Do not install them, unless you'd like to
-have your editor crash on you.
+ baz register-archive http://arch.sv.gnu.org/archives/emacs
+ baz get emacs@sv.gnu.org/emacs--multi-tty--0 <directory>
COMPILATION
@@ -225,7 +150,7 @@ The multi-tty branch is compiled the same way as Emacs itself:
make maintainer-clean # (If you have compiled Emacs before)
- ./configure --without-gtk <your favourite options>
+ ./configure <your favourite options>
make bootstrap
make install
@@ -262,8 +187,9 @@ exit emacs, all terminals should be restored to their previous states.
This is work in progress, and probably full of bugs. It is a good
idea to run emacs from gdb, so that you'll have a live instance to
-debug if something goes wrong. Please send me your bug reports on our
-mailing list: multi-tty@lists.fnord.hu
+debug if something goes wrong. Please send your bug reports to
+emacs-devel@gnu.org. Please don't forget to mention that you are
+using the multi-tty branch.
TIPS & TRICKS
-------------
@@ -348,8 +274,7 @@ following:
CHANGELOG
---------
-See arch logs.
-
+See the ChangeLog.multi-tty files in the source tree.
NEWS
----
diff --git a/lisp/env.el b/lisp/env.el
index 33d4287312f..a6626dc08ff 100644
--- a/lisp/env.el
+++ b/lisp/env.el
@@ -212,20 +212,24 @@ in the environment list of the selected frame."
(let ((value (getenv-internal (if (multibyte-string-p variable)
(encode-coding-string
variable locale-coding-system)
- variable))))
+ variable)
+ frame)))
(if (and enable-multibyte-characters value)
(setq value (decode-coding-string value locale-coding-system)))
(when (interactive-p)
(message "%s" (if value value "Not set")))
value))
-(defun environment ()
+(defun environment (&optional frame)
"Return a list of environment variables with their values.
Each entry in the list is a string of the form NAME=VALUE.
The returned list can not be used to change environment
variables, only read them. See `setenv' to do that.
+If optional parameter FRAME is non-nil, then it should be a
+frame. The function returns the environment of that frame.
+
The list is constructed by concatenating the elements of
`process-environment' and the 'environment parameter of the
selected frame, and removing duplicated and empty values.
@@ -234,7 +238,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
- (frame-parameter (frame-with-environment)
+ (frame-parameter (frame-with-environment frame)
'environment)
nil))
(scan env)
diff --git a/lisp/international/mule-cmds.el b/lisp/international/mule-cmds.el
index c9a788f0ec5..980cb346600 100644
--- a/lisp/international/mule-cmds.el
+++ b/lisp/international/mule-cmds.el
@@ -2454,7 +2454,7 @@ is returned. Thus, for instance, if charset \"ISO8859-2\",
;; too, for setting things such as calendar holidays, ps-print paper
;; size, spelling dictionary.
-(defun set-locale-environment (&optional locale-name display)
+(defun set-locale-environment (&optional locale-name frame)
"Set up multi-lingual environment for using LOCALE-NAME.
This sets the language environment, the coding system priority,
the default input method and sometimes other things.
@@ -2475,10 +2475,9 @@ directory named `/usr/share/locale' or `/usr/lib/locale'. LOCALE-NAME
will be translated according to the table specified by
`locale-translation-file-name'.
-If DISPLAY is non-nil, only set the keyboard coding system and
-the terminal coding system for the given display, and don't touch
-session-global parameters like the language environment. DISPLAY
-may be a display id or a frame.
+If FRAME is non-nil, only set the keyboard coding system and the
+terminal coding system for the terminal of that frame, and don't
+touch session-global parameters like the language environment.
See also `locale-charset-language-names', `locale-language-names',
`locale-preferred-coding-systems' and `locale-coding-system'."
@@ -2509,7 +2508,7 @@ See also `locale-charset-language-names', `locale-language-names',
(let ((vars '("LC_ALL" "LC_CTYPE" "LANG")))
(while (and vars
(= 0 (length locale))) ; nil or empty string
- (setq locale (getenv (pop vars) display)))))
+ (setq locale (getenv (pop vars) frame)))))
(unless locale
;; The two tests are kept separate so the byte-compiler sees
@@ -2583,7 +2582,7 @@ See also `locale-charset-language-names', `locale-language-names',
;; Set up for this character set. This is now the right way
;; to do it for both unibyte and multibyte modes.
- (unless display
+ (unless frame
(set-language-environment language-name))
;; If default-enable-multibyte-characters is nil,
@@ -2591,7 +2590,7 @@ See also `locale-charset-language-names', `locale-language-names',
;; so the display table and terminal coding system are irrelevant.
(when default-enable-multibyte-characters
(set-display-table-and-terminal-coding-system
- language-name coding-system display))
+ language-name coding-system frame))
;; Set the `keyboard-coding-system' if appropriate (tty
;; only). At least X and MS Windows can generate
@@ -2603,13 +2602,13 @@ See also `locale-charset-language-names', `locale-language-names',
(let ((kcs (or coding-system
(car (get-language-info language-name
'coding-system)))))
- (if kcs (set-keyboard-coding-system kcs display)))
+ (if kcs (set-keyboard-coding-system kcs frame)))
- (unless display
+ (unless frame
(setq locale-coding-system
(car (get-language-info language-name 'coding-priority)))))
- (when (and (not display)
+ (when (and (not frame)
coding-system
(not (coding-system-equal coding-system
locale-coding-system)))
@@ -2625,9 +2624,9 @@ See also `locale-charset-language-names', `locale-language-names',
(when (boundp 'w32-ansi-code-page)
(let ((code-page-coding (intern (format "cp%d" w32-ansi-code-page))))
(when (coding-system-p code-page-coding)
- (unless display (setq locale-coding-system code-page-coding))
- (set-keyboard-coding-system code-page-coding display)
- (set-terminal-coding-system code-page-coding display))))
+ (unless frame (setq locale-coding-system code-page-coding))
+ (set-keyboard-coding-system code-page-coding frame)
+ (set-terminal-coding-system code-page-coding frame))))
(when (eq system-type 'darwin)
;; On Darwin, file names are always encoded in utf-8, no matter
@@ -2636,13 +2635,13 @@ See also `locale-charset-language-names', `locale-language-names',
;; Mac OS X's Terminal.app by default uses utf-8 regardless of
;; the locale.
(when (and (null window-system)
- (equal (getenv "TERM_PROGRAM" display) "Apple_Terminal"))
+ (equal (getenv "TERM_PROGRAM" frame) "Apple_Terminal"))
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)))
;; Default to A4 paper if we're not in a C, POSIX or US locale.
;; (See comments in Flocale_info.)
- (unless display
+ (unless frame
(let ((locale locale)
(paper (locale-info 'paper)))
(if paper
@@ -2654,7 +2653,7 @@ See also `locale-charset-language-names', `locale-language-names',
(setq ps-paper-type 'a4)))
(let ((vars '("LC_ALL" "LC_PAPER" "LANG")))
(while (and vars (= 0 (length locale)))
- (setq locale (getenv (pop vars) display))))
+ (setq locale (getenv (pop vars) frame))))
(when locale
;; As of glibc 2.2.5, these are the only US Letter locales,
;; and the rest are A4.
diff --git a/lisp/server.el b/lisp/server.el
index 2e344084d0f..15721d1af1c 100644
--- a/lisp/server.el
+++ b/lisp/server.el
@@ -268,19 +268,21 @@ The environment variables are then restored to their previous values.
VARS should be a list of strings.
ENV should be in the same format as `process-environment'."
(declare (indent 2))
- (let ((oldvalues (make-symbol "oldvalues"))
+ (let ((old-env (make-symbol "old-env"))
(var (make-symbol "var"))
(value (make-symbol "value"))
(pair (make-symbol "pair")))
- `(let (,oldvalues)
+ `(let ((,old-env process-environment))
(dolist (,var ,vars)
(let ((,value (server-getenv-from ,env ,var)))
- (setq ,oldvalues (cons (cons ,var (getenv ,var)) ,oldvalues))
- (setenv ,var ,value)))
+ (setq process-environment
+ (cons (if (null ,value)
+ ,var
+ (concat ,var "=" ,value))
+ process-environment))))
(unwind-protect
(progn ,@body)
- (dolist (,pair ,oldvalues)
- (setenv (car ,pair) (cdr ,pair)))))))
+ (setq process-environment ,old-env)))))
(defun server-delete-client (client &optional noframe)
"Delete CLIENT, including its buffers, terminals and frames.
diff --git a/lisp/term/rxvt.el b/lisp/term/rxvt.el
index d9c87bba7fe..366a99819f7 100644
--- a/lisp/term/rxvt.el
+++ b/lisp/term/rxvt.el
@@ -284,7 +284,7 @@ for the currently selected frame."
;; intelligent way than the default guesswork in startup.el.
(defun rxvt-set-background-mode ()
"Set background mode as appropriate for the default rxvt colors."
- (let ((fgbg (getenv "COLORFGBG" (terminal-id)))
+ (let ((fgbg (getenv "COLORFGBG"))
bg rgb)
(set-terminal-parameter nil 'background-mode 'light)
(when (and fgbg
diff --git a/lisp/term/x-win.el b/lisp/term/x-win.el
index 834aa5f60d8..699b87739d1 100644
--- a/lisp/term/x-win.el
+++ b/lisp/term/x-win.el
@@ -2436,7 +2436,7 @@ order until succeed.")
(aset x-resource-name i ?-))))
(x-open-connection (or x-display-name
- (setq x-display-name (or (getenv "DISPLAY" (terminal-id))
+ (setq x-display-name (or (getenv "DISPLAY" (selected-frame))
(getenv "DISPLAY"))))
x-command-line-resources
;; Exit Emacs with fatal error if this fails and we
diff --git a/lisp/term/xterm.el b/lisp/term/xterm.el
index f601976cd63..f804fac5761 100644
--- a/lisp/term/xterm.el
+++ b/lisp/term/xterm.el
@@ -327,8 +327,8 @@
;; rxvt terminals sometimes set the TERM variable to "xterm", but
;; rxvt's keybindings are incompatible with xterm's. It is
;; better in that case to use rxvt's initializion function.
- (if (and (getenv "COLORTERM" (terminal-id))
- (string-match "\\`rxvt" (getenv "COLORTERM" (terminal-id))))
+ (if (and (getenv "COLORTERM" (selected-frame))
+ (string-match "\\`rxvt" (getenv "COLORTERM" (selected-frame))))
(tty-run-terminal-initialization (selected-frame) "rxvt")
;; The terminal intialization C code file might have initialized