comparison lisp/international/quail.el @ 22777:1b0761cbc15b

(quail-conversion-keymap): New binding for quail-conversion-delete-tail. (quail-input-method): Suppress input method if overriding-terminal-local-map or overriding-local-map is non-nil. Erase contents of quail-guidance-buf. Run the hook input-method-after-insert-chunk-hook. (quail-start-translation): Get the original event list by listify-key-sequence. Setup last-command and this-command (quail-start-conversion): Likewise. (quail-conversion-beginning-of-region): Set quail-translating to nil. (quail-conversion-end-of-region, quail-conversion-delete-char): Likewise. (quail-conversion-delete-tail): New function. (quail-no-conversion): Don' run the hook input-method-after-insert-chunk-hook.
author Kenichi Handa <handa@m17n.org>
date Sun, 19 Jul 1998 05:17:35 +0000
parents 7cf2c3800e8f
children c3ab1de66dfc
comparison
equal deleted inserted replaced
22776:1e2bf1acab23 22777:1b0761cbc15b
298 (define-key map "\C-b" 'quail-conversion-backward-char) 298 (define-key map "\C-b" 'quail-conversion-backward-char)
299 (define-key map "\C-f" 'quail-conversion-forward-char) 299 (define-key map "\C-f" 'quail-conversion-forward-char)
300 (define-key map "\C-a" 'quail-conversion-beginning-of-region) 300 (define-key map "\C-a" 'quail-conversion-beginning-of-region)
301 (define-key map "\C-e" 'quail-conversion-end-of-region) 301 (define-key map "\C-e" 'quail-conversion-end-of-region)
302 (define-key map "\C-d" 'quail-conversion-delete-char) 302 (define-key map "\C-d" 'quail-conversion-delete-char)
303 (define-key map "\C-k" 'quail-conversion-delete-tail)
303 (define-key map "\C-h" 'quail-conversion-help) 304 (define-key map "\C-h" 'quail-conversion-help)
304 (define-key map "\177" 'quail-conversion-backward-delete-char) 305 (define-key map "\177" 'quail-conversion-backward-delete-char)
305 (define-key map [delete] 'quail-conversion-backward-delete-char) 306 (define-key map [delete] 'quail-conversion-backward-delete-char)
306 (define-key map [backspace] 'quail-conversion-backward-delete-char) 307 (define-key map [backspace] 'quail-conversion-backward-delete-char)
307 map) 308 map)
853 (defvar quail-translating nil) 854 (defvar quail-translating nil)
854 (defvar quail-converting nil) 855 (defvar quail-converting nil)
855 856
856 (defun quail-input-method (key) 857 (defun quail-input-method (key)
857 (if (or buffer-read-only 858 (if (or buffer-read-only
858 (and (or overriding-terminal-local-map 859 overriding-terminal-local-map
859 overriding-local-map) 860 overriding-local-map)
860 (>= key ?0) (<= key ?9)))
861 (list key) 861 (list key)
862 (quail-setup-overlays (quail-conversion-keymap)) 862 (quail-setup-overlays (quail-conversion-keymap))
863 (let ((modified-p (buffer-modified-p))) 863 (let ((modified-p (buffer-modified-p)))
864 (unwind-protect 864 (unwind-protect
865 (if (quail-conversion-keymap) 865 (if (quail-conversion-keymap)
866 (quail-start-conversion key) 866 (quail-start-conversion key)
867 (quail-start-translation key)) 867 (quail-start-translation key))
868 (quail-delete-overlays)
869 (if (buffer-live-p quail-guidance-buf)
870 (save-excursion
871 (set-buffer quail-guidance-buf)
872 (erase-buffer)))
868 (set-buffer-modified-p modified-p) 873 (set-buffer-modified-p modified-p)
869 (quail-delete-overlays))))) 874 ;; Run this hook only when the current input method doesn't require
875 ;; conversion. When conversion is required, the conversion function
876 ;; should run this hook at a proper timing.
877 (unless (quail-conversion-keymap)
878 (run-hooks 'input-method-after-insert-chunk-hook))))))
870 879
871 (defun quail-overlay-region-events (overlay) 880 (defun quail-overlay-region-events (overlay)
872 (let ((start (overlay-start overlay)) 881 (let ((start (overlay-start overlay))
873 (end (overlay-end overlay))) 882 (end (overlay-end overlay)))
874 (if (< start end) 883 (if (< start end)
892 quail-translating t 901 quail-translating t
893 unread-command-events (cons key unread-command-events)) 902 unread-command-events (cons key unread-command-events))
894 (while quail-translating 903 (while quail-translating
895 (let* ((echo-keystrokes 0) 904 (let* ((echo-keystrokes 0)
896 (keyseq (read-key-sequence nil)) 905 (keyseq (read-key-sequence nil))
897 (cmd (lookup-key translation-keymap keyseq t))) 906 (events (listify-key-sequence keyseq))
907 (cmd (lookup-key translation-keymap keyseq)))
898 (if (commandp cmd) 908 (if (commandp cmd)
899 (progn 909 (progn
900 (setq last-command-event (aref keyseq 0)) 910 (setq last-command-event (car (last events))
911 last-command this-command
912 this-command cmd)
901 (condition-case err 913 (condition-case err
902 (call-interactively cmd) 914 (call-interactively cmd)
903 (quail-error (message "%s" (cdr err)) (beep)))) 915 (quail-error (message "%s" (cdr err)) (beep))))
904 ;; KEYSEQ is not defined in the translation keymap. 916 ;; KEYSEQ is not defined in the translation keymap.
905 ;; Let's return the event(s) to the caller. 917 ;; Let's return the event(s) to the caller.
906 (setq generated-events (string-to-list keyseq) 918 (setq generated-events events
907 quail-translating nil)))) 919 quail-translating nil))))
908 (setq generated-events 920 (setq generated-events
909 (append (quail-overlay-region-events quail-overlay) 921 (append (quail-overlay-region-events quail-overlay)
910 generated-events)) 922 generated-events))
911 generated-events) 923 generated-events)
936 quail-current-str nil 948 quail-current-str nil
937 quail-translating t) 949 quail-translating t)
938 (quail-setup-overlays nil))) 950 (quail-setup-overlays nil)))
939 (let* ((echo-keystrokes 0) 951 (let* ((echo-keystrokes 0)
940 (keyseq (read-key-sequence nil)) 952 (keyseq (read-key-sequence nil))
941 (cmd (lookup-key conversion-keymap keyseq t))) 953 (events (listify-key-sequence keyseq))
954 (cmd (lookup-key conversion-keymap keyseq)))
942 (if (commandp cmd) 955 (if (commandp cmd)
943 (progn 956 (progn
944 (setq last-command-event (aref keyseq 0)) 957 (setq last-command-event (car (last events))
958 last-command this-command
959 this-command cmd)
945 (condition-case err 960 (condition-case err
946 (call-interactively cmd) 961 (call-interactively cmd)
947 (quail-error (message "%s" (cdr err)) (beep)))) 962 (quail-error (message "%s" (cdr err)) (beep))))
948 ;; KEYSEQ is not defined in the conversion keymap. 963 ;; KEYSEQ is not defined in the conversion keymap.
949 ;; Let's return the event(s) to the caller. 964 ;; Let's return the event(s) to the caller.
950 (setq generated-events (string-to-list keyseq) 965 (setq generated-events events
951 quail-converting nil)))) 966 quail-converting nil))))
952 (setq generated-events 967 (setq generated-events
953 (append (quail-overlay-region-events quail-conv-overlay) 968 (append (quail-overlay-region-events quail-conv-overlay)
954 generated-events)) 969 generated-events))
955 generated-events) 970 generated-events)
1263 (setq quail-translating nil) 1278 (setq quail-translating nil)
1264 (forward-char 1)) 1279 (forward-char 1))
1265 1280
1266 (defun quail-conversion-beginning-of-region () 1281 (defun quail-conversion-beginning-of-region ()
1267 (interactive) 1282 (interactive)
1283 (setq quail-translating nil)
1268 (goto-char (overlay-start quail-conv-overlay))) 1284 (goto-char (overlay-start quail-conv-overlay)))
1269 1285
1270 (defun quail-conversion-end-of-region () 1286 (defun quail-conversion-end-of-region ()
1271 (interactive) 1287 (interactive)
1288 (setq quail-translating nil)
1272 (goto-char (overlay-end quail-conv-overlay))) 1289 (goto-char (overlay-end quail-conv-overlay)))
1273 1290
1274 (defun quail-conversion-delete-char () 1291 (defun quail-conversion-delete-char ()
1292 (interactive)
1293 (setq quail-translating nil)
1294 (if (>= (point) (overlay-end quail-conv-overlay))
1295 (quail-error "End of conversion region"))
1296 (delete-char 1)
1297 (if (= (overlay-start quail-conv-overlay)
1298 (overlay-end quail-conv-overlay))
1299 (setq quail-converting nil)))
1300
1301 (defun quail-conversion-delete-tail ()
1275 (interactive) 1302 (interactive)
1276 (if (>= (point) (overlay-end quail-conv-overlay)) 1303 (if (>= (point) (overlay-end quail-conv-overlay))
1277 (quail-error "End of conversion region")) 1304 (quail-error "End of conversion region"))
1278 (delete-char 1) 1305 (delete-region (point) (overlay-end quail-conv-overlay))
1279 (if (= (overlay-start quail-conv-overlay) 1306 (if (= (overlay-start quail-conv-overlay)
1280 (overlay-end quail-conv-overlay)) 1307 (overlay-end quail-conv-overlay))
1281 (setq quail-converting nil))) 1308 (setq quail-converting nil)))
1282 1309
1283 (defun quail-conversion-backward-delete-char () 1310 (defun quail-conversion-backward-delete-char ()
1296 (apply func args)) 1323 (apply func args))
1297 1324
1298 (defun quail-no-conversion () 1325 (defun quail-no-conversion ()
1299 "Do no conversion of the current conversion region of Quail." 1326 "Do no conversion of the current conversion region of Quail."
1300 (interactive) 1327 (interactive)
1301 (setq quail-converting nil) 1328 (setq quail-converting nil))
1302 (run-hooks 'input-method-after-insert-chunk-hook))
1303 1329
1304 ;; Guidance, Completion, and Help buffer handlers. 1330 ;; Guidance, Completion, and Help buffer handlers.
1305 1331
1306 ;; Make a new one-line frame for Quail guidance buffer. 1332 ;; Make a new one-line frame for Quail guidance buffer.
1307 (defun quail-make-guidance-frame (buf) 1333 (defun quail-make-guidance-frame (buf)