Mercurial > emacs
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) |