Mercurial > hg > xemacs-beta
comparison lisp/quail/quail.el @ 138:6608ceec7cf8 r20-2b3
Import from CVS: tag r20-2b3
author | cvs |
---|---|
date | Mon, 13 Aug 2007 09:31:46 +0200 |
parents | 131b0175ea99 |
children |
comparison
equal
deleted
inserted
replaced
137:cae984061f40 | 138:6608ceec7cf8 |
---|---|
31 ;; multilingual text from normal ASCII keyboard. By defining a | 31 ;; multilingual text from normal ASCII keyboard. By defining a |
32 ;; translation table which maps ASCII string to multilingual | 32 ;; translation table which maps ASCII string to multilingual |
33 ;; string, you can input any text from ASCII keyboard. | 33 ;; string, you can input any text from ASCII keyboard. |
34 | 34 |
35 (require 'mule) | 35 (require 'mule) |
36 (require 'visual-mode) | |
36 | 37 |
37 ;;;###autoload | 38 ;;;###autoload |
38 (defconst quail-version "2.2") | 39 (defconst quail-version "2.2") |
39 | 40 |
40 (defvar quail-region-face 'underline) | 41 (defvar quail-region-face 'underline) |
59 (make-variable-buffer-local 'quail-sub-mode) | 60 (make-variable-buffer-local 'quail-sub-mode) |
60 (defvar quail-keep-state nil) | 61 (defvar quail-keep-state nil) |
61 (make-variable-buffer-local 'quail-keep-state) | 62 (make-variable-buffer-local 'quail-keep-state) |
62 (defvar quail-mode-string nil) | 63 (defvar quail-mode-string nil) |
63 (make-variable-buffer-local 'quail-mode-string) | 64 (make-variable-buffer-local 'quail-mode-string) |
64 (defvar quail-overlay nil | 65 (defvar quail-extent nil |
65 "Overlay which covers quail zone.") | 66 "Overlay which covers quail zone.") |
66 (make-variable-buffer-local 'quail-overlay) | 67 (make-variable-buffer-local 'quail-extent) |
67 (defvar quail-current-key nil | 68 (defvar quail-current-key nil |
68 "Within Quail mode, a key string typed so far.") | 69 "Within Quail mode, a key string typed so far.") |
69 (make-variable-buffer-local 'quail-current-key) | 70 (make-variable-buffer-local 'quail-current-key) |
70 (defvar quail-current-str nil | 71 (defvar quail-current-str nil |
71 "Within Quail mode, a string currently translated from quail-current-key.") | 72 "Within Quail mode, a string currently translated from quail-current-key.") |
463 (cons '(quail-mode (mc-flag ("[" quail-mode-string "]"))) | 464 (cons '(quail-mode (mc-flag ("[" quail-mode-string "]"))) |
464 mode-line-format))) | 465 mode-line-format))) |
465 (setq quail-mode t | 466 (setq quail-mode t |
466 quail-mode-string prompt) | 467 quail-mode-string prompt) |
467 (erase-buffer) | 468 (erase-buffer) |
468 (or (overlayp quail-overlay) | 469 (or (extentp quail-extent) |
469 (setq quail-overlay (make-overlay 1 1))) | 470 (setq quail-extent (make-extent 1 1))) |
470 (set-buffer curbuf)) | 471 (set-buffer curbuf)) |
471 (cond ((get-buffer-window quail-guidance-buf) | 472 (cond ((get-buffer-window quail-guidance-buf) |
472 ;; `buf' is already shown in some window. | 473 ;; `buf' is already shown in some window. |
473 ) | 474 ) |
474 ((null (eq (current-buffer) (window-buffer (minibuffer-window)))) | 475 ((null (eq (current-buffer) (window-buffer (minibuffer-window)))) |
502 (setq quail-mode-string (quail-prompt)) | 503 (setq quail-mode-string (quail-prompt)) |
503 (if (null (assq 'quail-mode mode-line-format)) | 504 (if (null (assq 'quail-mode mode-line-format)) |
504 (setq mode-line-format | 505 (setq mode-line-format |
505 (cons '(quail-mode (mc-flag ("[" quail-mode-string "]"))) | 506 (cons '(quail-mode (mc-flag ("[" quail-mode-string "]"))) |
506 mode-line-format))) | 507 mode-line-format))) |
507 (if (null (overlayp quail-overlay)) | 508 (if (null (extentp quail-extent)) |
508 (progn | 509 (progn |
509 (setq quail-overlay (make-overlay (point) (point))) | 510 (setq quail-extent (make-extent (point) (point))) |
510 (overlay-put quail-overlay 'face quail-region-face))) | 511 (set-extent-face quail-extent 'face quail-region-face))) |
511 (make-local-hook 'post-command-hook) | 512 (make-local-hook 'post-command-hook) |
512 (add-hook 'post-command-hook 'quail-reset-state nil t) | 513 (add-hook 'post-command-hook 'quail-reset-state nil t) |
513 (setq quail-keep-state nil) | 514 (setq quail-keep-state nil) |
514 (if (quail-sub-mode-map) | 515 (if (quail-sub-mode-map) |
515 (progn | 516 (progn |
534 (run-hooks 'quail-mode-hook)) | 535 (run-hooks 'quail-mode-hook)) |
535 | 536 |
536 (defun quail-exit-mode () | 537 (defun quail-exit-mode () |
537 (interactive) | 538 (interactive) |
538 (kill-local-variable 'post-command-hook) | 539 (kill-local-variable 'post-command-hook) |
539 (delete-overlay quail-overlay) | 540 (delete-extent quail-extent) |
540 (quail-delete-guidance-buf) | 541 (quail-delete-guidance-buf) |
541 (let ((modes (quail-extra-mode-list)) | 542 (let ((modes (quail-extra-mode-list)) |
542 (i 0)) | 543 (i 0)) |
543 (while modes | 544 (while modes |
544 (if (null (nth i quail-previous-extra-mode-list)) | 545 (if (null (nth i quail-previous-extra-mode-list)) |
560 (if quail-keep-state | 561 (if quail-keep-state |
561 (setq quail-keep-state nil) | 562 (setq quail-keep-state nil) |
562 (quail-init-state)))) | 563 (quail-init-state)))) |
563 | 564 |
564 (defun quail-init-state () | 565 (defun quail-init-state () |
565 (if (overlayp quail-overlay) | 566 (if (extentp quail-extent) |
566 (move-overlay quail-overlay (point) (point)) | 567 (set-extent-endpoints quail-extent (point) (point)) |
567 (setq quail-overlay (make-overlay (point) (point)))) | 568 (setq quail-extent (make-extent (point) (point)))) |
568 (setq quail-current-key nil | 569 (setq quail-current-key nil |
569 quail-current-str nil) | 570 quail-current-str nil) |
570 (if quail-sub-mode (quail-exit-sub-mode)) | 571 (if quail-sub-mode (quail-exit-sub-mode)) |
571 (quail-setup-guidance-buf)) | 572 (quail-setup-guidance-buf)) |
572 | 573 |
573 (defun quail-check-state () | 574 (defun quail-check-state () |
574 (if (and (overlay-buffer quail-overlay) | 575 (if (and (extent-object quail-extent) |
575 (= (point) (overlay-end quail-overlay))) | 576 (= (point) (extent-end-position quail-extent))) |
576 quail-current-key | 577 quail-current-key |
577 (quail-init-state) | 578 (quail-init-state) |
578 nil)) | 579 nil)) |
579 | 580 |
580 (defun quail-delete-region () | 581 (defun quail-delete-region () |
581 (delete-region (overlay-start quail-overlay) (overlay-end quail-overlay))) | 582 (delete-region (extent-start-position quail-extent) (extent-end-position quail-extent))) |
582 | 583 |
583 (defun quail-insert (str) | 584 (defun quail-insert (str) |
584 (quail-delete-region) | 585 (quail-delete-region) |
585 (if visual-mode | 586 (if visual-mode |
586 (if (stringp str) | 587 (if (stringp str) |
591 (visual-insert-1-char str)) | 592 (visual-insert-1-char str)) |
592 (insert str)) | 593 (insert str)) |
593 (if (and auto-fill-function (> (current-column) fill-column)) | 594 (if (and auto-fill-function (> (current-column) fill-column)) |
594 (run-hooks 'auto-fill-function)) | 595 (run-hooks 'auto-fill-function)) |
595 (let ((len (if (integerp str) (char-bytes str) (length str)))) | 596 (let ((len (if (integerp str) (char-bytes str) (length str)))) |
596 (move-overlay quail-overlay (- (point) len) (point))) | 597 (set-extent-endpoints quail-extent (- (point) len) (point))) |
597 (quail-show-guidance)) | 598 (quail-show-guidance)) |
598 | 599 |
599 (defun quail-get-candidates (def) | 600 (defun quail-get-candidates (def) |
600 (setq def (car (cdr def))) | 601 (setq def (car (cdr def))) |
601 (if (null (vectorp def)) | 602 (if (null (vectorp def)) |
657 (key quail-current-key)) | 658 (key quail-current-key)) |
658 (select-window (get-buffer-window quail-completion-buf)) | 659 (select-window (get-buffer-window quail-completion-buf)) |
659 (goto-char (point-min)) | 660 (goto-char (point-min)) |
660 (if (search-forward (concat " " key ":") nil t) | 661 (if (search-forward (concat " " key ":") nil t) |
661 (if (and str (search-forward (concat "." str) nil t)) | 662 (if (and str (search-forward (concat "." str) nil t)) |
662 (move-overlay quail-overlay (1+ (match-beginning 0)) (point)) | 663 (set-extent-endpoints quail-extent (1+ (match-beginning 0)) (point)) |
663 (move-overlay quail-overlay (match-beginning 0) (point))) | 664 (set-extent-endpoints quail-extent (match-beginning 0) (point))) |
664 (move-overlay quail-overlay 1 1)) | 665 (set-extent-endpoints quail-extent 1 1)) |
665 (select-window (get-buffer-window buf)) | 666 (select-window (get-buffer-window buf)) |
666 ))) | 667 ))) |
667 | 668 |
668 (defun quail-translate-char (ch) | 669 (defun quail-translate-char (ch) |
669 (let* ((str (car quail-keyboard-translate-table)) | 670 (let* ((str (car quail-keyboard-translate-table)) |
749 ) | 750 ) |
750 (if (and quail-current-key (null quail-sub-mode)) | 751 (if (and quail-current-key (null quail-sub-mode)) |
751 (quail-enter-sub-mode)) | 752 (quail-enter-sub-mode)) |
752 ) | 753 ) |
753 | 754 |
755 ;; wire us into pending-delete | |
756 (put 'quail-self-insert-command 'pending-delete t) | |
757 | |
754 (defun quail-next-candidate () | 758 (defun quail-next-candidate () |
755 "Select next candidate." | 759 "Select next candidate." |
756 (interactive) | 760 (interactive) |
757 (setq quail-keep-state t) | 761 (setq quail-keep-state t) |
758 (if (and (quail-check-state) quail-current-str) | 762 (if (and (quail-check-state) quail-current-str) |
860 (insert "]"))) | 864 (insert "]"))) |
861 (if (consp candidates) | 865 (if (consp candidates) |
862 (let ((idx (car candidates)) | 866 (let ((idx (car candidates)) |
863 (maxidx (1+ (/ (1- (length (cdr candidates))) 10))) | 867 (maxidx (1+ (/ (1- (length (cdr candidates))) 10))) |
864 (num 0) | 868 (num 0) |
865 p p1 p2 str) | 869 p p1 p2) |
866 (indent-to 10) | 870 (indent-to 10) |
867 (insert (format "(%d/%d)" (1+ (/ idx 10)) maxidx)) | 871 (insert (format "(%d/%d)" (1+ (/ idx 10)) maxidx)) |
868 (setq candidates (nthcdr (* (/ idx 10) 10) (cdr candidates))) | 872 (setq candidates (nthcdr (* (/ idx 10) 10) (cdr candidates))) |
869 (while (and candidates (< num 10)) | 873 (while (and candidates (< num 10)) |
870 (setq num (1+ num)) | 874 (setq num (1+ num)) |
906 (if (not (quail-buffer-alive-p quail-completion-buf)) | 910 (if (not (quail-buffer-alive-p quail-completion-buf)) |
907 (setq quail-completion-buf | 911 (setq quail-completion-buf |
908 (get-buffer-create "*Completions*"))) | 912 (get-buffer-create "*Completions*"))) |
909 (set-buffer quail-completion-buf) | 913 (set-buffer quail-completion-buf) |
910 (erase-buffer) | 914 (erase-buffer) |
911 (setq quail-overlay (make-overlay 1 1)) | 915 (setq quail-extent (make-extent 1 1)) |
912 (overlay-put quail-overlay 'face quail-selection-face) | 916 (set-extent-face quail-extent 'face quail-selection-face) |
913 (insert "Current candidates:\n") | 917 (insert "Current candidates:\n") |
914 (quail-completion-list key def 1) | 918 (quail-completion-list key def 1) |
915 (quail-display-buffer (current-buffer))) | 919 (quail-display-buffer (current-buffer))) |
916 (quail-show-guidance)))) | 920 (quail-show-guidance)))) |
917 | 921 |
935 (setq def (cdr def))))) | 939 (setq def (cdr def))))) |
936 | 940 |
937 (defun quail-candidate-with-indent (candidates key) | 941 (defun quail-candidate-with-indent (candidates key) |
938 (if (consp candidates) | 942 (if (consp candidates) |
939 (let ((clm (current-column)) | 943 (let ((clm (current-column)) |
940 (i 0) | 944 (i 0)) |
941 num) | |
942 (while candidates | 945 (while candidates |
943 (if (= (% i 10) 0) (insert (format "(%d)" (1+ (/ i 10))))) | 946 (if (= (% i 10) 0) (insert (format "(%d)" (1+ (/ i 10))))) |
944 (insert " " (if (= (% i 10) 9) "0" (+ ?1 (% i 10))) ".") | 947 (insert " " (if (= (% i 10) 9) "0" (+ ?1 (% i 10))) ".") |
945 (insert (if (stringp (car candidates)) | 948 (insert (if (stringp (car candidates)) |
946 (car candidates) | 949 (car candidates) |