summaryrefslogtreecommitdiff
path: root/lisp/international/encoded-kb.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/international/encoded-kb.el')
-rw-r--r--lisp/international/encoded-kb.el110
1 files changed, 49 insertions, 61 deletions
diff --git a/lisp/international/encoded-kb.el b/lisp/international/encoded-kb.el
index 7b3e6746b4a..392951d1c0d 100644
--- a/lisp/international/encoded-kb.el
+++ b/lisp/international/encoded-kb.el
@@ -175,7 +175,7 @@ The following key sequence may cause multilingual text insertion."
(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.
@@ -183,7 +183,7 @@ The following key sequence may cause multilingual text insertion."
((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)
@@ -191,7 +191,7 @@ The following key sequence may cause multilingual text insertion."
((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)
@@ -217,20 +217,20 @@ The following key sequence may cause multilingual text insertion."
(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))))
@@ -245,7 +245,7 @@ The following key sequence may cause multilingual text insertion."
(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))
@@ -253,59 +253,47 @@ The following key sequence may cause multilingual text insertion."
(t
nil)))
-;; key-translation-map at the time Encoded-kbd mode is turned on is
-;; saved here.
-(defvar saved-key-translation-map nil)
-
-;; Input mode at the time Encoded-kbd mode is turned on is saved here.
-(defvar saved-input-mode nil)
-
-(put 'encoded-kbd-mode 'permanent-local t)
;;;###autoload
-(define-minor-mode encoded-kbd-mode
- "Toggle Encoded-kbd minor mode.
-With arg, turn Encoded-kbd mode on if and only if arg is positive.
-
-You should not turn this mode on manually, instead use the command
-\\[set-keyboard-coding-system] which turns on or off this mode
-automatically.
-
-In Encoded-kbd mode, a text sent from keyboard is accepted
-as a multilingual text encoded in a coding system set by
-\\[set-keyboard-coding-system]."
- :global t :group 'keyboard :group 'mule
-
- (if encoded-kbd-mode
- ;; We are turning on Encoded-kbd mode.
- (let ((coding (keyboard-coding-system))
- result)
- (or saved-key-translation-map
- (if (keymapp key-translation-map)
- (setq saved-key-translation-map
- (copy-keymap key-translation-map))
- (setq key-translation-map (make-sparse-keymap))))
- (or saved-input-mode
- (setq saved-input-mode
- (current-input-mode)))
- (setq result (and coding (encoded-kbd-setup-keymap coding)))
- (if result
- (if (eq result 8)
- (set-input-mode
- (nth 0 saved-input-mode)
- (nth 1 saved-input-mode)
- 'use-8th-bit
- (nth 3 saved-input-mode)))
- (setq encoded-kbd-mode nil
- saved-key-translation-map nil
- saved-input-mode nil)
- (error "Unsupported coding system in Encoded-kbd mode: %S"
- coding)))
-
- ;; We are turning off Encoded-kbd mode.
- (setq key-translation-map saved-key-translation-map
- saved-key-translation-map nil)
- (apply 'set-input-mode saved-input-mode)
- (setq saved-input-mode nil)))
+(defun encoded-kbd-setup-display (display)
+ "Set up a `key-translation-map' for `keyboard-coding-system' on DISPLAY.
+
+DISPLAY may be a display id, a frame, or nil for the selected frame's display."
+ (let ((frame (if (framep display) display (car (frames-on-display-list display)))))
+ (when frame
+ (with-selected-frame frame
+ ;; Remove any previous encoded-kb keymap from key-translation-map.
+ (let ((m local-key-translation-map))
+ (if (equal (keymap-prompt m) "encoded-kb")
+ (setq local-key-translation-map (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))))
+ (setq m (keymap-parent m)))))
+
+ (if (keyboard-coding-system)
+ ;; We are turning on Encoded-kbd mode.
+ (let ((coding (keyboard-coding-system))
+ (keymap (make-sparse-keymap "encoded-kb"))
+ (cim (current-input-mode))
+ result)
+ (set-keymap-parent keymap local-key-translation-map)
+ (setq local-key-translation-map keymap)
+ (unless (terminal-parameter nil 'encoded-kbd-saved-input-meta-mode)
+ (set-terminal-parameter nil 'encoded-kbd-saved-input-mode (nth 2 cim)))
+ (setq result (and coding (encoded-kbd-setup-keymap keymap coding)))
+ (if result
+ (when (and (eq result 8)
+ (memq (nth 2 cim) '(t nil)))
+ (set-input-meta-mode 'use-8th-bit))
+ (set-terminal-parameter nil 'encoded-kbd-saved-input-meta-mode nil)
+ (error "Unsupported coding system in Encoded-kbd mode: %S"
+ coding)))
+ ;; We are turning off Encoded-kbd mode.
+ (when (and (terminal-parameter nil 'encoded-kbd-saved-input-meta-mode)
+ (not (equal (nth 2 (current-input-mode))
+ (terminal-parameter nil 'encoded-kbd-saved-input-meta-mode))))
+ (set-input-meta-mode (terminal-parameter nil 'encoded-kbd-saved-input-meta-mode)))
+ (set-terminal-parameter nil 'saved-input-meta-mode nil))))))
(provide 'encoded-kb)