* 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
alias gnus="connect-emacs gnus"
+CHANGELOG
+---------
+
+See arch logs.
+
+
NEWS
----
-For the NEWS file: (Needs work)
+For the NEWS file: (Needs much, much work)
** Support for multiple terminal devices has been added.
*** A make-frame-on-tty function has been added to make it easier to
create frames on new terminals.
-*** New functions: frame-tty-name, frame-tty-type for accessing
- terminal parameters, and delete-tty for closing the terminal
- device.
+*** New functions: frame-tty-name, frame-tty-type, delete-tty,
+ terminal-local-value, set-terminal-local-value
-*** talk.el has been extended for multiple tty support.
+*** New variables: global-key-translation-map
+*** The keymaps key-translation-map and function-key-map are now
+ terminal-local.
** Support for simultaneous graphical and terminal frames has been
added.
*** The new `initial-window-system' variable contains the
`window-system' value for the first frame.
-CHANGELOG
----------
+*** talk.el has been extended for multiple tty support.
-See arch logs.
* * *
(Done, by making `function-key-map' terminal-local (i.e., part of
struct kboard). This has probably covered all the remaining problems.)
+-- Make `function-key-map' and `key-translation-map' terminal-local.
+
+ (Done.)
+
+-- Implement `terminal-local-value' and `set-terminal-local-value' to
+ allow deterministic access to terminal local bindings. The
+ encode-kb package can not set up `key-translation-map' without
+ these. The terminal-local bindings seem to be independent of what
+ frame is selected.
+
+ (Done.)
+
;;; arch-tag: 8da1619e-2e79-41a8-9ac9-a0485daad17d
+
(setq str (format "%s%c" str (read-char-exclusive))))
(vector (aref result 0))))
-(defun encoded-kbd-setup-keymap (coding)
+(defun encoded-kbd-setup-keymap (keymap coding)
;; At first, reset the keymap.
(define-key encoded-kbd-mode-map "\e" nil)
;; Then setup the keymap according to the keyboard coding system.
((eq (coding-system-type coding) 1) ; SJIS
(let ((i 128))
(while (< i 256)
- (define-key key-translation-map
+ (define-key keymap
(vector i) 'encoded-kbd-self-insert-sjis)
(setq i (1+ i))))
8)
((eq (coding-system-type coding) 3) ; Big5
(let ((i 161))
(while (< i 255)
- (define-key key-translation-map
+ (define-key keymap
(vector i) 'encoded-kbd-self-insert-big5)
(setq i (1+ i))))
8)
(aset encoded-kbd-iso2022-invocations 1 1))
(when use-designation
(define-key encoded-kbd-mode-map "\e" 'encoded-kbd-iso2022-esc-prefix)
- (define-key key-translation-map "\e" 'encoded-kbd-iso2022-esc-prefix))
+ (define-key keymap "\e" 'encoded-kbd-iso2022-esc-prefix))
(when (or (aref flags 2) (aref flags 3))
- (define-key key-translation-map
+ (define-key keymap
[?\216] 'encoded-kbd-iso2022-single-shift)
- (define-key key-translation-map
+ (define-key keymap
[?\217] 'encoded-kbd-iso2022-single-shift))
(or (eq (aref flags 0) 'ascii)
(dotimes (i 96)
- (define-key key-translation-map
+ (define-key keymap
(vector (+ 32 i)) 'encoded-kbd-self-insert-iso2022-7bit)))
(if (aref flags 7)
t
(dotimes (i 96)
- (define-key key-translation-map
+ (define-key keymap
(vector (+ 160 i)) 'encoded-kbd-self-insert-iso2022-8bit))
8))))
(setq from (setq to elt)))
(while (<= from to)
(if (>= from 128)
- (define-key key-translation-map
+ (define-key keymap
(vector from) 'encoded-kbd-self-insert-ccl))
(setq from (1+ from))))
8))
(let ((frame (if (framep display) display (car (frames-on-display-list display)))))
(when frame
(with-selected-frame frame
- (message (format "encoded-kbd-setup-display %s %s %s" display frame key-translation-map))
;; Remove any previous encoded-kb keymap from key-translation-map.
- (let ((m key-translation-map))
+ (let ((m (terminal-local-value 'key-translation-map frame)))
(if (equal (keymap-prompt m) "encoded-kb")
- (setq key-translation-map (keymap-parent m))
+ (set-terminal-local-value 'key-translation-map frame (keymap-parent m))
(while (keymap-parent m)
(if (equal (keymap-prompt (keymap-parent m)) "encoded-kb")
(set-keymap-parent m (keymap-parent (keymap-parent m))))
(let ((coding (keyboard-coding-system))
(keymap (make-sparse-keymap "encoded-kb"))
result)
- (set-keymap-parent keymap key-translation-map)
- (setq key-translation-map keymap)
+ (set-keymap-parent keymap (terminal-local-value 'key-translation-map frame))
+ (set-terminal-local-value 'key-translation-map frame keymap)
(or saved-input-mode
(setq saved-input-mode (current-input-mode)))
- (setq result (and coding (encoded-kbd-setup-keymap coding)))
+ (setq result (and coding (encoded-kbd-setup-keymap keymap coding)))
(if result
(if (eq result 8)
(set-input-mode
;; We are turning off Encoded-kbd mode.
(and saved-input-mode
(apply 'set-input-mode saved-input-mode))
- (setq saved-input-mode nil))
- (when (not (eq (selected-frame) frame))
- (error "Anyátok picsája!"))))))
+ (setq saved-input-mode nil))))))
(provide 'encoded-kb)
:link '(info-link "(emacs)Specify Coding")
:link '(info-link "(emacs)Single-Byte Character Support")
:set (lambda (symbol value)
- ;; Don't load encoded-kbd-mode unnecessarily.
- (if (or value (boundp 'encoded-kbd-mode))
+ ;; Don't load encoded-kb unnecessarily.
+ (if (or value (boundp 'encoded-kbd-setup-display))
(set-keyboard-coding-system value)
(set-default 'keyboard-coding-system nil))) ; must initialize
:version "22.1"
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;
+}
\f
/* Find the function at the end of a chain of symbol function indirections. */
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);
command exit.
The value `kill-region' is special; it means that the previous command
-was a kill command. */);
+was a kill command.
+
+`last-command' has a separate binding for each display device.
+See Info node `(elisp)Multiple displays'. */);
DEFVAR_KBOARD ("real-last-command", Vreal_last_command,
doc: /* Same as `last-command', but never altered by Lisp code. */);
It also replaces `overriding-local-map'.
This variable is intended to let commands such as `universal-argument'
-set up a different keymap for reading the next command. */);
+set up a different keymap for reading the next command.
+
+`overriding-terminal-local-map' has a separate binding for each display device.
+See Info node `(elisp)Multiple displays'. */);
DEFVAR_LISP ("overriding-local-map", &Voverriding_local_map,
doc: /* Keymap that overrides all other local keymaps.
doc: /* Alist of system-specific X windows key symbols.
Each element should have the form (N . SYMBOL) where N is the
numeric keysym code (sans the \"system-specific\" bit 1<<28)
-and SYMBOL is its name. */);
+and SYMBOL is its name.
+
+`system-key-alist' has a separate binding for each display device.
+See Info node `(elisp)Multiple displays'.
+
+Note that the currently selected frame has very little to do with
+which binding of this variable is active at any given moment. If you
+need set or get the binding on a specific display, use
+`terminal-local-value' and `set-terminal-local-value'. */);
DEFVAR_KBOARD ("function-key-map", Vfunction_key_map,
doc: /* Keymap mapping ASCII function key sequences onto their preferred forms.
key, typing `ESC O P x' would return [f1 x].
`function-key-map' has a separate binding for each display device.
-See Info node `(elisp)Multiple displays'. */);
+See Info node `(elisp)Multiple displays'.
+
+Note that the currently selected frame has very little to do with
+which binding of this variable is active at any given moment. If you
+need set or get the binding on a specific display, use
+`terminal-local-value' and `set-terminal-local-value'. */);
DEFVAR_KBOARD ("key-translation-map", Vkey_translation_map,
doc: /* Keymap of key translations that can override keymaps.
`key-translation-map' has a separate binding for each display device.
(See Info node `(elisp)Multiple displays'.) If you need to set a key
-translation on all devices, change `global-key-translation-map' instead. */);
+translation on all devices, change `global-key-translation-map' instead.
+
+Note that the currently selected frame has very little to do with
+which binding of this variable is active at any given moment. If you
+need set or get the binding on a specific display, use
+`terminal-local-value' and `set-terminal-local-value'. */);
DEFVAR_LISP ("global-key-translation-map", &Vglobal_key_translation_map,
doc: /* The parent keymap of all terminal-local `key-translation-map' instances.