summaryrefslogtreecommitdiff
path: root/src/data.c
diff options
context:
space:
mode:
authorKaroly Lorentey <lorentey@elte.hu>2005-06-27 02:08:34 +0000
committerKaroly Lorentey <lorentey@elte.hu>2005-06-27 02:08:34 +0000
commit2a42d44084e05d60f28a51609aa7c12fb547fffe (patch)
treecdaa000810271e1898e8adfeb9b7760710c9547d /src/data.c
parente589efa546443ad7a61ec3867b46cda884d22de5 (diff)
downloademacs-2a42d44084e05d60f28a51609aa7c12fb547fffe.tar.gz
Work around nondeterministic binding of terminal-local variables. (Fixes national character input on ttys.)
* src/data.c (Fterminal_local_value, Fset_terminal_local_value): New functions. (syms_of_data): Defsubr them. * lisp/international/encoded-kb.el (encoded-kbd-setup-keymap): Add keymap parameter. Use it instead of changing key-translation-map directly. (encoded-kbd-setup-display): Use terminal-local-value and set-terminal-local-value to access key-translation-map. Remove debugging messages. * lisp/international/mule.el (keyboard-coding-system): Test for encoded-kbd-setup-display, not encoded-kbd-mode. * src/keyboard.c (syms_of_keyboard): Expand docs of terminal-local variables to warn about their random bindings. git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-365
Diffstat (limited to 'src/data.c')
-rw-r--r--src/data.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/data.c b/src/data.c
index 7bbb45ae043..c74d3c076c3 100644
--- a/src/data.c
+++ b/src/data.c
@@ -1875,6 +1875,44 @@ If the current binding is global (the default), the value is nil. */)
return Qnil;
}
+
+extern struct display *get_display P_ ((Lisp_Object display, int));
+
+DEFUN ("terminal-local-value", Fterminal_local_value, Sterminal_local_value, 2, 2, 0,
+ doc: /* Return the terminal-local value of SYMBOL on DISPLAY.
+If SYMBOL is not a terminal-local variable, then return its normal
+value, like `symbol-value'.
+
+DISPLAY may be a display, a frame, or nil (meaning the selected
+frame's display). */)
+ (symbol, display)
+ Lisp_Object symbol;
+ Lisp_Object display;
+{
+ Lisp_Object result;
+ struct display *d = get_display (display, 1);
+ push_display_kboard (d);
+ result = Fsymbol_value (symbol);
+ pop_frame_kboard ();
+ return result;
+}
+
+DEFUN ("set-terminal-local-value", Fset_terminal_local_value, Sset_terminal_local_value, 3, 3, 0,
+ doc: /* Set the terminal-local binding of SYMBOL on DISPLAY to VALUE.
+If VARIABLE is not a terminal-local variable, then set its normal
+binding, like `set'. */)
+ (symbol, display, value)
+ Lisp_Object symbol;
+ Lisp_Object display;
+ Lisp_Object value;
+{
+ Lisp_Object result;
+ struct display *d = get_display (display, 1);
+ push_display_kboard (d);
+ result = Fset (symbol, value);
+ pop_frame_kboard ();
+ return result;
+}
/* Find the function at the end of a chain of symbol function indirections. */
@@ -3326,6 +3364,8 @@ syms_of_data ()
defsubr (&Slocal_variable_p);
defsubr (&Slocal_variable_if_set_p);
defsubr (&Svariable_binding_locus);
+ defsubr (&Sterminal_local_value);
+ defsubr (&Sset_terminal_local_value);
defsubr (&Saref);
defsubr (&Saset);
defsubr (&Snumber_to_string);