comparison lisp/international/quail.el @ 19878:a69ae37e6932

(quail-update-translation): Fix previous change. (quail-simple-translation-keymap, quail-conversion-keymap): Make the default binding with define-key. Handle meta-prefix-char the way isearch does. (quail-translation-keymap): Likewise. (quail-execute-non-quail-command): Handle the key sequence as the same way as universal-argument-other-key. (quail-make-guidance-frame): Don't dedicate the guidance buffer window. (quail-show-guidance-buf): Likewise. (quail-hide-guidance-buf): Delete code to turn off window dedication.
author Richard M. Stallman <rms@gnu.org>
date Thu, 11 Sep 1997 23:15:08 +0000
parents 1c5164d81426
children 3ff7106cf88f
comparison
equal deleted inserted replaced
19877:3b008d891adb 19878:a69ae37e6932
269 (or (assq 'quail-mode map) 269 (or (assq 'quail-mode map)
270 (set-default 'minor-mode-map-alist (cons 'quail-mode map))))) 270 (set-default 'minor-mode-map-alist (cons 'quail-mode map)))))
271 271
272 (defvar quail-translation-keymap 272 (defvar quail-translation-keymap
273 (let ((map (make-keymap)) 273 (let ((map (make-keymap))
274 (i 0)) 274 (i 32))
275 (while (< i ?\ )
276 (define-key map (char-to-string i) 'quail-execute-non-quail-command)
277 (setq i (1+ i)))
278 (while (< i 127) 275 (while (< i 127)
279 (define-key map (char-to-string i) 'quail-self-insert-command) 276 (define-key map (char-to-string i) 'quail-self-insert-command)
280 (setq i (1+ i))) 277 (setq i (1+ i)))
281 (setq i 128) 278 (setq i 128)
282 (while (< i 256) 279 (while (< i 256)
294 ;;; (define-key map "\e" '(keymap (t . quail-execute-non-quail-command))) 291 ;;; (define-key map "\e" '(keymap (t . quail-execute-non-quail-command)))
295 (define-key map [?\C-\ ] 'quail-select-current) 292 (define-key map [?\C-\ ] 'quail-select-current)
296 (define-key map [tab] 'quail-completion) 293 (define-key map [tab] 'quail-completion)
297 (define-key map [delete] 'quail-delete-last-char) 294 (define-key map [delete] 'quail-delete-last-char)
298 (define-key map [backspace] 'quail-delete-last-char) 295 (define-key map [backspace] 'quail-delete-last-char)
296 (let ((meta-map (make-sparse-keymap)))
297 (define-key map (char-to-string meta-prefix-char) meta-map)
298 (define-key map [escape] meta-map))
299 (define-key map (vector meta-prefix-char t)
300 'quail-execute-non-quail-command)
299 ;; At last, define default key binding. 301 ;; At last, define default key binding.
300 (append map '((t . quail-execute-non-quail-command)))) 302 (define-key map [t] 'quail-execute-non-quail-command)
303 map)
301 "Keymap used processing translation in complex Quail modes. 304 "Keymap used processing translation in complex Quail modes.
302 Only a few especially complex input methods use this map; 305 Only a few especially complex input methods use this map;
303 most use `quail-simple-translation-keymap' instead. 306 most use `quail-simple-translation-keymap' instead.
304 This map is activated while translation region is active.") 307 This map is activated while translation region is active.")
305 308
313 (define-key map (char-to-string i) 'quail-self-insert-command) 316 (define-key map (char-to-string i) 'quail-self-insert-command)
314 (setq i (1+ i))) 317 (setq i (1+ i)))
315 (define-key map "\177" 'quail-delete-last-char) 318 (define-key map "\177" 'quail-delete-last-char)
316 ;;; This interferes with handling of escape sequences on non-X terminals. 319 ;;; This interferes with handling of escape sequences on non-X terminals.
317 ;;; (define-key map "\e" '(keymap (t . quail-execute-non-quail-command))) 320 ;;; (define-key map "\e" '(keymap (t . quail-execute-non-quail-command)))
321 (let ((meta-map (make-sparse-keymap)))
322 (define-key map (char-to-string meta-prefix-char) meta-map)
323 (define-key map [escape] meta-map))
324 (define-key map (vector meta-prefix-char t)
325 'quail-execute-non-quail-command)
318 ;; At last, define default key binding. 326 ;; At last, define default key binding.
319 (append map '((t . quail-execute-non-quail-command)))) 327 (define-key map (vector meta-prefix-char t)
328 'quail-execute-non-quail-command)
329 map)
320 "Keymap used while processing translation in simple Quail modes. 330 "Keymap used while processing translation in simple Quail modes.
321 A few especially complex input methods use `quail--translation-keymap' instead. 331 A few especially complex input methods use `quail--translation-keymap' instead.
322 This map is activated while translation region is active.") 332 This map is activated while translation region is active.")
323 333
324 (defvar quail-conversion-keymap 334 (defvar quail-conversion-keymap
344 ;;; This interferes with handling of escape sequences on non-X terminals. 354 ;;; This interferes with handling of escape sequences on non-X terminals.
345 ;;; (define-key map "\e" '(keymap (t . quail-execute-non-quail-command))) 355 ;;; (define-key map "\e" '(keymap (t . quail-execute-non-quail-command)))
346 (define-key map "\177" 'quail-conversion-backward-delete-char) 356 (define-key map "\177" 'quail-conversion-backward-delete-char)
347 (define-key map [delete] 'quail-conversion-backward-delete-char) 357 (define-key map [delete] 'quail-conversion-backward-delete-char)
348 (define-key map [backspace] 'quail-conversion-backward-delete-char) 358 (define-key map [backspace] 'quail-conversion-backward-delete-char)
359 (let ((meta-map (make-sparse-keymap)))
360 (define-key map (char-to-string meta-prefix-char) meta-map)
361 (define-key map [escape] meta-map))
362 (define-key map (vector meta-prefix-char t)
363 'quail-execute-non-quail-command)
349 ;; At last, define default key binding. 364 ;; At last, define default key binding.
350 (append map '((t . quail-execute-non-quail-command)))) 365 (define-key map [t] 'quail-execute-non-quail-command)
366 map)
351 "Keymap used for processing conversion in Quail mode. 367 "Keymap used for processing conversion in Quail mode.
352 This map is activated while convesion region is active but translation 368 This map is activated while convesion region is active but translation
353 region is not active.") 369 region is not active.")
354 370
355 ;;;###autoload 371 ;;;###autoload
595 611
596 (defun quail-execute-non-quail-command () 612 (defun quail-execute-non-quail-command ()
597 "Execute one non-Quail command out of Quail mode. 613 "Execute one non-Quail command out of Quail mode.
598 The current translation and conversion are terminated." 614 The current translation and conversion are terminated."
599 (interactive) 615 (interactive)
600 (setq unread-command-events (cons last-input-event unread-command-events)) 616 (let* ((key (this-command-keys))
617 (keylist (listify-key-sequence key)))
618 (setq unread-command-events (append keylist unread-command-events)))
619 (reset-this-command-lengths)
601 (quail-terminate-translation) 620 (quail-terminate-translation)
602 (quail-delete-overlays) 621 (quail-delete-overlays)
603 (setq overriding-terminal-local-map nil) 622 (setq overriding-terminal-local-map nil)
604 (if (buffer-live-p quail-guidance-buf) 623 (if (buffer-live-p quail-guidance-buf)
605 (save-excursion 624 (save-excursion
1077 (insert (or quail-current-str 1096 (insert (or quail-current-str
1078 (substring quail-current-key 0 len))) 1097 (substring quail-current-key 0 len)))
1079 ;; Otherwise, in case the user is using a single-byte 1098 ;; Otherwise, in case the user is using a single-byte
1080 ;; extended-ASCII character set, 1099 ;; extended-ASCII character set,
1081 ;; try inserting the translated character. 1100 ;; try inserting the translated character.
1082 (let ((char (sref (or quail-current-str 1101 (let ((char (or quail-current-str
1083 (substring quail-current-key 0 len)) 1102 (substring quail-current-key 0 len))))
1084 0))) 1103 (if (stringp char)
1104 (setq char (sref char 0)))
1085 (if (= (length (split-char char)) 2) 1105 (if (= (length (split-char char)) 2)
1086 (insert-char (logand char 127)) 1106 (insert-char (logand char 255) 1)
1087 (error "Cannot insert three-byte character in single-byte mode"))))) 1107 (error "Three-byte characters require enabling multibyte characters")))))
1088 (insert (or quail-current-str quail-current-key))))) 1108 (insert (or quail-current-str quail-current-key)))))
1089 (quail-update-guidance) 1109 (quail-update-guidance)
1090 (if control-flag 1110 (if control-flag
1091 (quail-terminate-translation))) 1111 (quail-terminate-translation)))
1092 1112
1382 (let* ((frame (make-frame (append '((user-position . t) (height . 1) 1402 (let* ((frame (make-frame (append '((user-position . t) (height . 1)
1383 (minibuffer) (menu-bar-lines . 0)) 1403 (minibuffer) (menu-bar-lines . 0))
1384 (cons (cons 'top newtop) fparam)))) 1404 (cons (cons 'top newtop) fparam))))
1385 (win (frame-first-window frame))) 1405 (win (frame-first-window frame)))
1386 (set-window-buffer win buf) 1406 (set-window-buffer win buf)
1387 (set-window-dedicated-p win t)))) 1407 ;;(set-window-dedicated-p win t)
1408 )))
1388 1409
1389 ;; Setup Quail completion buffer. 1410 ;; Setup Quail completion buffer.
1390 (defun quail-setup-completion-buf () 1411 (defun quail-setup-completion-buf ()
1391 (unless (buffer-live-p quail-completion-buf) 1412 (unless (buffer-live-p quail-completion-buf)
1392 (setq quail-completion-buf (get-buffer-create "*Quail Completions*")) 1413 (setq quail-completion-buf (get-buffer-create "*Quail Completions*"))
1446 (let ((window-min-height 2)) 1467 (let ((window-min-height 2))
1447 ;; Here, `split-window' returns a lower window 1468 ;; Here, `split-window' returns a lower window
1448 ;; which is what we wanted. 1469 ;; which is what we wanted.
1449 (setq win (split-window win (- height 2))))) 1470 (setq win (split-window win (- height 2)))))
1450 (set-window-buffer win quail-guidance-buf) 1471 (set-window-buffer win quail-guidance-buf)
1451 (set-window-dedicated-p win t))) 1472 ;;(set-window-dedicated-p win t)
1473 ))
1452 (set-window-buffer win quail-guidance-buf)) 1474 (set-window-buffer win quail-guidance-buf))
1453 (setq quail-guidance-win win))) 1475 (setq quail-guidance-win win)))
1454 1476
1455 ;; And, create a buffer for completion. 1477 ;; And, create a buffer for completion.
1456 (quail-setup-completion-buf) 1478 (quail-setup-completion-buf)
1471 (if (eq win (frame-root-window (window-frame win))) 1493 (if (eq win (frame-root-window (window-frame win)))
1472 (progn 1494 (progn
1473 ;; We are using a separate frame for guidance buffer. 1495 ;; We are using a separate frame for guidance buffer.
1474 ;;(set-window-dedicated-p win nil) 1496 ;;(set-window-dedicated-p win nil)
1475 (delete-frame (window-frame win))) 1497 (delete-frame (window-frame win)))
1476 (set-window-dedicated-p win nil) 1498 ;;(set-window-dedicated-p win nil)
1477 (delete-window win))))))) 1499 (delete-window win)))))))
1478 1500
1479 (defun quail-update-guidance () 1501 (defun quail-update-guidance ()
1480 "Update the Quail guidance buffer and completion buffer (if displayed now)." 1502 "Update the Quail guidance buffer and completion buffer (if displayed now)."
1481 ;; Update guidance buffer. 1503 ;; Update guidance buffer.