comparison lisp/international/quail.el @ 40667:589781f0ee38

(quail-help): Use `help-buffer' and move `help-setup-xref' to beginning.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Sat, 03 Nov 2001 00:37:56 +0000
parents b73fe7fe3c9f
children 90c5fdb81e29
comparison
equal deleted inserted replaced
40666:84cd0f5441e2 40667:589781f0ee38
882 (setq keyboard-type quail-keyboard-layout-type)) 882 (setq keyboard-type quail-keyboard-layout-type))
883 (let ((layout (assoc keyboard-type quail-keyboard-layout-alist))) 883 (let ((layout (assoc keyboard-type quail-keyboard-layout-alist)))
884 (or layout 884 (or layout
885 (error "Unknown keyboard type: %s" keyboard-type)) 885 (error "Unknown keyboard type: %s" keyboard-type))
886 (with-output-to-temp-buffer "*Help*" 886 (with-output-to-temp-buffer "*Help*"
887 (save-excursion 887 (with-current-buffer standard-output
888 (set-buffer standard-output)
889 (insert "Keyboard layout (keyboard type: " 888 (insert "Keyboard layout (keyboard type: "
890 keyboard-type 889 keyboard-type
891 ")\n") 890 ")\n")
892 (quail-insert-kbd-layout (cdr layout)))))) 891 (quail-insert-kbd-layout (cdr layout))))))
893 892
1297 (if input-method-exit-on-first-char 1296 (if input-method-exit-on-first-char
1298 (list (aref input-string 0)) 1297 (list (aref input-string 0))
1299 (quail-input-string-to-events input-string)))) 1298 (quail-input-string-to-events input-string))))
1300 (quail-delete-overlays) 1299 (quail-delete-overlays)
1301 (if (buffer-live-p quail-guidance-buf) 1300 (if (buffer-live-p quail-guidance-buf)
1302 (save-excursion 1301 (with-current-buffer quail-guidance-buf
1303 (set-buffer quail-guidance-buf)
1304 (erase-buffer))) 1302 (erase-buffer)))
1305 (quail-hide-guidance-buf) 1303 (quail-hide-guidance-buf)
1306 (set-buffer-modified-p modified-p) 1304 (set-buffer-modified-p modified-p)
1307 ;; Run this hook only when the current input method doesn't require 1305 ;; Run this hook only when the current input method doesn't require
1308 ;; conversion. When conversion is required, the conversion function 1306 ;; conversion. When conversion is required, the conversion function
1458 1456
1459 (defun quail-terminate-translation () 1457 (defun quail-terminate-translation ()
1460 "Terminate the translation of the current key." 1458 "Terminate the translation of the current key."
1461 (setq quail-translating nil) 1459 (setq quail-translating nil)
1462 (if (buffer-live-p quail-guidance-buf) 1460 (if (buffer-live-p quail-guidance-buf)
1463 (save-excursion 1461 (with-current-buffer quail-guidance-buf
1464 (set-buffer quail-guidance-buf)
1465 (erase-buffer)))) 1462 (erase-buffer))))
1466 1463
1467 (defun quail-select-current () 1464 (defun quail-select-current ()
1468 "Accept the currently selected translation." 1465 "Accept the currently selected translation."
1469 (interactive) 1466 (interactive)
1852 (defun quail-setup-completion-buf () 1849 (defun quail-setup-completion-buf ()
1853 "Setup Quail completion buffer." 1850 "Setup Quail completion buffer."
1854 (unless (buffer-live-p quail-completion-buf) 1851 (unless (buffer-live-p quail-completion-buf)
1855 (let ((default-enable-multibyte-characters enable-multibyte-characters)) 1852 (let ((default-enable-multibyte-characters enable-multibyte-characters))
1856 (setq quail-completion-buf (get-buffer-create "*Quail Completions*"))) 1853 (setq quail-completion-buf (get-buffer-create "*Quail Completions*")))
1857 (save-excursion 1854 (with-current-buffer quail-completion-buf
1858 (set-buffer quail-completion-buf)
1859 (setq quail-overlay (make-overlay 1 1)) 1855 (setq quail-overlay (make-overlay 1 1))
1860 (overlay-put quail-overlay 'face 'highlight)))) 1856 (overlay-put quail-overlay 'face 'highlight))))
1861 1857
1862 (defun quail-require-guidance-buf () 1858 (defun quail-require-guidance-buf ()
1863 "Return t iff the current Quail package requires showing guidance buffer." 1859 "Return t iff the current Quail package requires showing guidance buffer."
1881 (let ((default-enable-multibyte-characters enable-multibyte-characters)) 1877 (let ((default-enable-multibyte-characters enable-multibyte-characters))
1882 (or (buffer-live-p quail-guidance-buf) 1878 (or (buffer-live-p quail-guidance-buf)
1883 (setq quail-guidance-buf (generate-new-buffer " *Quail-guidance*")))) 1879 (setq quail-guidance-buf (generate-new-buffer " *Quail-guidance*"))))
1884 (let ((name (quail-name)) 1880 (let ((name (quail-name))
1885 (title (quail-title))) 1881 (title (quail-title)))
1886 (save-excursion 1882 (with-current-buffer quail-guidance-buf
1887 (set-buffer quail-guidance-buf)
1888 ;; To show the title of Quail package. 1883 ;; To show the title of Quail package.
1889 (setq current-input-method name 1884 (setq current-input-method name
1890 current-input-method-title title) 1885 current-input-method-title title)
1891 (erase-buffer) 1886 (erase-buffer)
1892 (or (overlayp quail-overlay) 1887 (or (overlayp quail-overlay)
1924 (when (>= height 4) 1919 (when (>= height 4)
1925 ;; Here, `split-window' returns a lower window 1920 ;; Here, `split-window' returns a lower window
1926 ;; which is what we wanted. 1921 ;; which is what we wanted.
1927 (setq win (split-window win (- height 2)))) 1922 (setq win (split-window win (- height 2))))
1928 (set-window-buffer win quail-guidance-buf) 1923 (set-window-buffer win quail-guidance-buf)
1929 (save-excursion 1924 (with-current-buffer quail-guidance-buf
1930 (set-buffer quail-guidance-buf)
1931 (fit-window-to-buffer win nil (window-height win))))) 1925 (fit-window-to-buffer win nil (window-height win)))))
1932 (set-window-buffer win quail-guidance-buf) 1926 (set-window-buffer win quail-guidance-buf)
1933 (set-minibuffer-window win)) 1927 (set-minibuffer-window win))
1934 (setq quail-guidance-win win))) 1928 (setq quail-guidance-win win)))
1935 1929
1974 ((null guidance) 1968 ((null guidance)
1975 ;; Show the current input keys. 1969 ;; Show the current input keys.
1976 (let ((key quail-current-key)) 1970 (let ((key quail-current-key))
1977 (if (quail-kbd-translate) 1971 (if (quail-kbd-translate)
1978 (setq key (quail-keyseq-translate key))) 1972 (setq key (quail-keyseq-translate key)))
1979 (save-excursion 1973 (with-current-buffer quail-guidance-buf
1980 (set-buffer quail-guidance-buf)
1981 (erase-buffer) 1974 (erase-buffer)
1982 (insert key))))) 1975 (insert key)))))
1983 ;; Make sure the height of the guidance window is OK -- 1976 ;; Make sure the height of the guidance window is OK --
1984 ;; sometimes, if the minibuffer window expands due to user 1977 ;; sometimes, if the minibuffer window expands due to user
1985 ;; input (for instance if the newly inserted character is in a 1978 ;; input (for instance if the newly inserted character is in a
2028 (let* ((key quail-current-key) 2021 (let* ((key quail-current-key)
2029 (map (quail-lookup-key quail-current-key)) 2022 (map (quail-lookup-key quail-current-key))
2030 (current-translations quail-current-translations)) 2023 (current-translations quail-current-translations))
2031 (if quail-current-translations 2024 (if quail-current-translations
2032 (quail-update-current-translations)) 2025 (quail-update-current-translations))
2033 (save-excursion 2026 (with-current-buffer quail-guidance-buf
2034 (set-buffer quail-guidance-buf)
2035 (erase-buffer) 2027 (erase-buffer)
2036 2028
2037 ;; Show the current key. 2029 ;; Show the current key.
2038 (let ((guidance (quail-guidance))) 2030 (let ((guidance (quail-guidance)))
2039 (if (listp guidance) 2031 (if (listp guidance)
2093 (quail-setup-completion-buf) 2085 (quail-setup-completion-buf)
2094 (let ((win (get-buffer-window quail-completion-buf 'visible)) 2086 (let ((win (get-buffer-window quail-completion-buf 'visible))
2095 (key quail-current-key) 2087 (key quail-current-key)
2096 (map (quail-lookup-key quail-current-key)) 2088 (map (quail-lookup-key quail-current-key))
2097 (require-update nil)) 2089 (require-update nil))
2098 (save-excursion 2090 (with-current-buffer quail-completion-buf
2099 (set-buffer quail-completion-buf)
2100 (if (and win 2091 (if (and win
2101 (equal key quail-current-key) 2092 (equal key quail-current-key)
2102 (eq last-command 'quail-completion)) 2093 (eq last-command 'quail-completion))
2103 ;; The window for Quail completion buffer has already been 2094 ;; The window for Quail completion buffer has already been
2104 ;; shown. We just scroll it appropriately. 2095 ;; shown. We just scroll it appropriately.
2193 ;; Give temporary modes such as isearch a chance to turn off. 2184 ;; Give temporary modes such as isearch a chance to turn off.
2194 (run-hooks 'mouse-leave-buffer-hook) 2185 (run-hooks 'mouse-leave-buffer-hook)
2195 (let ((buffer (window-buffer)) 2186 (let ((buffer (window-buffer))
2196 choice 2187 choice
2197 base-size) 2188 base-size)
2198 (save-excursion 2189 (with-current-buffer (window-buffer (posn-window (event-start event)))
2199 (set-buffer (window-buffer (posn-window (event-start event))))
2200 (if completion-reference-buffer 2190 (if completion-reference-buffer
2201 (setq buffer completion-reference-buffer)) 2191 (setq buffer completion-reference-buffer))
2202 (setq base-size completion-base-size) 2192 (setq base-size completion-base-size)
2203 (save-excursion 2193 (save-excursion
2204 (goto-char (posn-point (event-start event))) 2194 (goto-char (posn-point (event-start event)))
2405 (insert ?\n)) 2395 (insert ?\n))
2406 (insert ?\n)))) 2396 (insert ?\n))))
2407 2397
2408 (defun quail-help (&optional package) 2398 (defun quail-help (&optional package)
2409 "Show brief description of the current Quail package. 2399 "Show brief description of the current Quail package.
2410 Optional 2nd arg PACKAGE specifies the name of alternative Quail 2400 Optional arg PACKAGE specifies the name of alternative Quail
2411 package to describe." 2401 package to describe."
2412 (interactive) 2402 (interactive)
2413 (if package 2403 (if package
2414 (setq package (assoc package quail-package-alist)) 2404 (setq package (assoc package quail-package-alist))
2415 (setq package quail-current-package)) 2405 (setq package quail-current-package))
2416 (let ((help-xref-mule-regexp help-xref-mule-regexp-template) 2406 (let ((help-xref-mule-regexp help-xref-mule-regexp-template)
2417 (default-enable-multibyte-characters enable-multibyte-characters)) 2407 (default-enable-multibyte-characters enable-multibyte-characters))
2418 ;; At first, make sure that the help buffer has window. 2408 ;; At first, make sure that the help buffer has window.
2419 (with-output-to-temp-buffer "*Help*" 2409 (help-setup-xref (list #'quail-help package) (interactive-p))
2420 (save-excursion 2410 (with-output-to-temp-buffer (help-buffer)
2421 (set-buffer standard-output) 2411 (with-current-buffer standard-output
2422 (setq quail-current-package package))) 2412 (setq quail-current-package package)))
2423 ;; Then, insert text in the help buffer while paying attention to 2413 ;; Then, insert text in the help buffer while paying attention to
2424 ;; the width of the frame in which the buffer displayed. 2414 ;; the width of the frame in which the buffer displayed.
2425 (save-excursion 2415 (with-current-buffer (help-buffer)
2426 (set-buffer (get-buffer "*Help*"))
2427 (setq buffer-read-only nil) 2416 (setq buffer-read-only nil)
2428 (insert "Input method: " (quail-name) 2417 (insert "Input method: " (quail-name)
2429 " (mode line indicator:" 2418 " (mode line indicator:"
2430 (quail-title) 2419 (quail-title)
2431 ")\n\n") 2420 ")\n\n")
2509 (quail-help-insert-keymap-description 2498 (quail-help-insert-keymap-description
2510 (quail-conversion-keymap) 2499 (quail-conversion-keymap)
2511 "\ 2500 "\
2512 KEY BINDINGS FOR CONVERSION 2501 KEY BINDINGS FOR CONVERSION
2513 ---------------------------\n")) 2502 ---------------------------\n"))
2514 (help-setup-xref (list #'quail-help (quail-name))
2515 (interactive-p))
2516 (setq quail-current-package nil) 2503 (setq quail-current-package nil)
2517 ;; Resize the help window again, now that it has all its contents. 2504 ;; Resize the help window again, now that it has all its contents.
2518 (save-selected-window 2505 (save-selected-window
2519 (select-window (get-buffer-window (current-buffer))) 2506 (select-window (get-buffer-window (current-buffer)))
2520 (run-hooks 'temp-buffer-show-hook))))) 2507 (run-hooks 'temp-buffer-show-hook)))))
2562 (setq state-msg 2549 (setq state-msg
2563 (format "Translating key sequence %S by input method %S.\n" 2550 (format "Translating key sequence %S by input method %S.\n"
2564 quail-current-key (quail-name)) 2551 quail-current-key (quail-name))
2565 keymap (quail-translation-keymap))) 2552 keymap (quail-translation-keymap)))
2566 (with-output-to-temp-buffer "*Help*" 2553 (with-output-to-temp-buffer "*Help*"
2567 (save-excursion 2554 (with-current-buffer standard-output
2568 (set-buffer standard-output)
2569 (insert state-msg) 2555 (insert state-msg)
2570 (quail-help-insert-keymap-description 2556 (quail-help-insert-keymap-description
2571 keymap 2557 keymap
2572 "-----------------------\n") 2558 "-----------------------\n")
2559 ;; Isn't this redundant ? -stef
2573 (help-mode))))) 2560 (help-mode)))))
2574 (let (scroll-help) 2561 (let (scroll-help)
2575 (save-selected-window 2562 (save-selected-window
2576 (select-window (get-buffer-window "*Help*")) 2563 (select-window (get-buffer-window "*Help*"))
2577 (if (eq this-command last-command) 2564 (if (eq this-command last-command)
2734 (error "Can't write to file \"%s\"" leim-list)) 2721 (error "Can't write to file \"%s\"" leim-list))
2735 (message "Updating %s ..." leim-list) 2722 (message "Updating %s ..." leim-list)
2736 (setq list-buf (find-file-noselect leim-list)) 2723 (setq list-buf (find-file-noselect leim-list))
2737 2724
2738 ;; At first, clean up the file. 2725 ;; At first, clean up the file.
2739 (save-excursion 2726 (with-current-buffer list-buf
2740 (set-buffer list-buf)
2741 (goto-char 1) 2727 (goto-char 1)
2742 2728
2743 ;; Insert the correct header. 2729 ;; Insert the correct header.
2744 (if (looking-at (regexp-quote leim-list-header)) 2730 (if (looking-at (regexp-quote leim-list-header))
2745 (goto-char (match-end 0)) 2731 (goto-char (match-end 0))
2794 (goto-char (point-min)) 2780 (goto-char (point-min))
2795 (while (search-forward "(quail-define-package" nil t) 2781 (while (search-forward "(quail-define-package" nil t)
2796 (goto-char (match-beginning 0)) 2782 (goto-char (match-beginning 0))
2797 (condition-case nil 2783 (condition-case nil
2798 (let ((form (read (current-buffer)))) 2784 (let ((form (read (current-buffer))))
2799 (save-excursion 2785 (with-current-buffer list-buf
2800 (set-buffer list-buf)
2801 (insert 2786 (insert
2802 (format "(register-input-method 2787 (format "(register-input-method
2803 %S %S '%s 2788 %S %S '%s
2804 %S %S 2789 %S %S
2805 %S)\n" 2790 %S)\n"
2819 (message "Some part of \"%s\" is broken" dirname))))) 2804 (message "Some part of \"%s\" is broken" dirname)))))
2820 (setq pkg-list (cdr pkg-list))) 2805 (setq pkg-list (cdr pkg-list)))
2821 (setq quail-dirs (cdr quail-dirs) dirnames (cdr dirnames)))) 2806 (setq quail-dirs (cdr quail-dirs) dirnames (cdr dirnames))))
2822 2807
2823 ;; At last, write out LEIM list file. 2808 ;; At last, write out LEIM list file.
2824 (save-excursion 2809 (with-current-buffer list-buf
2825 (set-buffer list-buf)
2826 (setq buffer-file-coding-system 'iso-2022-7bit) 2810 (setq buffer-file-coding-system 'iso-2022-7bit)
2827 (save-buffer 0)) 2811 (save-buffer 0))
2828 (kill-buffer list-buf) 2812 (kill-buffer list-buf)
2829 (message "Updating %s ... done" leim-list))) 2813 (message "Updating %s ... done" leim-list)))
2830 2814