diff options
| author | Kenichi Handa | 2000-02-23 08:04:56 +0000 |
|---|---|---|
| committer | Kenichi Handa | 2000-02-23 08:04:56 +0000 |
| commit | 068b074ebee4198221f5cb725ee7751d35ae0c81 (patch) | |
| tree | 41d0421a1a4bd9a4b8e5eb4007a6796709d5ea13 | |
| parent | c709bcf10baf3275b21fca17f9854862bfb70f9c (diff) | |
| download | emacs-068b074ebee4198221f5cb725ee7751d35ae0c81.tar.gz emacs-068b074ebee4198221f5cb725ee7751d35ae0c81.zip | |
Be sure to update minor-mode-alist
and minor-mode-map-alist.
(encoded-kbd-self-insert-iso2022-8bit): Handle ISO's single shift
codes SS2 and SS3 correctly.
(encoded-kbd-self-insert-ccl): New function.
(encoded-kbd-setup-keymap): New function.
(encoded-kbd-mode): Handle CCL based coding system. Setup keymap
by calling encoded-kbd-setup-keymap.
| -rw-r--r-- | lisp/international/encoded-kb.el | 115 |
1 files changed, 94 insertions, 21 deletions
diff --git a/lisp/international/encoded-kb.el b/lisp/international/encoded-kb.el index b77e4b36cf9..53bd38de53d 100644 --- a/lisp/international/encoded-kb.el +++ b/lisp/international/encoded-kb.el | |||
| @@ -24,24 +24,22 @@ | |||
| 24 | "Non-nil if in Encoded-kbd minor mode.") | 24 | "Non-nil if in Encoded-kbd minor mode.") |
| 25 | (put 'encoded-kbd-mode 'permanent-local t) | 25 | (put 'encoded-kbd-mode 'permanent-local t) |
| 26 | 26 | ||
| 27 | (or (assq 'encoded-kbd-mode minor-mode-alist) | 27 | (let ((slot (assq 'encoded-kbd-mode minor-mode-alist)) |
| 28 | (name " Encoded-kbd")) | ||
| 29 | (if slot | ||
| 30 | (setcar (cdr slot) name) | ||
| 28 | (setq minor-mode-alist | 31 | (setq minor-mode-alist |
| 29 | (cons '(encoded-kbd-mode " Encoded-kbd") minor-mode-alist))) | 32 | (cons '(encoded-kbd-mode " Encoded-kbd") minor-mode-alist)))) |
| 30 | 33 | ||
| 31 | (defvar encoded-kbd-mode-map | 34 | (defconst encoded-kbd-mode-map (make-sparse-keymap) |
| 32 | (let ((map (make-sparse-keymap)) | ||
| 33 | (i 128)) | ||
| 34 | (define-key map "\e" 'encoded-kbd-iso2022-esc-prefix) | ||
| 35 | (while (< i 256) | ||
| 36 | (define-key map (vector i) 'encoded-kbd-handle-8bit) | ||
| 37 | (setq i (1+ i))) | ||
| 38 | map) | ||
| 39 | "Keymap for Encoded-kbd minor mode.") | 35 | "Keymap for Encoded-kbd minor mode.") |
| 40 | 36 | ||
| 41 | (or (assq 'encoded-kbd-mode minor-mode-map-alist) | 37 | (let ((slot (assq 'encoded-kbd-mode minor-mode-map-alist))) |
| 38 | (if slot | ||
| 39 | (setcdr slot encoded-kbd-mode-map) | ||
| 42 | (setq minor-mode-map-alist | 40 | (setq minor-mode-map-alist |
| 43 | (cons (cons 'encoded-kbd-mode encoded-kbd-mode-map) | 41 | (cons (cons 'encoded-kbd-mode encoded-kbd-mode-map) |
| 44 | minor-mode-map-alist))) | 42 | minor-mode-map-alist)))) |
| 45 | 43 | ||
| 46 | ;; Subsidiary keymaps for handling ISO2022 escape sequences. | 44 | ;; Subsidiary keymaps for handling ISO2022 escape sequences. |
| 47 | 45 | ||
| @@ -102,17 +100,18 @@ | |||
| 102 | ;; Encoded-kbd mode. | 100 | ;; Encoded-kbd mode. |
| 103 | (defvar encoded-kbd-coding nil) | 101 | (defvar encoded-kbd-coding nil) |
| 104 | 102 | ||
| 105 | ;; Keep information of designation state of ISO2022 encoding. This is | 103 | ;; Keep information of designation state of ISO2022 encoding. When |
| 106 | ;; a vector of character sets currently designated to each graphic | 104 | ;; Encoded-kbd mode is on, this is set to a vector of length 4, the |
| 107 | ;; registers (0..3). | 105 | ;; elements are character sets currently designated to graphic |
| 106 | ;; registers 0 thru 3. | ||
| 108 | 107 | ||
| 109 | (defvar encoded-kbd-iso2022-designations nil) | 108 | (defvar encoded-kbd-iso2022-designations nil) |
| 110 | (put 'encoded-kbd-iso2022-designations 'permanent-local t) | 109 | (put 'encoded-kbd-iso2022-designations 'permanent-local t) |
| 111 | 110 | ||
| 112 | ;; Keep information of invocation state of ISO2022 encoding. This is | 111 | ;; Keep information of invocation state of ISO2022 encoding. When |
| 113 | ;; a vector of graphic register numbers currently invoked to each | 112 | ;; Encoded-kbd mode is on, this is set to a vector of length 3, |
| 114 | ;; graphic plane (0..1), the third element is a single shifted graphic | 113 | ;; graphic register numbers currently invoked to graphic plane 1 and |
| 115 | ;; register number. | 114 | ;; 2, and a single shifted graphic register number. |
| 116 | 115 | ||
| 117 | (defvar encoded-kbd-iso2022-invocations nil) | 116 | (defvar encoded-kbd-iso2022-invocations nil) |
| 118 | (put 'encoded-kbd-iso2022-invocations 'permanent-local t) | 117 | (put 'encoded-kbd-iso2022-invocations 'permanent-local t) |
| @@ -203,14 +202,21 @@ The following key sequence may cause multilingual text insertion." | |||
| 203 | 202 | ||
| 204 | (defun encoded-kbd-self-insert-iso2022-8bit () | 203 | (defun encoded-kbd-self-insert-iso2022-8bit () |
| 205 | (interactive) | 204 | (interactive) |
| 205 | (cond | ||
| 206 | ((= last-command-char ?\216) ; SS2 (Single Shift 2) | ||
| 207 | (aset encoded-kbd-iso2022-invocations 2 2)) | ||
| 208 | ((= last-command-char ?\217) ; SS3 (Single Shift 3) | ||
| 209 | (aset encoded-kbd-iso2022-invocations 2 3)) | ||
| 210 | (t | ||
| 206 | (let* ((charset (aref encoded-kbd-iso2022-designations | 211 | (let* ((charset (aref encoded-kbd-iso2022-designations |
| 207 | (or (aref encoded-kbd-iso2022-invocations 2) | 212 | (or (aref encoded-kbd-iso2022-invocations 2) |
| 208 | (aref encoded-kbd-iso2022-invocations 1)))) | 213 | (aref encoded-kbd-iso2022-invocations 1)))) |
| 209 | (char (if (= (charset-dimension charset) 1) | 214 | (char (if (= (charset-dimension charset) 1) |
| 210 | (make-char charset last-command-char) | 215 | (make-char charset last-command-char) |
| 211 | (make-char charset last-command-char (read-char-exclusive))))) | 216 | (make-char charset last-command-char |
| 217 | (read-char-exclusive))))) | ||
| 212 | (aset encoded-kbd-iso2022-invocations 2 nil) | 218 | (aset encoded-kbd-iso2022-invocations 2 nil) |
| 213 | (setq unread-command-events (cons char unread-command-events)))) | 219 | (setq unread-command-events (cons char unread-command-events)))))) |
| 214 | 220 | ||
| 215 | (defun encoded-kbd-self-insert-sjis () | 221 | (defun encoded-kbd-self-insert-sjis () |
| 216 | (interactive) | 222 | (interactive) |
| @@ -226,6 +232,66 @@ The following key sequence may cause multilingual text insertion." | |||
| 226 | (read-char-exclusive))))) | 232 | (read-char-exclusive))))) |
| 227 | (setq unread-command-events (cons char unread-command-events)))) | 233 | (setq unread-command-events (cons char unread-command-events)))) |
| 228 | 234 | ||
| 235 | (defun encoded-kbd-self-insert-ccl () | ||
| 236 | (interactive) | ||
| 237 | (let ((str (char-to-string last-command-char)) | ||
| 238 | (coding (keyboard-coding-system))) | ||
| 239 | (setq str (decode-coding-string str coding)) | ||
| 240 | (setq unread-command-events | ||
| 241 | (append (string-to-list str) unread-command-events)))) | ||
| 242 | |||
| 243 | (defun encoded-kbd-setup-keymap (coding) | ||
| 244 | ;; At first, reset the keymap. | ||
| 245 | (setcdr encoded-kbd-mode-map nil) | ||
| 246 | ;; Then setup the keymap according to the keyboard coding system. | ||
| 247 | (cond | ||
| 248 | ((eq encoded-kbd-coding 'sjis) | ||
| 249 | (let ((i 128)) | ||
| 250 | (while (< i 256) | ||
| 251 | (define-key encoded-kbd-mode-map | ||
| 252 | (vector i) 'encoded-kbd-self-insert-sjis) | ||
| 253 | (setq i (1+ i))))) | ||
| 254 | |||
| 255 | ((eq encoded-kbd-coding 'big5) | ||
| 256 | (let ((i 161)) | ||
| 257 | (while (< i 255) | ||
| 258 | (define-key encoded-kbd-mode-map | ||
| 259 | (vector i) 'encoded-kbd-self-insert-big5) | ||
| 260 | (setq i (1+ i))))) | ||
| 261 | |||
| 262 | ((eq encoded-kbd-coding 'iso2022-7) | ||
| 263 | (define-key encoded-kbd-mode-map "\e" 'encoded-kbd-iso2022-esc-prefix)) | ||
| 264 | |||
| 265 | ((eq encoded-kbd-coding 'iso2022-8) | ||
| 266 | (define-key encoded-kbd-mode-map | ||
| 267 | (vector ?\216) 'encoded-kbd-self-insert-iso2022-8bit) | ||
| 268 | (define-key encoded-kbd-mode-map | ||
| 269 | (vector ?\217) 'encoded-kbd-self-insert-iso2022-8bit) | ||
| 270 | (let ((i 160)) | ||
| 271 | (while (< i 256) | ||
| 272 | (define-key encoded-kbd-mode-map | ||
| 273 | (vector i) 'encoded-kbd-self-insert-iso2022-8bit) | ||
| 274 | (setq i (1+ i))))) | ||
| 275 | |||
| 276 | ((eq encoded-kbd-coding 'ccl) | ||
| 277 | (let ((valid-codes (or (coding-system-get coding 'valid-codes) | ||
| 278 | '((128 255)))) | ||
| 279 | elt from to) | ||
| 280 | (while valid-codes | ||
| 281 | (setq elt (car valid-codes) valid-codes (cdr valid-codes)) | ||
| 282 | (if (consp elt) | ||
| 283 | (setq from (car elt) to (cdr elt)) | ||
| 284 | (setq from (setq to elt))) | ||
| 285 | (while (<= from to) | ||
| 286 | (if (>= from 128) | ||
| 287 | (define-key encoded-kbd-mode-map | ||
| 288 | (vector from) 'encoded-kbd-self-insert-ccl)) | ||
| 289 | (setq from (1+ from)))))) | ||
| 290 | |||
| 291 | (t | ||
| 292 | (error "Invalid value in encoded-kbd-coding: %s" encoded-kbd-coding)))) | ||
| 293 | |||
| 294 | |||
| 229 | ;; Input mode at the time Encoded-kbd mode is turned on is saved here. | 295 | ;; Input mode at the time Encoded-kbd mode is turned on is saved here. |
| 230 | (defvar saved-input-mode nil) | 296 | (defvar saved-input-mode nil) |
| 231 | 297 | ||
| @@ -288,10 +354,17 @@ as a multilingual text encoded in a coding system set by | |||
| 288 | 'use-8th-bit (nth 3 saved-input-mode)) | 354 | 'use-8th-bit (nth 3 saved-input-mode)) |
| 289 | (setq encoded-kbd-coding 'big5)) | 355 | (setq encoded-kbd-coding 'big5)) |
| 290 | 356 | ||
| 357 | ((= (coding-system-type coding) 4) ; CCL based coding | ||
| 358 | (set-input-mode | ||
| 359 | (nth 0 saved-input-mode) (nth 1 saved-input-mode) | ||
| 360 | 'use-8th-bit (nth 3 saved-input-mode)) | ||
| 361 | (setq encoded-kbd-coding 'ccl)) | ||
| 362 | |||
| 291 | (t | 363 | (t |
| 292 | (setq encoded-kbd-mode nil) | 364 | (setq encoded-kbd-mode nil) |
| 293 | (error "Coding-system `%s' is not supported in Encoded-kbd mode" | 365 | (error "Coding-system `%s' is not supported in Encoded-kbd mode" |
| 294 | (keyboard-coding-system)))) | 366 | (keyboard-coding-system)))) |
| 367 | (encoded-kbd-setup-keymap coding) | ||
| 295 | (run-hooks 'encoded-kbd-mode-hook)))) | 368 | (run-hooks 'encoded-kbd-mode-hook)))) |
| 296 | 369 | ||
| 297 | ;;; encoded-kb.el ends here | 370 | ;;; encoded-kb.el ends here |