Mercurial > emacs
annotate lisp/international/quail.el @ 32171:17250fb13b0c
*** empty log message ***
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Thu, 05 Oct 2000 15:56:23 +0000 |
parents | 75b162c6dc9e |
children | a384f310fd27 |
rev | line source |
---|---|
17315
a3ca5e15c82a
Fix the format of the first line.
Kenichi Handa <handa@m17n.org>
parents:
17174
diff
changeset
|
1 ;;; quail.el --- Provides simple input method for multilingual text |
17052 | 2 |
3 ;; Copyright (C) 1995 Electrotechnical Laboratory, JAPAN. | |
18377
8b4a66c66dd6
Change copyright notice.
Richard M. Stallman <rms@gnu.org>
parents:
18349
diff
changeset
|
4 ;; Licensed to the Free Software Foundation. |
17052 | 5 |
6 ;; Author: Kenichi HANDA <handa@etl.go.jp> | |
7 ;; Naoto TAKAHASHI <ntakahas@etl.go.jp> | |
8 ;; Maintainer: Kenichi HANDA <handa@etl.go.jp> | |
9 ;; Keywords: mule, multilingual, input method | |
10 | |
11 ;; This file is part of GNU Emacs. | |
12 | |
13 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
14 ;; it under the terms of the GNU General Public License as published by | |
15 ;; the Free Software Foundation; either version 2, or (at your option) | |
16 ;; any later version. | |
17 | |
18 ;; GNU Emacs is distributed in the hope that it will be useful, | |
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
21 ;; GNU General Public License for more details. | |
22 | |
23 ;; You should have received a copy of the GNU General Public License | |
17071 | 24 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
25 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
26 ;; Boston, MA 02111-1307, USA. | |
17052 | 27 |
28 ;;; Commentary: | |
29 | |
30 ;; In Quail minor mode, you can input multilingual text easily. By | |
31 ;; defining a translation table (named Quail map) which maps ASCII key | |
32 ;; string to multilingual character or string, you can input any text | |
33 ;; from ASCII keyboard. | |
34 ;; | |
35 ;; We use words "translation" and "conversion" differently. The | |
36 ;; former is done by Quail package itself, the latter is the further | |
37 ;; process of converting a translated text to some more desirable | |
38 ;; text. For instance, Quail package for Japanese (`quail-jp') | |
39 ;; translates Roman text (transliteration of Japanese in Latin | |
40 ;; alphabets) to Hiragana text, which is then converted to | |
41 ;; Kanji-and-Kana mixed text or Katakana text by commands specified in | |
42 ;; CONVERSION-KEYS argument of the Quail package. | |
43 | |
44 ;;; Code: | |
45 | |
31424 | 46 (defgroup quail nil |
47 "Quail: multilingual input method." | |
48 :group 'leim) | |
17052 | 49 |
50 ;; Buffer local variables | |
51 | |
52 (defvar quail-current-package nil | |
19391
763bc03e7797
(quail-guidance-buf): Now a permanent local.
Richard M. Stallman <rms@gnu.org>
parents:
19327
diff
changeset
|
53 "The current Quail package, which depends on the current input method. |
17052 | 54 See the documentation of `quail-package-alist' for the format.") |
55 (make-variable-buffer-local 'quail-current-package) | |
56 (put 'quail-current-package 'permanent-local t) | |
57 | |
58 ;; Quail uses the following two buffers to assist users. | |
59 ;; A buffer to show available key sequence or translation list. | |
60 (defvar quail-guidance-buf nil) | |
61 ;; A buffer to show completion list of the current key sequence. | |
62 (defvar quail-completion-buf nil) | |
63 | |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
64 ;; Each buffer in which Quail is activated should use different |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
65 ;; guidance buffers. |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
66 (make-variable-buffer-local 'quail-guidance-buf) |
19391
763bc03e7797
(quail-guidance-buf): Now a permanent local.
Richard M. Stallman <rms@gnu.org>
parents:
19327
diff
changeset
|
67 (put 'quail-guidance-buf 'permanent-local t) |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
68 |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
69 ;; A main window showing Quail guidance buffer. |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
70 (defvar quail-guidance-win nil) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
71 (make-variable-buffer-local 'quail-guidance-win) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
72 |
17052 | 73 (defvar quail-overlay nil |
74 "Overlay which covers the current translation region of Quail.") | |
75 (make-variable-buffer-local 'quail-overlay) | |
76 | |
77 (defvar quail-conv-overlay nil | |
78 "Overlay which covers the text to be converted in Quail mode.") | |
79 (make-variable-buffer-local 'quail-conv-overlay) | |
80 | |
81 (defvar quail-current-key nil | |
82 "Current key for translation in Quail mode.") | |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
83 (make-variable-buffer-local 'quail-current-key) |
17052 | 84 |
85 (defvar quail-current-str nil | |
86 "Currently selected translation of the current key.") | |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
87 (make-variable-buffer-local 'quail-current-str) |
17052 | 88 |
89 (defvar quail-current-translations nil | |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
90 "Cons of indices and vector of possible translations of the current key. |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
91 Indices is a list of (CURRENT START END BLOCK BLOCKS), where |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
92 CURRENT is an index of the current translation, |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
93 START and END are indices of the start and end of the current block, |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
94 BLOCK is the current block index, |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
95 BLOCKS is a number of blocks of translation.") |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
96 (make-variable-buffer-local 'quail-current-translations) |
17052 | 97 |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
98 (defvar quail-current-data nil |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
99 "Any Lisp object holding information of current translation status. |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
100 When a key sequence is mapped to TRANS and TRANS is a cons |
23176 | 101 of actual translation and some Lisp object to be referred |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
102 for translating the longer key sequence, this variable is set |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
103 to that Lisp object.") |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
104 (make-variable-buffer-local 'quail-current-data) |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
105 |
17052 | 106 ;; Quail package handlers. |
107 | |
108 (defvar quail-package-alist nil | |
109 "List of Quail packages. | |
110 A Quail package is a list of these elements: | |
111 NAME, TITLE, QUAIL-MAP, GUIDANCE, DOCSTRING, TRANSLATION-KEYS, | |
112 FORGET-LAST-SELECTION, DETERMINISTIC, KBD-TRANSLATE, SHOW-LAYOUT, | |
113 DECODE-MAP, MAXIMUM-SHORTEST, OVERLAY-PLIST, UPDATE-TRANSLATION-FUNCTION, | |
19849
1c5164d81426
(quail-simple): New function.
Kenichi Handa <handa@m17n.org>
parents:
19844
diff
changeset
|
114 CONVERSION-KEYS, SIMPLE. |
17052 | 115 |
116 QUAIL-MAP is a data structure to map key strings to translations. For | |
117 the format, see the documentation of `quail-map-p'. | |
118 | |
119 DECODE-MAP is an alist of translations and corresponding keys. | |
120 | |
121 See the documentation of `quail-define-package' for the other elements.") | |
122 | |
123 ;; Return various slots in the current quail-package. | |
124 | |
125 (defsubst quail-name () | |
126 "Return the name of the current Quail package." | |
127 (nth 0 quail-current-package)) | |
128 (defsubst quail-title () | |
129 "Return the title of the current Quail package." | |
130 (nth 1 quail-current-package)) | |
131 (defsubst quail-map () | |
132 "Return the translation map of the current Quail package." | |
133 (nth 2 quail-current-package)) | |
134 (defsubst quail-guidance () | |
135 "Return an object used for `guidance' feature of the current Quail package. | |
136 See also the documentation of `quail-define-package'." | |
137 (nth 3 quail-current-package)) | |
138 (defsubst quail-docstring () | |
139 "Return the documentation string of the current Quail package." | |
140 (nth 4 quail-current-package)) | |
141 (defsubst quail-translation-keymap () | |
142 "Return translation keymap in the current Quail package. | |
143 Translation keymap is a keymap used while translation region is active." | |
144 (nth 5 quail-current-package)) | |
145 (defsubst quail-forget-last-selection () | |
146 "Return `forget-last-selection' flag of the current Quail package. | |
147 See also the documentation of `quail-define-package'." | |
148 (nth 6 quail-current-package)) | |
149 (defsubst quail-deterministic () | |
150 "Return `deterministic' flag of the current Quail package. | |
151 See also the documentation of `quail-define-package'." | |
152 (nth 7 quail-current-package)) | |
153 (defsubst quail-kbd-translate () | |
154 "Return `kbd-translate' flag of the current Quail package. | |
155 See also the documentation of `quail-define-package'." | |
156 (nth 8 quail-current-package)) | |
157 (defsubst quail-show-layout () | |
158 "Return `show-layout' flag of the current Quail package. | |
159 See also the documentation of `quail-define-package'." | |
160 (nth 9 quail-current-package)) | |
161 (defsubst quail-decode-map () | |
162 "Return decode map of the current Quail package. | |
163 It is an alist of translations and corresponding keys." | |
164 (nth 10 quail-current-package)) | |
165 (defsubst quail-maximum-shortest () | |
166 "Return `maximum-shortest' flag of the current Quail package. | |
167 See also the documentation of `quail-define-package'." | |
168 (nth 11 quail-current-package)) | |
169 (defsubst quail-overlay-plist () | |
170 "Return property list of an overly used in the current Quail package." | |
171 (nth 12 quail-current-package)) | |
172 (defsubst quail-update-translation-function () | |
173 "Return a function for updating translation in the current Quail package." | |
174 (nth 13 quail-current-package)) | |
175 (defsubst quail-conversion-keymap () | |
176 "Return conversion keymap in the current Quail package. | |
177 Conversion keymap is a keymap used while conversion region is active | |
178 but translation region is not active." | |
179 (nth 14 quail-current-package)) | |
19849
1c5164d81426
(quail-simple): New function.
Kenichi Handa <handa@m17n.org>
parents:
19844
diff
changeset
|
180 (defsubst quail-simple () |
1c5164d81426
(quail-simple): New function.
Kenichi Handa <handa@m17n.org>
parents:
19844
diff
changeset
|
181 "Return t if the current Quail package is simple." |
1c5164d81426
(quail-simple): New function.
Kenichi Handa <handa@m17n.org>
parents:
19844
diff
changeset
|
182 (nth 15 quail-current-package)) |
17052 | 183 |
184 (defsubst quail-package (name) | |
185 "Return Quail package named NAME." | |
186 (assoc name quail-package-alist)) | |
187 | |
188 (defun quail-add-package (package) | |
189 "Add Quail package PACKAGE to `quail-package-alist'." | |
190 (let ((pac (quail-package (car package)))) | |
191 (if pac | |
192 (setcdr pac (cdr package)) | |
193 (setq quail-package-alist (cons package quail-package-alist))))) | |
194 | |
195 (defun quail-select-package (name) | |
196 "Select Quail package named NAME as the current Quail package." | |
197 (let ((package (quail-package name))) | |
198 (if (null package) | |
199 (error "No Quail package `%s'" name)) | |
200 (setq quail-current-package package) | |
201 (setq-default quail-current-package package) | |
202 name)) | |
203 | |
204 ;;;###autoload | |
205 (defun quail-use-package (package-name &rest libraries) | |
206 "Start using Quail package PACKAGE-NAME. | |
207 The remaining arguments are libraries to be loaded before using the package." | |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
208 (let ((package (quail-package package-name))) |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
209 (if (null package) |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
210 ;; Perhaps we have not yet loaded necessary libraries. |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
211 (while libraries |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
212 (if (not (load (car libraries) t)) |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
213 (progn |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
214 (with-output-to-temp-buffer "*Help*" |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
215 (princ "Quail package \"") |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
216 (princ package-name) |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
217 (princ "\" can't be activated\n because library \"") |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
218 (princ (car libraries)) |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
219 (princ "\" is not in `load-path'. |
17052 | 220 |
221 The most common case is that you have not yet installed appropriate | |
222 libraries in LEIM (Libraries of Emacs Input Method) which is | |
223 distributed separately from Emacs. | |
224 | |
225 LEIM is available from the same ftp directory as Emacs.")) | |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
226 (error "Can't use the Quail package `%s'" package-name)) |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
227 (setq libraries (cdr libraries)))))) |
17052 | 228 (quail-select-package package-name) |
229 (setq current-input-method-title (quail-title)) | |
31217
8e8fa4dbc0bc
(quail-use-package): Hide "... loaded" message.
Kenichi Handa <handa@m17n.org>
parents:
30656
diff
changeset
|
230 (quail-activate) |
8e8fa4dbc0bc
(quail-use-package): Hide "... loaded" message.
Kenichi Handa <handa@m17n.org>
parents:
30656
diff
changeset
|
231 ;; Hide all '... loaded' message. |
8e8fa4dbc0bc
(quail-use-package): Hide "... loaded" message.
Kenichi Handa <handa@m17n.org>
parents:
30656
diff
changeset
|
232 (message nil)) |
17052 | 233 |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
234 (defvar quail-translation-keymap |
17052 | 235 (let ((map (make-keymap)) |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
236 (i 0)) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
237 (while (< i ?\ ) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
238 (define-key map (char-to-string i) 'quail-other-command) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
239 (setq i (1+ i))) |
17052 | 240 (while (< i 127) |
241 (define-key map (char-to-string i) 'quail-self-insert-command) | |
242 (setq i (1+ i))) | |
19647
9b9af28bee8d
(quail-translation-keymap): Do not bind
Kenichi Handa <handa@m17n.org>
parents:
19619
diff
changeset
|
243 (setq i 128) |
19655
47d11f4bbc6c
(quail-translation-keymap): Fix previous
Kenichi Handa <handa@m17n.org>
parents:
19647
diff
changeset
|
244 (while (< i 256) |
19647
9b9af28bee8d
(quail-translation-keymap): Do not bind
Kenichi Handa <handa@m17n.org>
parents:
19619
diff
changeset
|
245 (define-key map (vector i) 'quail-self-insert-command) |
9b9af28bee8d
(quail-translation-keymap): Do not bind
Kenichi Handa <handa@m17n.org>
parents:
19619
diff
changeset
|
246 (setq i (1+ i))) |
17052 | 247 (define-key map "\177" 'quail-delete-last-char) |
248 (define-key map "\C-f" 'quail-next-translation) | |
249 (define-key map "\C-b" 'quail-prev-translation) | |
250 (define-key map "\C-n" 'quail-next-translation-block) | |
251 (define-key map "\C-p" 'quail-prev-translation-block) | |
19987
470e157b3e8a
(quail-translation-keymap): Bind right, left, down, and up keys.
Kenichi Handa <handa@m17n.org>
parents:
19951
diff
changeset
|
252 (define-key map [right] 'quail-next-translation) |
470e157b3e8a
(quail-translation-keymap): Bind right, left, down, and up keys.
Kenichi Handa <handa@m17n.org>
parents:
19951
diff
changeset
|
253 (define-key map [left] 'quail-prev-translation) |
470e157b3e8a
(quail-translation-keymap): Bind right, left, down, and up keys.
Kenichi Handa <handa@m17n.org>
parents:
19951
diff
changeset
|
254 (define-key map [down] 'quail-next-translation-block) |
470e157b3e8a
(quail-translation-keymap): Bind right, left, down, and up keys.
Kenichi Handa <handa@m17n.org>
parents:
19951
diff
changeset
|
255 (define-key map [up] 'quail-prev-translation-block) |
17052 | 256 (define-key map "\C-i" 'quail-completion) |
257 (define-key map "\C-@" 'quail-select-current) | |
20169
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
258 ;; Following simple.el, Enter key on numeric keypad selects the |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
259 ;; current translation just like `C-SPC', and `mouse-2' chooses |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
260 ;; any completion visible in the *Quail Completions* buffer. |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
261 (define-key map [kp-enter] 'quail-select-current) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
262 (define-key map [mouse-2] 'quail-mouse-choose-completion) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
263 (define-key map [down-mouse-2] nil) |
17052 | 264 (define-key map "\C-h" 'quail-translation-help) |
20638
c3360a392ae4
Change "?\C-\ " to "?\C- " because "\ " is changed
Kenichi Handa <handa@m17n.org>
parents:
20294
diff
changeset
|
265 (define-key map [?\C- ] 'quail-select-current) |
17052 | 266 (define-key map [tab] 'quail-completion) |
267 (define-key map [delete] 'quail-delete-last-char) | |
268 (define-key map [backspace] 'quail-delete-last-char) | |
19878
a69ae37e6932
(quail-update-translation): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
19849
diff
changeset
|
269 map) |
19619
b033d0b34c71
(quail-define-package): New arg SIMPLE.
Richard M. Stallman <rms@gnu.org>
parents:
19605
diff
changeset
|
270 "Keymap used processing translation in complex Quail modes. |
b033d0b34c71
(quail-define-package): New arg SIMPLE.
Richard M. Stallman <rms@gnu.org>
parents:
19605
diff
changeset
|
271 Only a few especially complex input methods use this map; |
b033d0b34c71
(quail-define-package): New arg SIMPLE.
Richard M. Stallman <rms@gnu.org>
parents:
19605
diff
changeset
|
272 most use `quail-simple-translation-keymap' instead. |
b033d0b34c71
(quail-define-package): New arg SIMPLE.
Richard M. Stallman <rms@gnu.org>
parents:
19605
diff
changeset
|
273 This map is activated while translation region is active.") |
b033d0b34c71
(quail-define-package): New arg SIMPLE.
Richard M. Stallman <rms@gnu.org>
parents:
19605
diff
changeset
|
274 |
31546
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
275 (defvar quail-translation-docstring |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
276 "When you type keys, the echo area shows the possible characters |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
277 which correspond to that key sequence, each preceded by a digit. You |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
278 can select one of the characters shown by typing the corresponding |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
279 digit. Alternatively, you can use C-f and C-b to move through the |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
280 line to select the character you want, then type a letter to begin |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
281 entering another Chinese character or type a space or punctuation |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
282 character. |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
283 |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
284 If there are more than ten possible characters for the given spelling, |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
285 the echo area shows ten characters at a time; you can use C-n to move |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
286 to the next group of ten, and C-p to move back to the previous group |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
287 of ten.") |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
288 |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
289 ;; Categorize each Quail commands to make the output of quail-help |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
290 ;; concise. This is done by putting `quail-help' property. The value |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
291 ;; is: |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
292 ;; hide -- never show this command |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
293 ;; non-deterministic -- show only for non-deterministic input method |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
294 (let ((l '((quail-other-command . hide) |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
295 (quail-self-insert-command . hide) |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
296 (quail-delete-last-char . hide) |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
297 (quail-next-translation . non-deterministic) |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
298 (quail-prev-translation . non-deterministic) |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
299 (quail-next-translation-block . non-deterministic) |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
300 (quail-prev-translation-block . non-deterministic)))) |
31424 | 301 (while l |
31546
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
302 (put (car (car l)) 'quail-help (cdr (car l))) |
31424 | 303 (setq l (cdr l)))) |
304 | |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
305 (defvar quail-simple-translation-keymap |
19619
b033d0b34c71
(quail-define-package): New arg SIMPLE.
Richard M. Stallman <rms@gnu.org>
parents:
19605
diff
changeset
|
306 (let ((map (make-keymap)) |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
307 (i 0)) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
308 (while (< i ?\ ) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
309 (define-key map (char-to-string i) 'quail-other-command) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
310 (setq i (1+ i))) |
19619
b033d0b34c71
(quail-define-package): New arg SIMPLE.
Richard M. Stallman <rms@gnu.org>
parents:
19605
diff
changeset
|
311 (while (< i 127) |
b033d0b34c71
(quail-define-package): New arg SIMPLE.
Richard M. Stallman <rms@gnu.org>
parents:
19605
diff
changeset
|
312 (define-key map (char-to-string i) 'quail-self-insert-command) |
b033d0b34c71
(quail-define-package): New arg SIMPLE.
Richard M. Stallman <rms@gnu.org>
parents:
19605
diff
changeset
|
313 (setq i (1+ i))) |
29073
b46c4dc8c51a
(quail-simple-translation-keymap): Map
Kenichi Handa <handa@m17n.org>
parents:
28213
diff
changeset
|
314 (setq i 128) |
b46c4dc8c51a
(quail-simple-translation-keymap): Map
Kenichi Handa <handa@m17n.org>
parents:
28213
diff
changeset
|
315 (while (< i 256) |
b46c4dc8c51a
(quail-simple-translation-keymap): Map
Kenichi Handa <handa@m17n.org>
parents:
28213
diff
changeset
|
316 (define-key map (vector i) 'quail-self-insert-command) |
b46c4dc8c51a
(quail-simple-translation-keymap): Map
Kenichi Handa <handa@m17n.org>
parents:
28213
diff
changeset
|
317 (setq i (1+ i))) |
19619
b033d0b34c71
(quail-define-package): New arg SIMPLE.
Richard M. Stallman <rms@gnu.org>
parents:
19605
diff
changeset
|
318 (define-key map "\177" 'quail-delete-last-char) |
19951
820fc18dd520
(quail-simple-translation-keymap):
Richard M. Stallman <rms@gnu.org>
parents:
19949
diff
changeset
|
319 (define-key map [delete] 'quail-delete-last-char) |
820fc18dd520
(quail-simple-translation-keymap):
Richard M. Stallman <rms@gnu.org>
parents:
19949
diff
changeset
|
320 (define-key map [backspace] 'quail-delete-last-char) |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
321 ;;(let ((meta-map (make-sparse-keymap))) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
322 ;;(define-key map (char-to-string meta-prefix-char) meta-map) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
323 ;;(define-key map [escape] meta-map)) |
19878
a69ae37e6932
(quail-update-translation): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
19849
diff
changeset
|
324 map) |
19619
b033d0b34c71
(quail-define-package): New arg SIMPLE.
Richard M. Stallman <rms@gnu.org>
parents:
19605
diff
changeset
|
325 "Keymap used while processing translation in simple Quail modes. |
22793
c3ab1de66dfc
(quail-simple-translation-keymap): Typo
Kenichi Handa <handa@m17n.org>
parents:
22777
diff
changeset
|
326 A few especially complex input methods use `quail-translation-keymap' instead. |
17052 | 327 This map is activated while translation region is active.") |
328 | |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
329 (defvar quail-conversion-keymap |
17052 | 330 (let ((map (make-keymap)) |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
331 (i ?\ )) |
17052 | 332 (while (< i 127) |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
333 (define-key map (char-to-string i) 'quail-self-insert-command) |
17052 | 334 (setq i (1+ i))) |
19647
9b9af28bee8d
(quail-translation-keymap): Do not bind
Kenichi Handa <handa@m17n.org>
parents:
19619
diff
changeset
|
335 (setq i 128) |
19655
47d11f4bbc6c
(quail-translation-keymap): Fix previous
Kenichi Handa <handa@m17n.org>
parents:
19647
diff
changeset
|
336 (while (< i 256) |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
337 (define-key map (vector i) 'quail-self-insert-command) |
19647
9b9af28bee8d
(quail-translation-keymap): Do not bind
Kenichi Handa <handa@m17n.org>
parents:
19619
diff
changeset
|
338 (setq i (1+ i))) |
17052 | 339 (define-key map "\C-b" 'quail-conversion-backward-char) |
340 (define-key map "\C-f" 'quail-conversion-forward-char) | |
341 (define-key map "\C-a" 'quail-conversion-beginning-of-region) | |
342 (define-key map "\C-e" 'quail-conversion-end-of-region) | |
343 (define-key map "\C-d" 'quail-conversion-delete-char) | |
22777
1b0761cbc15b
(quail-conversion-keymap): New binding
Kenichi Handa <handa@m17n.org>
parents:
22765
diff
changeset
|
344 (define-key map "\C-k" 'quail-conversion-delete-tail) |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
345 (define-key map "\C-h" 'quail-translation-help) |
17052 | 346 (define-key map "\177" 'quail-conversion-backward-delete-char) |
347 (define-key map [delete] 'quail-conversion-backward-delete-char) | |
348 (define-key map [backspace] 'quail-conversion-backward-delete-char) | |
19878
a69ae37e6932
(quail-update-translation): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
19849
diff
changeset
|
349 map) |
17052 | 350 "Keymap used for processing conversion in Quail mode. |
23176 | 351 This map is activated while conversion region is active but translation |
17052 | 352 region is not active.") |
353 | |
31424 | 354 ;; Just a dummy definition. |
355 (defun quail-other-command () | |
356 (interactive) | |
357 ) | |
358 | |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
359 ;;;###autoload |
17052 | 360 (defun quail-define-package (name language title |
361 &optional guidance docstring translation-keys | |
362 forget-last-selection deterministic | |
363 kbd-translate show-layout create-decode-map | |
364 maximum-shortest overlay-plist | |
365 update-translation-function | |
19619
b033d0b34c71
(quail-define-package): New arg SIMPLE.
Richard M. Stallman <rms@gnu.org>
parents:
19605
diff
changeset
|
366 conversion-keys simple) |
17052 | 367 "Define NAME as a new Quail package for input LANGUAGE. |
368 TITLE is a string to be displayed at mode-line to indicate this package. | |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
369 Optional arguments are GUIDANCE, DOCSTRING, TRANSLATION-KEYS, |
17052 | 370 FORGET-LAST-SELECTION, DETERMINISTIC, KBD-TRANSLATE, SHOW-LAYOUT, |
371 CREATE-DECODE-MAP, MAXIMUM-SHORTEST, OVERLAY-PLIST, | |
19619
b033d0b34c71
(quail-define-package): New arg SIMPLE.
Richard M. Stallman <rms@gnu.org>
parents:
19605
diff
changeset
|
372 UPDATE-TRANSLATION-FUNCTION, CONVERSION-KEYS and SIMPLE. |
17052 | 373 |
374 GUIDANCE specifies how a guidance string is shown in echo area. | |
375 If it is t, list of all possible translations for the current key is shown | |
376 with the currently selected translation being highlighted. | |
377 If it is an alist, the element has the form (CHAR . STRING). Each character | |
378 in the current key is searched in the list and the corresponding string is | |
379 shown. | |
380 If it is nil, the current key is shown. | |
381 | |
31546
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
382 DOCSTRING is the documentation string of this package. The command |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
383 `describe-input-method' shows this string while replacing the form |
31549
84fcbc8496b7
(quail-define-package): Docstring modified.
Kenichi Handa <handa@m17n.org>
parents:
31546
diff
changeset
|
384 \\=\\<VAR> in the string by the value of VAR. That value should be a |
84fcbc8496b7
(quail-define-package): Docstring modified.
Kenichi Handa <handa@m17n.org>
parents:
31546
diff
changeset
|
385 string. For instance, the form \\=\\<quail-translation-docstring> is |
31546
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
386 replaced by a description about how to select a translation from a |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
387 list of candidates. |
17052 | 388 |
389 TRANSLATION-KEYS specifies additional key bindings used while translation | |
390 region is active. It is an alist of single key character vs. corresponding | |
391 command to be called. | |
392 | |
393 FORGET-LAST-SELECTION non-nil means a selected translation is not kept | |
394 for the future to translate the same key. If this flag is nil, a | |
395 translation selected for a key is remembered so that it can be the | |
396 first candidate when the same key is entered later. | |
397 | |
398 DETERMINISTIC non-nil means the first candidate of translation is | |
399 selected automatically without allowing users to select another | |
400 translation for a key. In this case, unselected translations are of | |
401 no use for an interactive use of Quail but can be used by some other | |
402 programs. If this flag is non-nil, FORGET-LAST-SELECTION is also set | |
403 to t. | |
404 | |
405 KBD-TRANSLATE non-nil means input characters are translated from a | |
406 user's keyboard layout to the standard keyboard layout. See the | |
407 documentation of `quail-keyboard-layout' and | |
408 `quail-keyboard-layout-standard' for more detail. | |
409 | |
410 SHOW-LAYOUT non-nil means the `quail-help' command should show | |
411 the user's keyboard layout visually with translated characters. | |
412 If KBD-TRANSLATE is set, it is desirable to set also this flag unless | |
413 this package defines no translations for single character keys. | |
414 | |
415 CREATE-DECODE-MAP non-nil means decode map is also created. A decode | |
416 map is an alist of translations and corresponding original keys. | |
417 Although this map is not used by Quail itself, it can be used by some | |
418 other programs. For instance, Vietnamese supporting needs this map to | |
419 convert Vietnamese text to VIQR format which uses only ASCII | |
420 characters to represent Vietnamese characters. | |
421 | |
422 MAXIMUM-SHORTEST non-nil means break key sequence to get maximum | |
423 length of the shortest sequence. When we don't have a translation of | |
424 key \"..ABCD\" but have translations of \"..AB\" and \"CD..\", break | |
425 the key at \"..AB\" and start translation of \"CD..\". Hangul | |
426 packages, for instance, use this facility. If this flag is nil, we | |
427 break the key just at \"..ABC\" and start translation of \"D..\". | |
428 | |
429 OVERLAY-PLIST if non-nil is a property list put on an overlay which | |
430 covers Quail translation region. | |
431 | |
432 UPDATE-TRANSLATION-FUNCTION if non-nil is a function to call to update | |
23176 | 433 the current translation region according to a new translation data. By |
434 default, a translated text or a user's key sequence (if no translation | |
17052 | 435 for it) is inserted. |
436 | |
437 CONVERSION-KEYS specifies additional key bindings used while | |
438 conversion region is active. It is an alist of single key character | |
19619
b033d0b34c71
(quail-define-package): New arg SIMPLE.
Richard M. Stallman <rms@gnu.org>
parents:
19605
diff
changeset
|
439 vs. corresponding command to be called. |
b033d0b34c71
(quail-define-package): New arg SIMPLE.
Richard M. Stallman <rms@gnu.org>
parents:
19605
diff
changeset
|
440 |
b033d0b34c71
(quail-define-package): New arg SIMPLE.
Richard M. Stallman <rms@gnu.org>
parents:
19605
diff
changeset
|
441 If SIMPLE is non-nil, then we do not alter the meanings of |
b033d0b34c71
(quail-define-package): New arg SIMPLE.
Richard M. Stallman <rms@gnu.org>
parents:
19605
diff
changeset
|
442 commands such as C-f, C-b, C-n, C-p and TAB; they are treated as |
b033d0b34c71
(quail-define-package): New arg SIMPLE.
Richard M. Stallman <rms@gnu.org>
parents:
19605
diff
changeset
|
443 non-Quail commands." |
17052 | 444 (let (translation-keymap conversion-keymap) |
445 (if deterministic (setq forget-last-selection t)) | |
446 (if translation-keys | |
19404
8901359ae445
(quail-inactivate): Turn Quail mode off
Kenichi Handa <handa@m17n.org>
parents:
19391
diff
changeset
|
447 (progn |
19619
b033d0b34c71
(quail-define-package): New arg SIMPLE.
Richard M. Stallman <rms@gnu.org>
parents:
19605
diff
changeset
|
448 (setq translation-keymap (copy-keymap |
b033d0b34c71
(quail-define-package): New arg SIMPLE.
Richard M. Stallman <rms@gnu.org>
parents:
19605
diff
changeset
|
449 (if simple quail-simple-translation-keymap |
b033d0b34c71
(quail-define-package): New arg SIMPLE.
Richard M. Stallman <rms@gnu.org>
parents:
19605
diff
changeset
|
450 quail-translation-keymap))) |
19404
8901359ae445
(quail-inactivate): Turn Quail mode off
Kenichi Handa <handa@m17n.org>
parents:
19391
diff
changeset
|
451 (while translation-keys |
8901359ae445
(quail-inactivate): Turn Quail mode off
Kenichi Handa <handa@m17n.org>
parents:
19391
diff
changeset
|
452 (define-key translation-keymap |
8901359ae445
(quail-inactivate): Turn Quail mode off
Kenichi Handa <handa@m17n.org>
parents:
19391
diff
changeset
|
453 (car (car translation-keys)) (cdr (car translation-keys))) |
8901359ae445
(quail-inactivate): Turn Quail mode off
Kenichi Handa <handa@m17n.org>
parents:
19391
diff
changeset
|
454 (setq translation-keys (cdr translation-keys)))) |
19619
b033d0b34c71
(quail-define-package): New arg SIMPLE.
Richard M. Stallman <rms@gnu.org>
parents:
19605
diff
changeset
|
455 (setq translation-keymap |
b033d0b34c71
(quail-define-package): New arg SIMPLE.
Richard M. Stallman <rms@gnu.org>
parents:
19605
diff
changeset
|
456 (if simple quail-simple-translation-keymap |
b033d0b34c71
(quail-define-package): New arg SIMPLE.
Richard M. Stallman <rms@gnu.org>
parents:
19605
diff
changeset
|
457 quail-translation-keymap))) |
19404
8901359ae445
(quail-inactivate): Turn Quail mode off
Kenichi Handa <handa@m17n.org>
parents:
19391
diff
changeset
|
458 (when conversion-keys |
8901359ae445
(quail-inactivate): Turn Quail mode off
Kenichi Handa <handa@m17n.org>
parents:
19391
diff
changeset
|
459 (setq conversion-keymap (copy-keymap quail-conversion-keymap)) |
8901359ae445
(quail-inactivate): Turn Quail mode off
Kenichi Handa <handa@m17n.org>
parents:
19391
diff
changeset
|
460 (while conversion-keys |
8901359ae445
(quail-inactivate): Turn Quail mode off
Kenichi Handa <handa@m17n.org>
parents:
19391
diff
changeset
|
461 (define-key conversion-keymap |
8901359ae445
(quail-inactivate): Turn Quail mode off
Kenichi Handa <handa@m17n.org>
parents:
19391
diff
changeset
|
462 (car (car conversion-keys)) (cdr (car conversion-keys))) |
8901359ae445
(quail-inactivate): Turn Quail mode off
Kenichi Handa <handa@m17n.org>
parents:
19391
diff
changeset
|
463 (setq conversion-keys (cdr conversion-keys)))) |
17052 | 464 (quail-add-package |
465 (list name title (list nil) guidance (or docstring "") | |
466 translation-keymap | |
467 forget-last-selection deterministic kbd-translate show-layout | |
468 (if create-decode-map (list 'decode-map) nil) | |
469 maximum-shortest overlay-plist update-translation-function | |
19849
1c5164d81426
(quail-simple): New function.
Kenichi Handa <handa@m17n.org>
parents:
19844
diff
changeset
|
470 conversion-keymap simple)) |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
471 |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
472 ;; Update input-method-alist. |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
473 (let ((slot (assoc name input-method-alist)) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
474 (val (list language 'quail-use-package title docstring))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
475 (if slot (setcdr slot val) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
476 (setq input-method-alist (cons (cons name val) input-method-alist))))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
477 |
17052 | 478 (quail-select-package name)) |
479 | |
480 ;; Quail minor mode handlers. | |
481 | |
482 ;; Setup overlays used in Quail mode. | |
19404
8901359ae445
(quail-inactivate): Turn Quail mode off
Kenichi Handa <handa@m17n.org>
parents:
19391
diff
changeset
|
483 (defun quail-setup-overlays (conversion-mode) |
17052 | 484 (let ((pos (point))) |
485 (if (overlayp quail-overlay) | |
486 (move-overlay quail-overlay pos pos) | |
487 (setq quail-overlay (make-overlay pos pos nil nil t)) | |
19404
8901359ae445
(quail-inactivate): Turn Quail mode off
Kenichi Handa <handa@m17n.org>
parents:
19391
diff
changeset
|
488 (if input-method-highlight-flag |
8901359ae445
(quail-inactivate): Turn Quail mode off
Kenichi Handa <handa@m17n.org>
parents:
19391
diff
changeset
|
489 (overlay-put quail-overlay 'face 'underline)) |
17052 | 490 (let ((l (quail-overlay-plist))) |
491 (while l | |
492 (overlay-put quail-overlay (car l) (car (cdr l))) | |
493 (setq l (cdr (cdr l)))))) | |
19404
8901359ae445
(quail-inactivate): Turn Quail mode off
Kenichi Handa <handa@m17n.org>
parents:
19391
diff
changeset
|
494 (if conversion-mode |
8901359ae445
(quail-inactivate): Turn Quail mode off
Kenichi Handa <handa@m17n.org>
parents:
19391
diff
changeset
|
495 (if (overlayp quail-conv-overlay) |
8901359ae445
(quail-inactivate): Turn Quail mode off
Kenichi Handa <handa@m17n.org>
parents:
19391
diff
changeset
|
496 (if (not (overlay-start quail-conv-overlay)) |
8901359ae445
(quail-inactivate): Turn Quail mode off
Kenichi Handa <handa@m17n.org>
parents:
19391
diff
changeset
|
497 (move-overlay quail-conv-overlay pos pos)) |
8901359ae445
(quail-inactivate): Turn Quail mode off
Kenichi Handa <handa@m17n.org>
parents:
19391
diff
changeset
|
498 (setq quail-conv-overlay (make-overlay pos pos nil nil t)) |
8901359ae445
(quail-inactivate): Turn Quail mode off
Kenichi Handa <handa@m17n.org>
parents:
19391
diff
changeset
|
499 (if input-method-highlight-flag |
8901359ae445
(quail-inactivate): Turn Quail mode off
Kenichi Handa <handa@m17n.org>
parents:
19391
diff
changeset
|
500 (overlay-put quail-conv-overlay 'face 'underline)))))) |
17052 | 501 |
502 ;; Delete overlays used in Quail mode. | |
503 (defun quail-delete-overlays () | |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
504 (if (and (overlayp quail-overlay) (overlay-start quail-overlay)) |
17052 | 505 (delete-overlay quail-overlay)) |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
506 (if (and (overlayp quail-conv-overlay) (overlay-start quail-conv-overlay)) |
17052 | 507 (delete-overlay quail-conv-overlay))) |
508 | |
19432
4492653b04e8
(quail-exit-from-minibuffer): Call
Kenichi Handa <handa@m17n.org>
parents:
19404
diff
changeset
|
509 ;; Kill Quail guidance buffer. Set in kill-buffer-hook. |
4492653b04e8
(quail-exit-from-minibuffer): Call
Kenichi Handa <handa@m17n.org>
parents:
19404
diff
changeset
|
510 (defun quail-kill-guidance-buf () |
4492653b04e8
(quail-exit-from-minibuffer): Call
Kenichi Handa <handa@m17n.org>
parents:
19404
diff
changeset
|
511 (if (buffer-live-p quail-guidance-buf) |
4492653b04e8
(quail-exit-from-minibuffer): Call
Kenichi Handa <handa@m17n.org>
parents:
19404
diff
changeset
|
512 (kill-buffer quail-guidance-buf))) |
4492653b04e8
(quail-exit-from-minibuffer): Call
Kenichi Handa <handa@m17n.org>
parents:
19404
diff
changeset
|
513 |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
514 (defun quail-inactivate () |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
515 "Inactivate Quail input method." |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
516 (interactive) |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
517 (quail-activate -1)) |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
518 |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
519 (defun quail-activate (&optional arg) |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
520 "Activate Quail input method. |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
521 With arg, activate Quail input method if and only if arg is positive. |
19432
4492653b04e8
(quail-exit-from-minibuffer): Call
Kenichi Handa <handa@m17n.org>
parents:
19404
diff
changeset
|
522 |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
523 While this input method is active, the variable |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
524 `input-method-function' is bound to the function `quail-input-method'." |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
525 (if (and arg |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
526 (< (prefix-numeric-value arg) 0)) |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
527 ;; Let's inactivate Quail input method. |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
528 (unwind-protect |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
529 (progn |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
530 (quail-hide-guidance-buf) |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
531 (quail-delete-overlays) |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
532 (setq describe-current-input-method-function nil) |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
533 (run-hooks 'quail-inactivate-hook)) |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
534 (kill-local-variable 'input-method-function)) |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
535 ;; Let's active Quail input method. |
17052 | 536 (if (null quail-current-package) |
537 ;; Quail package is not yet selected. Select one now. | |
538 (let (name) | |
539 (if quail-package-alist | |
540 (setq name (car (car quail-package-alist))) | |
541 (error "No Quail package loaded")) | |
542 (quail-select-package name))) | |
19404
8901359ae445
(quail-inactivate): Turn Quail mode off
Kenichi Handa <handa@m17n.org>
parents:
19391
diff
changeset
|
543 (setq inactivate-current-input-method-function 'quail-inactivate) |
17052 | 544 (setq describe-current-input-method-function 'quail-help) |
545 (quail-delete-overlays) | |
546 (quail-show-guidance-buf) | |
19432
4492653b04e8
(quail-exit-from-minibuffer): Call
Kenichi Handa <handa@m17n.org>
parents:
19404
diff
changeset
|
547 ;; If we are in minibuffer, turn off the current input method |
4492653b04e8
(quail-exit-from-minibuffer): Call
Kenichi Handa <handa@m17n.org>
parents:
19404
diff
changeset
|
548 ;; before exiting. |
17052 | 549 (if (eq (selected-window) (minibuffer-window)) |
550 (add-hook 'minibuffer-exit-hook 'quail-exit-from-minibuffer)) | |
19432
4492653b04e8
(quail-exit-from-minibuffer): Call
Kenichi Handa <handa@m17n.org>
parents:
19404
diff
changeset
|
551 (make-local-hook 'kill-buffer-hook) |
4492653b04e8
(quail-exit-from-minibuffer): Call
Kenichi Handa <handa@m17n.org>
parents:
19404
diff
changeset
|
552 (add-hook 'kill-buffer-hook 'quail-kill-guidance-buf nil t) |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
553 (run-hooks 'quail-activate-hook) |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
554 (make-local-variable 'input-method-function) |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
555 (setq input-method-function 'quail-input-method))) |
17052 | 556 |
557 (defun quail-exit-from-minibuffer () | |
19432
4492653b04e8
(quail-exit-from-minibuffer): Call
Kenichi Handa <handa@m17n.org>
parents:
19404
diff
changeset
|
558 (inactivate-input-method) |
17052 | 559 (if (<= (minibuffer-depth) 1) |
560 (remove-hook 'minibuffer-exit-hook 'quail-exit-from-minibuffer))) | |
561 | |
562 ;; Keyboard layout translation handlers. | |
563 | |
564 ;; Some Quail packages provide localized keyboard simulation which | |
565 ;; requires a particular keyboard layout. In this case, what we need | |
566 ;; is locations of keys the user entered, not character codes | |
567 ;; generated by those keys. However, for the moment, there's no | |
568 ;; common way to get such information. So, we ask a user to give | |
569 ;; information of his own keyboard layout, then translate it to the | |
570 ;; standard layout which we defined so that all Quail packages depend | |
571 ;; just on it. | |
572 | |
573 (defconst quail-keyboard-layout-standard | |
574 "\ | |
17174
9c1191812679
(quail-translation-keymap): Add entry for escape key.
Kenichi Handa <handa@m17n.org>
parents:
17095
diff
changeset
|
575 \ |
17052 | 576 1!2@3#4$5%6^7&8*9(0)-_=+`~ \ |
577 qQwWeErRtTyYuUiIoOpP[{]} \ | |
578 aAsSdDfFgGhHjJkKlL;:'\"\\| \ | |
17174
9c1191812679
(quail-translation-keymap): Add entry for escape key.
Kenichi Handa <handa@m17n.org>
parents:
17095
diff
changeset
|
579 zZxXcCvVbBnNmM,<.>/? \ |
9c1191812679
(quail-translation-keymap): Add entry for escape key.
Kenichi Handa <handa@m17n.org>
parents:
17095
diff
changeset
|
580 " |
17052 | 581 "Standard keyboard layout of printable characters Quail assumes. |
582 See the documentation of `quail-keyboard-layout' for this format. | |
583 This layout is almost the same as that of VT100, | |
584 but the location of key \\ (backslash) is just right of key ' (single-quote), | |
585 not right of RETURN key.") | |
586 | |
587 (defvar quail-keyboard-layout quail-keyboard-layout-standard | |
588 "A string which represents physical key layout of a particular keyboard. | |
17174
9c1191812679
(quail-translation-keymap): Add entry for escape key.
Kenichi Handa <handa@m17n.org>
parents:
17095
diff
changeset
|
589 We assume there are six rows and each row has 15 keys (columns), |
9c1191812679
(quail-translation-keymap): Add entry for escape key.
Kenichi Handa <handa@m17n.org>
parents:
17095
diff
changeset
|
590 the first row is above the `1' - `0' row, |
9c1191812679
(quail-translation-keymap): Add entry for escape key.
Kenichi Handa <handa@m17n.org>
parents:
17095
diff
changeset
|
591 the first column of the second row is left of key `1', |
9c1191812679
(quail-translation-keymap): Add entry for escape key.
Kenichi Handa <handa@m17n.org>
parents:
17095
diff
changeset
|
592 the first column of the third row is left of key `q', |
9c1191812679
(quail-translation-keymap): Add entry for escape key.
Kenichi Handa <handa@m17n.org>
parents:
17095
diff
changeset
|
593 the first column of the fourth row is left of key `a', |
9c1191812679
(quail-translation-keymap): Add entry for escape key.
Kenichi Handa <handa@m17n.org>
parents:
17095
diff
changeset
|
594 the first column of the fifth row is left of key `z', |
9c1191812679
(quail-translation-keymap): Add entry for escape key.
Kenichi Handa <handa@m17n.org>
parents:
17095
diff
changeset
|
595 the sixth row is below the `z' - `/' row. |
17052 | 596 Nth (N is even) and (N+1)th characters in the string are non-shifted |
597 and shifted characters respectively at the same location. | |
19391
763bc03e7797
(quail-guidance-buf): Now a permanent local.
Richard M. Stallman <rms@gnu.org>
parents:
19327
diff
changeset
|
598 The location of Nth character is row (N / 30) and column ((N mod 30) / 2). |
763bc03e7797
(quail-guidance-buf): Now a permanent local.
Richard M. Stallman <rms@gnu.org>
parents:
19327
diff
changeset
|
599 The command `quail-set-keyboard-layout' usually sets this variable.") |
17052 | 600 |
17174
9c1191812679
(quail-translation-keymap): Add entry for escape key.
Kenichi Handa <handa@m17n.org>
parents:
17095
diff
changeset
|
601 (defconst quail-keyboard-layout-len 180) |
17052 | 602 |
603 ;; Here we provide several examples of famous keyboard layouts. | |
604 | |
605 (defvar quail-keyboard-layout-alist | |
606 (list | |
31424 | 607 (cons "standard" quail-keyboard-layout-standard) |
17052 | 608 '("sun-type3" . "\ |
17174
9c1191812679
(quail-translation-keymap): Add entry for escape key.
Kenichi Handa <handa@m17n.org>
parents:
17095
diff
changeset
|
609 \ |
17052 | 610 1!2@3#4$5%6^7&8*9(0)-_=+\\|`~\ |
611 qQwWeErRtTyYuUiIoOpP[{]} \ | |
612 aAsSdDfFgGhHjJkKlL;:'\" \ | |
17174
9c1191812679
(quail-translation-keymap): Add entry for escape key.
Kenichi Handa <handa@m17n.org>
parents:
17095
diff
changeset
|
613 zZxXcCvVbBnNmM,<.>/? \ |
9c1191812679
(quail-translation-keymap): Add entry for escape key.
Kenichi Handa <handa@m17n.org>
parents:
17095
diff
changeset
|
614 ") |
19675
32c3f7d9ef10
(quail-keyboard-layout-alist): Add an
Kenichi Handa <handa@m17n.org>
parents:
19655
diff
changeset
|
615 '("atari-german" . "\ |
32c3f7d9ef10
(quail-keyboard-layout-alist): Add an
Kenichi Handa <handa@m17n.org>
parents:
19655
diff
changeset
|
616 \ |
32c3f7d9ef10
(quail-keyboard-layout-alist): Add an
Kenichi Handa <handa@m17n.org>
parents:
19655
diff
changeset
|
617 1!2\"3\2474$5%6&7/8(9)0=\337?'`#^ \ |
32c3f7d9ef10
(quail-keyboard-layout-alist): Add an
Kenichi Handa <handa@m17n.org>
parents:
19655
diff
changeset
|
618 qQwWeErRtTzZuUiIoOpP\374\334+* \ |
32c3f7d9ef10
(quail-keyboard-layout-alist): Add an
Kenichi Handa <handa@m17n.org>
parents:
19655
diff
changeset
|
619 aAsSdDfFgGhHjJkKlL\366\326\344\304~| \ |
32c3f7d9ef10
(quail-keyboard-layout-alist): Add an
Kenichi Handa <handa@m17n.org>
parents:
19655
diff
changeset
|
620 <>yYxXcCvVbBnNmM,;.:-_ \ |
32c3f7d9ef10
(quail-keyboard-layout-alist): Add an
Kenichi Handa <handa@m17n.org>
parents:
19655
diff
changeset
|
621 ") |
29073
b46c4dc8c51a
(quail-simple-translation-keymap): Map
Kenichi Handa <handa@m17n.org>
parents:
28213
diff
changeset
|
622 |
b46c4dc8c51a
(quail-simple-translation-keymap): Map
Kenichi Handa <handa@m17n.org>
parents:
28213
diff
changeset
|
623 '("pc102-de" . "\ |
b46c4dc8c51a
(quail-simple-translation-keymap): Map
Kenichi Handa <handa@m17n.org>
parents:
28213
diff
changeset
|
624 \ |
b46c4dc8c51a
(quail-simple-translation-keymap): Map
Kenichi Handa <handa@m17n.org>
parents:
28213
diff
changeset
|
625 ^\2601!2\"3\2474$5%6&7/8(9)0=\337?\264`#' \ |
b46c4dc8c51a
(quail-simple-translation-keymap): Map
Kenichi Handa <handa@m17n.org>
parents:
28213
diff
changeset
|
626 qQwWeErRtTzZuUiIoOpP\374\334+* \ |
b46c4dc8c51a
(quail-simple-translation-keymap): Map
Kenichi Handa <handa@m17n.org>
parents:
28213
diff
changeset
|
627 aAsSdDfFgGhHjJkKlL\366\326\344\304 \ |
b46c4dc8c51a
(quail-simple-translation-keymap): Map
Kenichi Handa <handa@m17n.org>
parents:
28213
diff
changeset
|
628 <>yYxXcCvVbBnNmM,;.:-_ \ |
b46c4dc8c51a
(quail-simple-translation-keymap): Map
Kenichi Handa <handa@m17n.org>
parents:
28213
diff
changeset
|
629 ") |
b46c4dc8c51a
(quail-simple-translation-keymap): Map
Kenichi Handa <handa@m17n.org>
parents:
28213
diff
changeset
|
630 |
31424 | 631 '("jp106" . "\ |
632 \ | |
633 1!2\"3#4$5%6&7'8(9)0~-=^~\\| \ | |
634 qQwWeErRtTyYuUiIoOpP@`[{ \ | |
635 aAsSdDfFgGhHjJkKlL;+:*]} \ | |
636 zZxXcCvVbBnNmM,<.>/?\\_ \ | |
637 ") | |
638 ) | |
17052 | 639 "Alist of keyboard names and corresponding layout strings. |
640 See the documentation of `quail-keyboard-layout' for the format of | |
31424 | 641 the layout string.") |
642 | |
643 ;; A non-standard keyboard layout may miss some key locations of the | |
644 ;; standard layout while having additional key locations not in the | |
645 ;; standard layout. This alist maps those additional key locations to | |
646 ;; the missing locations. The value is updated automatically by | |
647 ;; quail-set-keyboard-layout. | |
648 (defvar quail-keyboard-layout-substitution nil) | |
649 | |
650 (defun quail-update-keyboard-layout (kbd-type) | |
651 (let ((layout (assoc kbd-type quail-keyboard-layout-alist))) | |
652 (if (null layout) | |
653 ;; Here, we had better ask a user to define his own keyboard | |
654 ;; layout interactively. | |
655 (error "Unknown keyboard type `%s'" kbd-type)) | |
656 (setq quail-keyboard-layout (cdr layout)) | |
657 (let ((i quail-keyboard-layout-len) | |
658 subst-list missing-list) | |
659 ;; Sum up additional key locations not in the standard layout in | |
660 ;; subst-list, and missing key locations in missing-list. | |
661 (while (> i 0) | |
662 (setq i (1- i)) | |
663 (if (= (aref quail-keyboard-layout i) ? ) | |
664 (if (/= (aref quail-keyboard-layout-standard i) ? ) | |
665 (setq missing-list (cons i missing-list))) | |
666 (if (= (aref quail-keyboard-layout-standard i) ? ) | |
667 (setq subst-list (cons (cons i nil) subst-list))))) | |
668 (setq quail-keyboard-layout-substitution subst-list) | |
669 ;; If there are additional key locations, map them to missing | |
670 ;; key locations. | |
671 (while missing-list | |
672 (while (and subst-list (cdr (car subst-list))) | |
673 (setq subst-list (cdr subst-list))) | |
674 (if subst-list | |
675 (setcdr (car subst-list) (car missing-list))) | |
676 (setq missing-list (cdr missing-list)))))) | |
677 | |
678 (defcustom quail-keyboard-layout-type "standard" | |
679 "Type of keyboard layout used in Quail base input method. | |
680 Available types are listed in the variable `quail-keyboard-layout-alist'." | |
681 :group 'quail | |
682 :type 'string | |
683 :set #'(lambda (symbol value) | |
684 (quail-update-keyboard-layout value) | |
685 (set symbol value))) | |
17052 | 686 |
19949
ad6d3d0b2cb4
(quail-set-keyboard-layout): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents:
19944
diff
changeset
|
687 ;;;###autoload |
17052 | 688 (defun quail-set-keyboard-layout (kbd-type) |
689 "Set the current keyboard layout to the same as keyboard KBD-TYPE. | |
690 | |
691 Since some Quail packages depends on a physical layout of keys (not | |
692 characters generated by them), those are created by assuming the | |
693 standard layout defined in `quail-keyboard-layout-standard'. This | |
694 function tells Quail system the layout of your keyboard so that what | |
695 you type is correctly handled." | |
696 (interactive | |
28213
2851f83ea432
(quail-set-keyboard-layout): Typo fixed.
Kenichi Handa <handa@m17n.org>
parents:
26891
diff
changeset
|
697 (let* ((completion-ignore-case t) |
17052 | 698 (type (completing-read "Keyboard type: " |
699 quail-keyboard-layout-alist))) | |
700 (list type))) | |
31424 | 701 (quail-update-keyboard-layout kbd-type) |
702 (setq quail-keyboard-layout-type kbd-type)) | |
17052 | 703 |
31424 | 704 (defun quail-keyboard-translate (char) |
705 "Translate CHAR to the one in the standard keyboard layout." | |
17052 | 706 (if (eq quail-keyboard-layout quail-keyboard-layout-standard) |
19675
32c3f7d9ef10
(quail-keyboard-layout-alist): Add an
Kenichi Handa <handa@m17n.org>
parents:
19655
diff
changeset
|
707 ;; All Quail packages are designed based on |
32c3f7d9ef10
(quail-keyboard-layout-alist): Add an
Kenichi Handa <handa@m17n.org>
parents:
19655
diff
changeset
|
708 ;; `quail-keyboard-layout-standard'. |
31424 | 709 char |
17052 | 710 (let ((i 0)) |
31424 | 711 ;; Find the key location on the current keyboard layout. |
17052 | 712 (while (and (< i quail-keyboard-layout-len) |
31424 | 713 (/= char (aref quail-keyboard-layout i))) |
17052 | 714 (setq i (1+ i))) |
715 (if (= i quail-keyboard-layout-len) | |
31424 | 716 ;; CHAR is not in quail-keyboard-layout, which means that a |
19675
32c3f7d9ef10
(quail-keyboard-layout-alist): Add an
Kenichi Handa <handa@m17n.org>
parents:
19655
diff
changeset
|
717 ;; user typed a key which generated a character code to be |
31424 | 718 ;; handled out of Quail. Just return CHAR and make |
19675
32c3f7d9ef10
(quail-keyboard-layout-alist): Add an
Kenichi Handa <handa@m17n.org>
parents:
19655
diff
changeset
|
719 ;; quail-execute-non-quail-command handle it correctly. |
31424 | 720 char |
721 (let ((ch (aref quail-keyboard-layout-standard i))) | |
722 (if (= ch ?\ ) | |
723 ;; This location not available in the standard keyboard | |
724 ;; layout. Check if the location is used to substitute | |
725 ;; for the other location of the standard layout. | |
726 (if (setq i (cdr (assq i quail-keyboard-layout-substitution))) | |
727 (aref quail-keyboard-layout-standard i) | |
728 ;; Just return CHAR as well as above. | |
729 char) | |
730 ch)))))) | |
731 | |
31828
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
732 (defun quail-keyseq-translate (keyseq) |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
733 (apply 'string |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
734 (mapcar (function (lambda (x) (quail-keyboard-translate x))) |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
735 keyseq))) |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
736 |
31424 | 737 ;; Insert the visual keyboard layout table according to KBD-LAYOUT. |
738 ;; The format of KBD-LAYOUT is the same as `quail-keyboard-layout'. | |
739 (defun quail-insert-kbd-layout (kbd-layout) | |
740 (let (done-list layout i ch) | |
741 ;; At first, convert KBD-LAYOUT to the same size vector that | |
742 ;; contains translated character or string. | |
743 (setq layout (string-to-vector kbd-layout) | |
744 i 0) | |
745 (while (< i quail-keyboard-layout-len) | |
746 (setq ch (aref kbd-layout i)) | |
747 (if (quail-kbd-translate) | |
748 (setq ch (quail-keyboard-translate ch))) | |
749 (let* ((map (cdr (assq ch (cdr (quail-map))))) | |
750 (translation (and map (quail-get-translation | |
751 (car map) (char-to-string ch) 1)))) | |
752 (if translation | |
753 (progn | |
754 (if (consp translation) | |
755 (setq translation (aref (cdr translation) 0))) | |
756 (setq done-list (cons translation done-list))) | |
757 (setq translation ch)) | |
758 (aset layout i translation)) | |
759 (setq i (1+ i))) | |
760 | |
761 (let ((pos (point)) | |
762 (bar "|") | |
763 lower upper row) | |
764 ;; Make table without horizontal lines. Each column for a key | |
765 ;; has the form "| LU |" where L is for lower key and and U is | |
766 ;; for a upper key. If width of L (U) is greater than 1, | |
767 ;; preceding (following) space is not inserted. | |
768 (put-text-property 0 1 'face 'bold bar) | |
769 (setq i 0) | |
770 (while (< i quail-keyboard-layout-len) | |
771 (when (= (% i 30) 0) | |
772 (setq row (/ i 30)) | |
773 (if (> row 1) | |
774 (insert-char 32 (+ row (/ (- row 2) 2))))) | |
775 (setq lower (aref layout i) | |
776 upper (aref layout (1+ i))) | |
777 (if (and (integerp lower) (>= lower 128) (< lower 256)) | |
778 (setq lower (unibyte-char-to-multibyte lower))) | |
779 (if (and (integerp upper) (>= upper 128) (< upper 256)) | |
780 (setq upper (unibyte-char-to-multibyte upper))) | |
781 (insert bar) | |
782 (if (= (if (stringp lower) (string-width lower) (char-width lower)) 1) | |
783 (insert " ")) | |
784 (insert lower upper) | |
785 (if (= (if (stringp upper) (string-width upper) (char-width upper)) 1) | |
786 (insert " ")) | |
787 (setq i (+ i 2)) | |
788 (if (= (% i 30) 0) | |
789 (insert bar "\n"))) | |
790 ;; Insert horizontal lines while deleting blank key columns at the | |
791 ;; beginning and end of each line. | |
792 (save-restriction | |
793 (narrow-to-region pos (point)) | |
794 (goto-char pos) | |
795 ;;(while (looking-at "[| ]*$") | |
796 ;;(forward-line 1) | |
797 ;;(delete-region pos (point))) | |
798 (let ((from1 100) (to1 0) from2 to2) | |
799 (while (not (eobp)) | |
800 (if (looking-at "[| ]*$") | |
801 ;; The entire row is blank. | |
802 (delete-region (point) (match-end 0)) | |
803 ;; Delete blank key columns at the head. | |
804 (if (looking-at " *\\(| \\)+") | |
805 (subst-char-in-region (point) (match-end 0) ?| ? )) | |
806 ;; Delete blank key columns at the tail. | |
807 (if (re-search-forward "\\( |\\)+$" (line-end-position) t) | |
808 (delete-region (match-beginning 0) (point))) | |
809 (beginning-of-line)) | |
810 ;; Calculate the start and end columns of a horizontal line. | |
811 (if (eolp) | |
812 (setq from2 from1 to2 to1) | |
813 (skip-chars-forward " ") | |
814 (setq from2 (current-column)) | |
815 (end-of-line) | |
816 (setq to2 (current-column)) | |
817 (if (< from2 from1) | |
818 (setq from1 from2)) | |
819 (if (> to2 to1) | |
820 (setq to1 to2)) | |
821 (beginning-of-line)) | |
822 ;; If the previous or the current line has at least one key | |
823 ;; column, insert a horizontal line. | |
824 (when (> to1 0) | |
825 (insert-char 32 from1) | |
826 (setq pos (point)) | |
827 (insert "+") | |
828 (insert-char ?- (- (- to1 from1) 2)) | |
829 (insert "+") | |
830 (put-text-property pos (point) 'face 'bold) | |
831 (insert "\n")) | |
832 (setq from1 from2 to1 to2) | |
833 (forward-line 1))) | |
834 ;; Insert "space bar" box. | |
835 (forward-line -1) | |
836 (setq pos (point)) | |
837 (insert | |
838 " +-----------------------------+ | |
839 | space bar | | |
840 +-----------------------------+ | |
841 ") | |
842 (put-text-property pos (point) 'face 'bold) | |
843 (insert ?\n))) | |
844 | |
845 done-list)) | |
846 | |
847 ;;;###autoload | |
848 (defun quail-show-keyboard-layout (&optional keyboard-type) | |
31546
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
849 "Show the physical layout of the keyboard type KEYBOARD-TYPE. |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
850 |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
851 The variable `quail-keyboard-layout-type' holds the currently selected |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
852 keyboard type." |
31424 | 853 (interactive |
854 (list (completing-read "Keyboard type (default, current choise): " | |
855 quail-keyboard-layout-alist | |
856 nil t))) | |
857 (or (and keyboard-type (> (length keyboard-type) 0)) | |
858 (setq keyboard-type quail-keyboard-layout-type)) | |
859 (let ((layout (assoc keyboard-type quail-keyboard-layout-alist))) | |
860 (or layout | |
861 (error "Unknown keyboard type: %s" keyboard-type)) | |
862 (with-output-to-temp-buffer "*Help*" | |
863 (save-excursion | |
864 (set-buffer standard-output) | |
865 (insert "Keyboard layout (keyboard type: " | |
866 keyboard-type | |
867 ")\n") | |
868 (quail-insert-kbd-layout (cdr layout)))))) | |
17052 | 869 |
870 ;; Quail map | |
871 | |
872 (defsubst quail-map-p (object) | |
873 "Return t if OBJECT is a Quail map. | |
874 | |
875 A Quail map holds information how a particular key should be translated. | |
876 Its format is (TRANSLATION . ALIST). | |
877 TRANSLATION is either a character, or a cons (INDEX . VECTOR). | |
878 In the latter case, each element of VECTOR is a candidate for the translation, | |
879 and INDEX points the currently selected translation. | |
880 | |
881 ALIST is normally a list of elements that look like (CHAR . DEFN), | |
882 where DEFN is another Quail map for a longer key (CHAR added to the | |
883 current key). It may also be a symbol of a function which returns an | |
884 alist of the above format. | |
885 | |
886 Just after a Quail package is read, TRANSLATION may be a string or a | |
887 vector. Then each element of the string or vector is a candidate for | |
888 the translation. These objects are transformed to cons cells in the | |
889 format \(INDEX . VECTOR), as described above." | |
890 (and (consp object) | |
891 (let ((translation (car object))) | |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
892 (or (integerp translation) (null translation) |
17052 | 893 (vectorp translation) (stringp translation) |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
894 (symbolp translation) |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
895 (and (consp translation) (not (vectorp (cdr translation)))))) |
17052 | 896 (let ((alist (cdr object))) |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
897 (or (and (listp alist) (consp (car alist))) |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
898 (symbolp alist))))) |
17052 | 899 |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
900 ;;;###autoload |
17052 | 901 (defmacro quail-define-rules (&rest rules) |
902 "Define translation rules of the current Quail package. | |
903 Each argument is a list of KEY and TRANSLATION. | |
904 KEY is a string meaning a sequence of keystrokes to be translated. | |
905 TRANSLATION is a character, a string, a vector, a Quail map, or a function. | |
24821
7f6aadd2625b
(quail-define-rules): Fix typo in docstring.
Kenichi Handa <handa@m17n.org>
parents:
24304
diff
changeset
|
906 If it is a character, it is the sole translation of KEY. |
17052 | 907 If it is a string, each character is a candidate for the translation. |
908 If it is a vector, each element (string or character) is a candidate | |
909 for the translation. | |
910 In these cases, a key specific Quail map is generated and assigned to KEY. | |
911 | |
912 If TRANSLATION is a Quail map or a function symbol which returns a Quail map, | |
30656
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
913 it is used to handle KEY. |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
914 |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
915 The first argument may be an alist of annotations for the following |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
916 rules. Each element has the form (ANNOTATION . VALUE), where |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
917 ANNOTATION is a symbol indicating the annotation type. Currently |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
918 the following annotation types are supported. |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
919 |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
920 append -- the value non-nil means that the following rules should |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
921 be appended to the rules of the current Quail package. |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
922 |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
923 face -- the value is a face to use for displaying TRANSLATIONs in |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
924 candidate list. |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
925 |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
926 advice -- the value is a function to call after one of RULES is |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
927 selected. The function is called with one argument, the |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
928 selected TRANSLATION string, after the TRANSLATION is |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
929 inserted. |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
930 |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
931 no-decode-map --- the value non-nil means that decoding map is not |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
932 generated for the following translations." |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
933 (let ((l rules) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
934 append no-decode-map props) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
935 ;; If the first argument is an alist of annotations, handle them. |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
936 (if (consp (car (car l))) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
937 (let ((annotations (car l))) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
938 (setq append (assq 'append annotations)) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
939 (if append |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
940 (setq annotations (delete append annotations) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
941 append (cdr append))) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
942 (setq no-decode-map (assq 'no-decode-map annotations)) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
943 (if no-decode-map |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
944 (setq annotations (delete no-decode-map annotations) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
945 no-decode-map (cdr no-decode-map))) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
946 ;; Convert the remaining annoations to property list PROPS. |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
947 (while annotations |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
948 (setq props |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
949 (cons (car (car annotations)) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
950 (cons (cdr (car annotations)) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
951 props)) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
952 annotations (cdr annotations))) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
953 (setq l (cdr l)))) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
954 ;; Process the remaining arguments one by one. |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
955 (if append |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
956 ;; There's no way to add new rules at compiling time. |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
957 `(let ((tail ',l) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
958 (map (quail-map)) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
959 (decode-map (and (quail-decode-map) (not ,no-decode-map))) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
960 (properties ',props) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
961 key trans) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
962 (while tail |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
963 (setq key (car (car tail)) trans (car (cdr (car tail))) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
964 tail (cdr tail)) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
965 (quail-defrule-internal key trans map t decode-map properties))) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
966 ;; We can build up quail map and decode map at compiling time. |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
967 (let ((map (list nil)) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
968 (decode-map (if (not no-decode-map) (list 'decode-map))) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
969 key trans) |
17052 | 970 (while l |
30656
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
971 (setq key (car (car l)) trans (car (cdr (car l))) l (cdr l)) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
972 (quail-defrule-internal key trans map t decode-map props)) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
973 `(if (not (quail-decode-map)) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
974 (quail-install-map ',map) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
975 (quail-install-map ',map) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
976 (quail-install-decode-map ',decode-map)))))) |
17052 | 977 |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
978 ;;;###autoload |
26891
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
979 (defun quail-install-map (map &optional name) |
17052 | 980 "Install the Quail map MAP in the current Quail package. |
26891
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
981 |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
982 Optional 2nd arg NAME, if non-nil, is a name of Quail package for |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
983 which to install MAP. |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
984 |
17052 | 985 The installed map can be referred by the function `quail-map'." |
986 (if (null quail-current-package) | |
987 (error "No current Quail package")) | |
988 (if (null (quail-map-p map)) | |
989 (error "Invalid Quail map `%s'" map)) | |
990 (setcar (cdr (cdr quail-current-package)) map)) | |
991 | |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
992 ;;;###autoload |
30656
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
993 (defun quail-install-decode-map (decode-map &optional name) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
994 "Install the Quail decode map DECODE-MAP in the current Quail package. |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
995 |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
996 Optional 2nd arg NAME, if non-nil, is a name of Quail package for |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
997 which to install MAP. |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
998 |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
999 The installed decode map can be referred by the function `quail-decode-map'." |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1000 (if (null quail-current-package) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1001 (error "No current Quail package")) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1002 (if (not (and (consp decode-map) (eq (car decode-map) 'decode-map))) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1003 (error "Invalid Quail decode map `%s'" decode-map)) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1004 (setcar (nthcdr 10 quail-current-package) decode-map)) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1005 |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1006 ;;;###autoload |
23401
a83ca83c8626
(quail-defrule): New optional arg APPEND.
Kenichi Handa <handa@m17n.org>
parents:
23304
diff
changeset
|
1007 (defun quail-defrule (key translation &optional name append) |
17052 | 1008 "Add one translation rule, KEY to TRANSLATION, in the current Quail package. |
1009 KEY is a string meaning a sequence of keystrokes to be translated. | |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1010 TRANSLATION is a character, a string, a vector, a Quail map, |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1011 a function, or a cons. |
17052 | 1012 It it is a character, it is the sole translation of KEY. |
1013 If it is a string, each character is a candidate for the translation. | |
1014 If it is a vector, each element (string or character) is a candidate | |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1015 for the translation. |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1016 If it is a cons, the car is one of the above and the cdr is a function |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1017 to call when translating KEY (the return value is assigned to the |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1018 variable `quail-current-data'). If the cdr part is not a function, |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1019 the value itself is assigned to `quail-current-data'. |
17052 | 1020 In these cases, a key specific Quail map is generated and assigned to KEY. |
1021 | |
1022 If TRANSLATION is a Quail map or a function symbol which returns a Quail map, | |
1023 it is used to handle KEY. | |
23401
a83ca83c8626
(quail-defrule): New optional arg APPEND.
Kenichi Handa <handa@m17n.org>
parents:
23304
diff
changeset
|
1024 |
a83ca83c8626
(quail-defrule): New optional arg APPEND.
Kenichi Handa <handa@m17n.org>
parents:
23304
diff
changeset
|
1025 Optional 3rd argument NAME, if specified, says which Quail package |
17052 | 1026 to define this translation rule in. The default is to define it in the |
23401
a83ca83c8626
(quail-defrule): New optional arg APPEND.
Kenichi Handa <handa@m17n.org>
parents:
23304
diff
changeset
|
1027 current Quail package. |
a83ca83c8626
(quail-defrule): New optional arg APPEND.
Kenichi Handa <handa@m17n.org>
parents:
23304
diff
changeset
|
1028 |
a83ca83c8626
(quail-defrule): New optional arg APPEND.
Kenichi Handa <handa@m17n.org>
parents:
23304
diff
changeset
|
1029 Optional 4th argument APPEND, if non-nil, appends TRANSLATION |
a83ca83c8626
(quail-defrule): New optional arg APPEND.
Kenichi Handa <handa@m17n.org>
parents:
23304
diff
changeset
|
1030 to the current translations for KEY instead of replacing them." |
17052 | 1031 (if name |
1032 (let ((package (quail-package name))) | |
1033 (if (null package) | |
1034 (error "No Quail package `%s'" name)) | |
1035 (setq quail-current-package package))) | |
23401
a83ca83c8626
(quail-defrule): New optional arg APPEND.
Kenichi Handa <handa@m17n.org>
parents:
23304
diff
changeset
|
1036 (quail-defrule-internal key translation (quail-map) append)) |
17052 | 1037 |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1038 ;;;###autoload |
30656
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1039 (defun quail-defrule-internal (key trans map &optional append decode-map props) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1040 "Define KEY as TRANS in a Quail map MAP. |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1041 |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1042 If Optional 4th arg APPEND is non-nil, TRANS is appended to the |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1043 current translations for KEY instead of replacing them. |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1044 |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1045 Optional 5th arg DECODE-MAP is a Quail decode map. |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1046 |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1047 Optional 6th arg PROPS is a property list annotating TRANS. See the |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1048 function `quail-define-rules' for the detail." |
17052 | 1049 (if (null (stringp key)) |
1050 "Invalid Quail key `%s'" key) | |
1051 (if (not (or (numberp trans) (stringp trans) (vectorp trans) | |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1052 (consp trans) |
17052 | 1053 (symbolp trans) |
1054 (quail-map-p trans))) | |
1055 (error "Invalid Quail translation `%s'" trans)) | |
1056 (if (null (quail-map-p map)) | |
1057 (error "Invalid Quail map `%s'" map)) | |
1058 (let ((len (length key)) | |
1059 (idx 0) | |
1060 ch entry) | |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1061 ;; Make a map for registering TRANS if necessary. |
17052 | 1062 (while (< idx len) |
1063 (if (null (consp map)) | |
1064 ;; We come here, for example, when we try to define a rule | |
1065 ;; for "ABC" but a rule for "AB" is already defined as a | |
1066 ;; symbol. | |
1067 (error "Quail key %s is too long" key)) | |
1068 (setq ch (aref key idx) | |
1069 entry (assq ch (cdr map))) | |
1070 (if (null entry) | |
1071 (progn | |
1072 (setq entry (cons ch (list nil))) | |
1073 (setcdr map (cons entry (cdr map))))) | |
1074 (setq map (cdr entry)) | |
1075 (setq idx (1+ idx))) | |
1076 (if (symbolp trans) | |
1077 (if (cdr map) | |
1078 ;; We come here, for example, when we try to define a rule | |
1079 ;; for "AB" as a symbol but a rule for "ABC" is already | |
1080 ;; defined. | |
1081 (error "Quail key %s is too short" key) | |
1082 (setcdr entry trans)) | |
1083 (if (quail-map-p trans) | |
1084 (if (not (listp (cdr map))) | |
1085 ;; We come here, for example, when we try to define a rule | |
1086 ;; for "AB" as a symbol but a rule for "ABC" is already | |
1087 ;; defined. | |
1088 (error "Quail key %s is too short" key) | |
1089 (if (not (listp (cdr trans))) | |
1090 (if (cdr map) | |
1091 ;; We come here, for example, when we try to | |
1092 ;; define a rule for "AB" as a symbol but a rule | |
1093 ;; for "ABC" is already defined. | |
1094 (error "Quail key %s is too short" key) | |
1095 (setcdr entry trans)) | |
1096 (setcdr entry (append trans (cdr map))))) | |
30656
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1097 ;; If PROPS is non-nil or DECODE-MAP is non-nil, convert TRANS |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1098 ;; to a vector of strings, add PROPS to each string and record |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1099 ;; this rule in DECODE-MAP. |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1100 (when (and (or props decode-map) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1101 (not (consp trans)) (not (symbolp trans))) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1102 (if (integerp trans) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1103 (setq trans (vector trans)) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1104 (if (stringp trans) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1105 (setq trans (string-to-vector trans)))) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1106 (let ((len (length trans)) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1107 elt) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1108 (while (> len 0) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1109 (setq len (1- len)) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1110 (setq elt (aref trans len)) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1111 (if (integerp elt) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1112 (setq elt (char-to-string elt))) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1113 (aset trans len elt) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1114 (if props |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1115 (add-text-properties 0 (length elt) props elt)) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1116 (if decode-map |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1117 (setcdr decode-map |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1118 (cons (cons elt key) (cdr decode-map))))))) |
23401
a83ca83c8626
(quail-defrule): New optional arg APPEND.
Kenichi Handa <handa@m17n.org>
parents:
23304
diff
changeset
|
1119 (if (and (car map) append) |
a83ca83c8626
(quail-defrule): New optional arg APPEND.
Kenichi Handa <handa@m17n.org>
parents:
23304
diff
changeset
|
1120 (let ((prev (quail-get-translation (car map) key len))) |
a83ca83c8626
(quail-defrule): New optional arg APPEND.
Kenichi Handa <handa@m17n.org>
parents:
23304
diff
changeset
|
1121 (if (integerp prev) |
a83ca83c8626
(quail-defrule): New optional arg APPEND.
Kenichi Handa <handa@m17n.org>
parents:
23304
diff
changeset
|
1122 (setq prev (vector prev)) |
a83ca83c8626
(quail-defrule): New optional arg APPEND.
Kenichi Handa <handa@m17n.org>
parents:
23304
diff
changeset
|
1123 (setq prev (cdr prev))) |
a83ca83c8626
(quail-defrule): New optional arg APPEND.
Kenichi Handa <handa@m17n.org>
parents:
23304
diff
changeset
|
1124 (if (integerp trans) |
a83ca83c8626
(quail-defrule): New optional arg APPEND.
Kenichi Handa <handa@m17n.org>
parents:
23304
diff
changeset
|
1125 (setq trans (vector trans)) |
a83ca83c8626
(quail-defrule): New optional arg APPEND.
Kenichi Handa <handa@m17n.org>
parents:
23304
diff
changeset
|
1126 (if (stringp trans) |
a83ca83c8626
(quail-defrule): New optional arg APPEND.
Kenichi Handa <handa@m17n.org>
parents:
23304
diff
changeset
|
1127 (setq trans (string-to-vector trans)))) |
a83ca83c8626
(quail-defrule): New optional arg APPEND.
Kenichi Handa <handa@m17n.org>
parents:
23304
diff
changeset
|
1128 (setq trans |
a83ca83c8626
(quail-defrule): New optional arg APPEND.
Kenichi Handa <handa@m17n.org>
parents:
23304
diff
changeset
|
1129 (cons (list 0 0 0 0 nil) |
a83ca83c8626
(quail-defrule): New optional arg APPEND.
Kenichi Handa <handa@m17n.org>
parents:
23304
diff
changeset
|
1130 (vconcat prev trans))))) |
a83ca83c8626
(quail-defrule): New optional arg APPEND.
Kenichi Handa <handa@m17n.org>
parents:
23304
diff
changeset
|
1131 (setcar map trans))))) |
17052 | 1132 |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1133 (defun quail-get-translation (def key len) |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1134 "Return the translation specified as DEF for KEY of length LEN. |
17052 | 1135 The translation is either a character or a cons of the form (INDEX . VECTOR), |
1136 where VECTOR is a vector of candidates (character or string) for | |
1137 the translation, and INDEX points into VECTOR to specify the currently | |
1138 selected translation." | |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1139 (if (and def (symbolp def)) |
26891
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
1140 (if (functionp def) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
1141 ;; DEF is a symbol of a function which returns valid translation. |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
1142 (setq def (funcall def key len)) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
1143 (setq def nil))) |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1144 (if (and (consp def) (not (vectorp (cdr def)))) |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1145 (setq def (car def))) |
17052 | 1146 |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1147 (cond |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1148 ((or (integerp def) (consp def)) |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1149 def) |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1150 |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1151 ((null def) |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1152 ;; No translation. |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1153 nil) |
17052 | 1154 |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1155 ((stringp def) |
31424 | 1156 ;; If the length is 1, we don't need vector but a single candidate |
1157 ;; as the translation. | |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1158 (if (= (length def) 1) |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1159 (aref def 0) |
31424 | 1160 ;; Each character in DEF is a candidate of translation. Reform |
1161 ;; it as (INDICES . VECTOR). | |
1162 (cons (list 0 0 0 0 nil) (string-to-vector def)))) | |
17052 | 1163 |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1164 ((vectorp def) |
31424 | 1165 ;; If the length is 1, and the length of element string is 1, we |
1166 ;; don't need vector but a single candidate as the translation. | |
1167 (if (and (= (length def) 1) | |
1168 (= (length (aref def 0)) 1)) | |
1169 (aref (aref def 0) 0) | |
1170 ;; Each element (string or character) in DEF is a candidate of | |
1171 ;; translation. Reform it as (INDICES . VECTOR). | |
1172 (cons (list 0 0 0 0 nil) def))) | |
17052 | 1173 |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1174 (t |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1175 (error "Invalid object in Quail map: %s" def)))) |
17052 | 1176 |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1177 (defun quail-lookup-key (key &optional len) |
17052 | 1178 "Lookup KEY of length LEN in the current Quail map and return the definition. |
1179 The returned value is a Quail map specific to KEY." | |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1180 (or len |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1181 (setq len (length key))) |
17052 | 1182 (let ((idx 0) |
1183 (map (quail-map)) | |
1184 (kbd-translate (quail-kbd-translate)) | |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1185 slot ch translation def) |
17052 | 1186 (while (and map (< idx len)) |
1187 (setq ch (if kbd-translate (quail-keyboard-translate (aref key idx)) | |
1188 (aref key idx))) | |
1189 (setq idx (1+ idx)) | |
1190 (if (and (cdr map) (symbolp (cdr map))) | |
1191 (setcdr map (funcall (cdr map) key idx))) | |
1192 (setq slot (assq ch (cdr map))) | |
1193 (if (and (cdr slot) (symbolp (cdr slot))) | |
1194 (setcdr slot (funcall (cdr slot) key idx))) | |
1195 (setq map (cdr slot))) | |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1196 (setq def (car map)) |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1197 (setq quail-current-translations nil) |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1198 (if (and map (setq translation (quail-get-translation def key len))) |
17052 | 1199 (progn |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1200 (if (and (consp def) (not (vectorp (cdr def)))) |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1201 (progn |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1202 (if (not (equal (car def) translation)) |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1203 ;; We must reflect TRANSLATION to car part of DEF. |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1204 (setcar def translation)) |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1205 (setq quail-current-data |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1206 (if (functionp (cdr def)) |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1207 (funcall (cdr def)) |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1208 (cdr def)))) |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1209 (if (not (equal def translation)) |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1210 ;; We must reflect TRANSLATION to car part of MAP. |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1211 (setcar map translation))) |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
1212 (if (and (consp translation) (vectorp (cdr translation))) |
17052 | 1213 (progn |
1214 (setq quail-current-translations translation) | |
1215 (if (quail-forget-last-selection) | |
24238
20d23ea9713b
(quail-lookup-key): If cdr of MAP is a
Kenichi Handa <handa@m17n.org>
parents:
23887
diff
changeset
|
1216 (setcar (car quail-current-translations) 0)))))) |
20d23ea9713b
(quail-lookup-key): If cdr of MAP is a
Kenichi Handa <handa@m17n.org>
parents:
23887
diff
changeset
|
1217 ;; We may have to reform cdr part of MAP. |
20d23ea9713b
(quail-lookup-key): If cdr of MAP is a
Kenichi Handa <handa@m17n.org>
parents:
23887
diff
changeset
|
1218 (if (and (cdr map) (functionp (cdr map))) |
20d23ea9713b
(quail-lookup-key): If cdr of MAP is a
Kenichi Handa <handa@m17n.org>
parents:
23887
diff
changeset
|
1219 (setcdr map (funcall (cdr map) key len))) |
17052 | 1220 map)) |
1221 | |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1222 (put 'quail-error 'error-conditions '(quail-error error)) |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1223 (defun quail-error (&rest args) |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1224 (signal 'quail-error (apply 'format args))) |
17052 | 1225 |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1226 (defvar quail-translating nil) |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1227 (defvar quail-converting nil) |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1228 (defvar quail-conversion-str nil) |
18201
feea31893155
(quail-prefix-arg): New variable.
Kenichi Handa <handa@m17n.org>
parents:
17764
diff
changeset
|
1229 |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1230 (defun quail-input-method (key) |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1231 (if (or buffer-read-only |
22777
1b0761cbc15b
(quail-conversion-keymap): New binding
Kenichi Handa <handa@m17n.org>
parents:
22765
diff
changeset
|
1232 overriding-terminal-local-map |
1b0761cbc15b
(quail-conversion-keymap): New binding
Kenichi Handa <handa@m17n.org>
parents:
22765
diff
changeset
|
1233 overriding-local-map) |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1234 (list key) |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1235 (quail-setup-overlays (quail-conversion-keymap)) |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1236 (let ((modified-p (buffer-modified-p)) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1237 (buffer-undo-list t)) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1238 (or (and quail-guidance-win |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1239 (window-live-p quail-guidance-win) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1240 (eq (window-buffer quail-guidance-win) quail-guidance-buf) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1241 (not input-method-use-echo-area)) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1242 (quail-show-guidance-buf)) |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1243 (unwind-protect |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1244 (if (quail-conversion-keymap) |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1245 (quail-start-conversion key) |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1246 (quail-start-translation key)) |
22777
1b0761cbc15b
(quail-conversion-keymap): New binding
Kenichi Handa <handa@m17n.org>
parents:
22765
diff
changeset
|
1247 (quail-delete-overlays) |
1b0761cbc15b
(quail-conversion-keymap): New binding
Kenichi Handa <handa@m17n.org>
parents:
22765
diff
changeset
|
1248 (if (buffer-live-p quail-guidance-buf) |
1b0761cbc15b
(quail-conversion-keymap): New binding
Kenichi Handa <handa@m17n.org>
parents:
22765
diff
changeset
|
1249 (save-excursion |
1b0761cbc15b
(quail-conversion-keymap): New binding
Kenichi Handa <handa@m17n.org>
parents:
22765
diff
changeset
|
1250 (set-buffer quail-guidance-buf) |
1b0761cbc15b
(quail-conversion-keymap): New binding
Kenichi Handa <handa@m17n.org>
parents:
22765
diff
changeset
|
1251 (erase-buffer))) |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1252 (if input-method-use-echo-area |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1253 (quail-hide-guidance-buf)) |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1254 (set-buffer-modified-p modified-p) |
22777
1b0761cbc15b
(quail-conversion-keymap): New binding
Kenichi Handa <handa@m17n.org>
parents:
22765
diff
changeset
|
1255 ;; Run this hook only when the current input method doesn't require |
1b0761cbc15b
(quail-conversion-keymap): New binding
Kenichi Handa <handa@m17n.org>
parents:
22765
diff
changeset
|
1256 ;; conversion. When conversion is required, the conversion function |
1b0761cbc15b
(quail-conversion-keymap): New binding
Kenichi Handa <handa@m17n.org>
parents:
22765
diff
changeset
|
1257 ;; should run this hook at a proper timing. |
1b0761cbc15b
(quail-conversion-keymap): New binding
Kenichi Handa <handa@m17n.org>
parents:
22765
diff
changeset
|
1258 (unless (quail-conversion-keymap) |
1b0761cbc15b
(quail-conversion-keymap): New binding
Kenichi Handa <handa@m17n.org>
parents:
22765
diff
changeset
|
1259 (run-hooks 'input-method-after-insert-chunk-hook)))))) |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1260 |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1261 (defun quail-overlay-region-events (overlay) |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1262 (let ((start (overlay-start overlay)) |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1263 (end (overlay-end overlay))) |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1264 (if (< start end) |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1265 (prog1 |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1266 (string-to-list (buffer-substring start end)) |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1267 (delete-region start end))))) |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1268 |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1269 (defsubst quail-delete-region () |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1270 "Delete the text in the current translation region of Quail." |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1271 (if (overlay-start quail-overlay) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1272 (delete-region (overlay-start quail-overlay) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1273 (overlay-end quail-overlay)))) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1274 |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1275 (defun quail-start-translation (key) |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1276 "Start translation of the typed character KEY by the current Quail package." |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1277 ;; Check the possibility of translating KEY. |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1278 ;; If KEY is nil, we can anyway start translation. |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1279 (if (or (and (integerp key) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1280 (assq (if (quail-kbd-translate) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1281 (quail-keyboard-translate key) key) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1282 (cdr (quail-map)))) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1283 (null key)) |
23176 | 1284 ;; OK, we can start translation. |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1285 (let* ((echo-keystrokes 0) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1286 (help-char nil) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1287 (overriding-terminal-local-map (quail-translation-keymap)) |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1288 (generated-events nil) |
29145
79b2b42f9a7b
(quail-start-translation): Don't change
Kenichi Handa <handa@m17n.org>
parents:
29129
diff
changeset
|
1289 (input-method-function nil) |
79b2b42f9a7b
(quail-start-translation): Don't change
Kenichi Handa <handa@m17n.org>
parents:
29129
diff
changeset
|
1290 (modified-p (buffer-modified-p))) |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1291 (setq quail-current-key "" |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1292 quail-current-str "" |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1293 quail-translating t) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1294 (if key |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1295 (setq unread-command-events (cons key unread-command-events))) |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1296 (while quail-translating |
29145
79b2b42f9a7b
(quail-start-translation): Don't change
Kenichi Handa <handa@m17n.org>
parents:
29129
diff
changeset
|
1297 (set-buffer-modified-p modified-p) |
31217
8e8fa4dbc0bc
(quail-use-package): Hide "... loaded" message.
Kenichi Handa <handa@m17n.org>
parents:
30656
diff
changeset
|
1298 ;; Hide '... loaded' message. |
8e8fa4dbc0bc
(quail-use-package): Hide "... loaded" message.
Kenichi Handa <handa@m17n.org>
parents:
30656
diff
changeset
|
1299 (message nil) |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1300 (let* ((keyseq (read-key-sequence |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1301 (and input-method-use-echo-area |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1302 (concat input-method-previous-message |
23599
ab69e7987be0
(quail-start-translation): Handle
Kenichi Handa <handa@m17n.org>
parents:
23401
diff
changeset
|
1303 quail-current-str)) |
ab69e7987be0
(quail-start-translation): Handle
Kenichi Handa <handa@m17n.org>
parents:
23401
diff
changeset
|
1304 nil nil t)) |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1305 (cmd (lookup-key (quail-translation-keymap) keyseq))) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1306 (if (if key |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1307 (and (commandp cmd) (not (eq cmd 'quail-other-command))) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1308 (eq cmd 'quail-self-insert-command)) |
31284
599904d1058b
(quail-start-translation): Bind locally
Kenichi Handa <handa@m17n.org>
parents:
31247
diff
changeset
|
1309 (let ((last-command-event (aref keyseq (1- (length keyseq)))) |
599904d1058b
(quail-start-translation): Bind locally
Kenichi Handa <handa@m17n.org>
parents:
31247
diff
changeset
|
1310 (last-command this-command) |
599904d1058b
(quail-start-translation): Bind locally
Kenichi Handa <handa@m17n.org>
parents:
31247
diff
changeset
|
1311 (this-command cmd)) |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1312 (setq key t) |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1313 (condition-case err |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1314 (call-interactively cmd) |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1315 (quail-error (message "%s" (cdr err)) (beep)))) |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1316 ;; KEYSEQ is not defined in the translation keymap. |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1317 ;; Let's return the event(s) to the caller. |
26891
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
1318 (setq unread-command-events |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1319 (string-to-list (this-single-command-raw-keys))) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1320 (setq quail-translating nil)))) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1321 (quail-delete-region) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1322 (if (and quail-current-str (> (length quail-current-str) 0)) |
26891
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
1323 (let* ((len (length quail-current-str)) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
1324 (idx 0) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
1325 (val (find-composition 0 len quail-current-str)) |
30656
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1326 (advice (get-text-property idx 'advice quail-current-str)) |
26891
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
1327 char) |
30656
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1328 ;; If the selected input has `advice' function, generate |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1329 ;; a special event (quail-advice QUAIL-CURRENT-STR). |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1330 (if advice |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1331 (setq generated-events |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1332 (cons (list 'quail-advice quail-current-str) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
1333 generated-events))) |
26891
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
1334 ;; Push characters in quail-current-str one by one to |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
1335 ;; generated-events while interleaving it with a special |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
1336 ;; event (compose-last-chars LEN) at each composition |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
1337 ;; end. |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
1338 (while (<= idx len) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
1339 (when (and val (= idx (nth 1 val))) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
1340 (setq generated-events |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
1341 (cons (list 'compose-last-chars (- idx (car val))) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
1342 generated-events)) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
1343 (setq val (find-composition idx len quail-current-str))) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
1344 (when (< idx len) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
1345 (setq char (aref quail-current-str idx)) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
1346 (or enable-multibyte-characters |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
1347 (setq char (multibyte-char-to-unibyte char))) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
1348 (setq generated-events (cons char generated-events))) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
1349 (setq idx (1+ idx))) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
1350 ;; Reorder generated-events. |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
1351 (setq generated-events (nreverse generated-events)))) |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1352 (if (and input-method-exit-on-first-char generated-events) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1353 (list (car generated-events)) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1354 generated-events)) |
17052 | 1355 |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1356 ;; Since KEY doesn't start any translation, just return it. |
31828
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
1357 ;; But translate KEY if necessary. |
31584
a5e682286ab6
(quail-start-translation): Translate KEY if necessary even if it
Kenichi Handa <handa@m17n.org>
parents:
31549
diff
changeset
|
1358 (if (and (integerp key) |
a5e682286ab6
(quail-start-translation): Translate KEY if necessary even if it
Kenichi Handa <handa@m17n.org>
parents:
31549
diff
changeset
|
1359 (quail-kbd-translate)) |
a5e682286ab6
(quail-start-translation): Translate KEY if necessary even if it
Kenichi Handa <handa@m17n.org>
parents:
31549
diff
changeset
|
1360 (setq key (quail-keyboard-translate key))) |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1361 (list key))) |
17052 | 1362 |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1363 (defun quail-start-conversion (key) |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1364 "Start conversion of the typed character KEY by the current Quail package." |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1365 ;; Check the possibility of translating KEY. |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1366 ;; If KEY is nil, we can anyway start translation. |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1367 (if (or (and (integerp key) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1368 (assq (if (quail-kbd-translate) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1369 (quail-keyboard-translate key) key) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1370 (cdr (quail-map)))) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1371 (null key)) |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1372 ;; Ok, we can start translation and conversion. |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1373 (let* ((echo-keystrokes 0) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1374 (help-char nil) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1375 (overriding-terminal-local-map (quail-conversion-keymap)) |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1376 (generated-events nil) |
29145
79b2b42f9a7b
(quail-start-translation): Don't change
Kenichi Handa <handa@m17n.org>
parents:
29129
diff
changeset
|
1377 (input-method-function nil) |
79b2b42f9a7b
(quail-start-translation): Don't change
Kenichi Handa <handa@m17n.org>
parents:
29129
diff
changeset
|
1378 (modified-p (buffer-modified-p))) |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1379 (setq quail-current-key "" |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1380 quail-current-str "" |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1381 quail-translating t |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1382 quail-converting t |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1383 quail-conversion-str "") |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1384 (if key |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1385 (setq unread-command-events (cons key unread-command-events))) |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1386 (while quail-converting |
29145
79b2b42f9a7b
(quail-start-translation): Don't change
Kenichi Handa <handa@m17n.org>
parents:
29129
diff
changeset
|
1387 (set-buffer-modified-p modified-p) |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1388 (or quail-translating |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1389 (progn |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1390 (setq quail-current-key "" |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1391 quail-current-str "" |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1392 quail-translating t) |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1393 (quail-setup-overlays nil))) |
31217
8e8fa4dbc0bc
(quail-use-package): Hide "... loaded" message.
Kenichi Handa <handa@m17n.org>
parents:
30656
diff
changeset
|
1394 ;; Hide '... loaded' message. |
8e8fa4dbc0bc
(quail-use-package): Hide "... loaded" message.
Kenichi Handa <handa@m17n.org>
parents:
30656
diff
changeset
|
1395 (message nil) |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1396 (let* ((keyseq (read-key-sequence |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1397 (and input-method-use-echo-area |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1398 (concat input-method-previous-message |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1399 quail-conversion-str |
23599
ab69e7987be0
(quail-start-translation): Handle
Kenichi Handa <handa@m17n.org>
parents:
23401
diff
changeset
|
1400 quail-current-str)) |
ab69e7987be0
(quail-start-translation): Handle
Kenichi Handa <handa@m17n.org>
parents:
23401
diff
changeset
|
1401 nil nil t)) |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1402 (cmd (lookup-key (quail-conversion-keymap) keyseq))) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1403 (if (if key (commandp cmd) (eq cmd 'quail-self-insert-command)) |
31284
599904d1058b
(quail-start-translation): Bind locally
Kenichi Handa <handa@m17n.org>
parents:
31247
diff
changeset
|
1404 (let ((last-command-event (aref keyseq (1- (length keyseq)))) |
599904d1058b
(quail-start-translation): Bind locally
Kenichi Handa <handa@m17n.org>
parents:
31247
diff
changeset
|
1405 (last-command this-command) |
599904d1058b
(quail-start-translation): Bind locally
Kenichi Handa <handa@m17n.org>
parents:
31247
diff
changeset
|
1406 (this-command cmd)) |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1407 (setq key t) |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1408 (condition-case err |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1409 (call-interactively cmd) |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1410 (quail-error (message "%s" (cdr err)) (beep))) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1411 (or quail-translating |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1412 (progn |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1413 (if quail-current-str |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1414 (setq quail-conversion-str |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1415 (concat quail-conversion-str |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1416 (if (stringp quail-current-str) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1417 quail-current-str |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1418 (char-to-string quail-current-str))))) |
29326
44c929164604
(quail-start-conversion): Don't include
Kenichi Handa <handa@m17n.org>
parents:
29145
diff
changeset
|
1419 (if (or input-method-exit-on-first-char |
44c929164604
(quail-start-conversion): Don't include
Kenichi Handa <handa@m17n.org>
parents:
29145
diff
changeset
|
1420 (= (length quail-conversion-str) 0)) |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1421 (setq quail-converting nil))))) |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1422 ;; KEYSEQ is not defined in the conversion keymap. |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1423 ;; Let's return the event(s) to the caller. |
29326
44c929164604
(quail-start-conversion): Don't include
Kenichi Handa <handa@m17n.org>
parents:
29145
diff
changeset
|
1424 (setq unread-command-events |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1425 (string-to-list (this-single-command-raw-keys))) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1426 (setq quail-converting nil)))) |
22793
c3ab1de66dfc
(quail-simple-translation-keymap): Typo
Kenichi Handa <handa@m17n.org>
parents:
22777
diff
changeset
|
1427 (if (overlay-start quail-conv-overlay) |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1428 (delete-region (overlay-start quail-conv-overlay) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1429 (overlay-end quail-conv-overlay))) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1430 (if (> (length quail-conversion-str) 0) |
22793
c3ab1de66dfc
(quail-simple-translation-keymap): Typo
Kenichi Handa <handa@m17n.org>
parents:
22777
diff
changeset
|
1431 (setq generated-events |
29326
44c929164604
(quail-start-conversion): Don't include
Kenichi Handa <handa@m17n.org>
parents:
29145
diff
changeset
|
1432 (string-to-list |
44c929164604
(quail-start-conversion): Don't include
Kenichi Handa <handa@m17n.org>
parents:
29145
diff
changeset
|
1433 (if enable-multibyte-characters |
44c929164604
(quail-start-conversion): Don't include
Kenichi Handa <handa@m17n.org>
parents:
29145
diff
changeset
|
1434 quail-conversion-str |
44c929164604
(quail-start-conversion): Don't include
Kenichi Handa <handa@m17n.org>
parents:
29145
diff
changeset
|
1435 (string-make-unibyte quail-conversion-str))))) |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1436 (if (and input-method-exit-on-first-char generated-events) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1437 (list (car generated-events)) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1438 generated-events)) |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1439 |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1440 ;; Since KEY doesn't start any translation, just return it. |
31828
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
1441 ;; But translate KEY if necessary. |
31584
a5e682286ab6
(quail-start-translation): Translate KEY if necessary even if it
Kenichi Handa <handa@m17n.org>
parents:
31549
diff
changeset
|
1442 (if (and (integerp key) |
a5e682286ab6
(quail-start-translation): Translate KEY if necessary even if it
Kenichi Handa <handa@m17n.org>
parents:
31549
diff
changeset
|
1443 (quail-kbd-translate)) |
a5e682286ab6
(quail-start-translation): Translate KEY if necessary even if it
Kenichi Handa <handa@m17n.org>
parents:
31549
diff
changeset
|
1444 (setq key (quail-keyboard-translate key))) |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1445 (list key))) |
17052 | 1446 |
1447 (defun quail-terminate-translation () | |
19519
1c0ecc266e38
(quail-terminate-translation): Doc-string
Kenichi Handa <handa@m17n.org>
parents:
19453
diff
changeset
|
1448 "Terminate the translation of the current key." |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1449 (setq quail-translating nil) |
17052 | 1450 (if (buffer-live-p quail-guidance-buf) |
1451 (save-excursion | |
1452 (set-buffer quail-guidance-buf) | |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1453 (erase-buffer)))) |
17052 | 1454 |
1455 (defun quail-select-current () | |
31546
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
1456 "Accept the currently selected translation." |
17052 | 1457 (interactive) |
1458 (quail-terminate-translation)) | |
1459 | |
1460 ;; Update the current translation status according to CONTROL-FLAG. | |
1461 ;; If CONTROL-FLAG is integer value, it is the number of keys in the | |
1462 ;; head quail-current-key which can be translated. The remaining keys | |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1463 ;; are put back to unread-command-events to be handled again. If |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1464 ;; CONTROL-FLAG is t, terminate the translation for the whole keys in |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1465 ;; quail-current-key. If CONTROL-FLAG is nil, proceed the translation |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1466 ;; with more keys. |
17052 | 1467 |
1468 (defun quail-update-translation (control-flag) | |
1469 (let ((func (quail-update-translation-function))) | |
1470 (if func | |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1471 (setq control-flag (funcall func control-flag)) |
31828
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
1472 (cond ((numberp control-flag) |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
1473 (let ((len (length quail-current-key))) |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
1474 (if (= control-flag 0) |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
1475 (setq quail-current-str |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
1476 (if (quail-kbd-translate) |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
1477 (quail-keyseq-translate quail-current-key) |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
1478 quail-current-key))) |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
1479 (or input-method-exit-on-first-char |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
1480 (while (> len control-flag) |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
1481 (setq len (1- len)) |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
1482 (setq unread-command-events |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
1483 (cons (aref quail-current-key len) |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
1484 unread-command-events)))))) |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
1485 ((null control-flag) |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
1486 (unless quail-current-str |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
1487 (setq quail-current-str |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
1488 (if (quail-kbd-translate) |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
1489 (quail-keyseq-translate quail-current-key) |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
1490 quail-current-key)) |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
1491 (if (and input-method-exit-on-first-char |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
1492 (quail-simple)) |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
1493 (setq control-flag t))))))) |
23304
3a7a029df593
(quail-update-guidance): Check for the
Kenichi Handa <handa@m17n.org>
parents:
23176
diff
changeset
|
1494 (or input-method-use-echo-area |
3a7a029df593
(quail-update-guidance): Check for the
Kenichi Handa <handa@m17n.org>
parents:
23176
diff
changeset
|
1495 (progn |
3a7a029df593
(quail-update-guidance): Check for the
Kenichi Handa <handa@m17n.org>
parents:
23176
diff
changeset
|
1496 (quail-delete-region) |
3a7a029df593
(quail-update-guidance): Check for the
Kenichi Handa <handa@m17n.org>
parents:
23176
diff
changeset
|
1497 (insert quail-current-str))) |
3a7a029df593
(quail-update-guidance): Check for the
Kenichi Handa <handa@m17n.org>
parents:
23176
diff
changeset
|
1498 (let (quail-current-str) |
3a7a029df593
(quail-update-guidance): Check for the
Kenichi Handa <handa@m17n.org>
parents:
23176
diff
changeset
|
1499 (quail-update-guidance)) |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1500 (or (stringp quail-current-str) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1501 (setq quail-current-str (char-to-string quail-current-str))) |
19432
4492653b04e8
(quail-exit-from-minibuffer): Call
Kenichi Handa <handa@m17n.org>
parents:
19404
diff
changeset
|
1502 (if control-flag |
4492653b04e8
(quail-exit-from-minibuffer): Call
Kenichi Handa <handa@m17n.org>
parents:
19404
diff
changeset
|
1503 (quail-terminate-translation))) |
17052 | 1504 |
1505 (defun quail-self-insert-command () | |
31286
62621544edd2
(quail-self-insert-command): Fix docstring.
Kenichi Handa <handa@m17n.org>
parents:
31284
diff
changeset
|
1506 "Translate the typed key by the current Quail map, and insert." |
17052 | 1507 (interactive "*") |
1508 (setq quail-current-key | |
1509 (concat quail-current-key (char-to-string last-command-event))) | |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1510 (or (catch 'quail-tag |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1511 (quail-update-translation (quail-translate-key)) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1512 t) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1513 ;; If someone throws for `quail-tag' by value nil, we exit from |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1514 ;; translation mode. |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1515 (setq quail-translating nil))) |
17052 | 1516 |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1517 ;; Return the actual definition part of Quail map MAP. |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1518 (defun quail-map-definition (map) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1519 (let ((def (car map))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1520 (if (and (consp def) (not (vectorp (cdr def)))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1521 (setq def (car def))) |
26891
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
1522 (if (eq def t) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
1523 (setq def nil)) |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1524 def)) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1525 |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1526 ;; Return a string to be shown as the current translation of key |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1527 ;; sequence of length LEN. DEF is a definition part of Quail map for |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1528 ;; the sequence. |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1529 (defun quail-get-current-str (len def) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1530 (or (and (consp def) (aref (cdr def) (car (car def)))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1531 def |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1532 (and (> len 1) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1533 (let ((str (quail-get-current-str |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1534 (1- len) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1535 (quail-map-definition (quail-lookup-key |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1536 quail-current-key (1- len)))))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1537 (if str |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1538 (concat (if (stringp str) str (char-to-string str)) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1539 (substring quail-current-key (1- len) len))))))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1540 |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1541 (defvar quail-guidance-translations-starting-column 20) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1542 |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1543 ;; Update `quail-current-translations' to make RELATIVE-INDEX the |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1544 ;; current translation. |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1545 (defun quail-update-current-translations (&optional relative-index) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1546 (let* ((indices (car quail-current-translations)) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1547 (cur (car indices)) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1548 (start (nth 1 indices)) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1549 (end (nth 2 indices))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1550 ;; Validate the index number of current translation. |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1551 (if (< cur 0) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1552 (setcar indices (setq cur 0)) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1553 (if (>= cur (length (cdr quail-current-translations))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1554 (setcar indices |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1555 (setq cur (1- (length (cdr quail-current-translations))))))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1556 |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1557 (if (or (null end) ; We have not yet calculated END. |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1558 (< cur start) ; We moved to the previous block. |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1559 (>= cur end)) ; We moved to the next block. |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1560 (let ((len (length (cdr quail-current-translations))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1561 (maxcol (- (window-width quail-guidance-win) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1562 quail-guidance-translations-starting-column)) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1563 (block (nth 3 indices)) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1564 col idx width trans num-items blocks) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1565 (if (< cur start) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1566 ;; We must calculate from the head. |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1567 (setq start 0 block 0) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1568 (if end ; i.e. (>= cur end) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1569 (setq start end))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1570 (setq idx start col 0 end start num-items 0) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1571 ;; Loop until we hit the tail, or reach the block of CUR. |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1572 (while (and (< idx len) (>= cur end)) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1573 (if (= num-items 0) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1574 (setq start idx col 0 block (1+ block))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1575 (setq trans (aref (cdr quail-current-translations) idx)) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1576 (setq width (if (integerp trans) (char-width trans) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1577 (string-width trans))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1578 (setq col (+ col width 3) num-items (1+ num-items)) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1579 (if (and (> num-items 0) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1580 (or (>= col maxcol) (> num-items 10))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1581 (setq end idx num-items 0) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1582 (setq idx (1+ idx)))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1583 (setcar (nthcdr 3 indices) block) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1584 (if (>= idx len) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1585 (progn |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1586 ;; We hit the tail before reaching MAXCOL. |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1587 (setq end idx) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1588 (setcar (nthcdr 4 indices) block))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1589 (setcar (cdr indices) start) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1590 (setcar (nthcdr 2 indices) end))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1591 (if relative-index |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1592 (if (>= (+ start relative-index) end) |
31424 | 1593 (setcar indices (1- end)) |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1594 (setcar indices (+ start relative-index)))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1595 (setq quail-current-str |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1596 (aref (cdr quail-current-translations) (car indices))) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1597 (or (stringp quail-current-str) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1598 (setq quail-current-str (char-to-string quail-current-str))))) |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1599 |
17052 | 1600 (defun quail-translate-key () |
1601 "Translate the current key sequence according to the current Quail map. | |
1602 Return t if we can terminate the translation. | |
1603 Return nil if the current key sequence may be followed by more keys. | |
1604 Return number if we can't find any translation for the current key | |
1605 sequence. The number is the count of valid keys in the current | |
1606 sequence counting from the head." | |
1607 (let* ((len (length quail-current-key)) | |
1608 (map (quail-lookup-key quail-current-key len)) | |
1609 def ch) | |
1610 (if map | |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1611 (let ((def (quail-map-definition map))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1612 (setq quail-current-str (quail-get-current-str len def)) |
17052 | 1613 ;; Return t only if we can terminate the current translation. |
1614 (and | |
1615 ;; No alternative translations. | |
1616 (or (null (consp def)) (= (length (cdr def)) 1)) | |
1617 ;; No translation for the longer key. | |
1618 (null (cdr map)) | |
1619 ;; No shorter breaking point. | |
1620 (or (null (quail-maximum-shortest)) | |
1621 (< len 3) | |
1622 (null (quail-lookup-key quail-current-key (1- len))) | |
1623 (null (quail-lookup-key | |
1624 (substring quail-current-key -2 -1) 1))))) | |
1625 | |
1626 ;; There's no translation for the current key sequence. Before | |
1627 ;; giving up, we must check two possibilities. | |
1628 (cond ((and | |
1629 (quail-maximum-shortest) | |
1630 (>= len 4) | |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1631 (setq def (quail-map-definition |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1632 (quail-lookup-key quail-current-key (- len 2)))) |
17052 | 1633 (quail-lookup-key (substring quail-current-key -2) 2)) |
1634 ;; Now the sequence is "...ABCD", which can be split into | |
1635 ;; "...AB" and "CD..." to get valid translation. | |
1636 ;; At first, get translation of "...AB". | |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1637 (setq quail-current-str (quail-get-current-str (- len 2) def)) |
17052 | 1638 ;; Then, return the length of "...AB". |
1639 (- len 2)) | |
1640 | |
18797
e9aa787f0154
(quail-translate-key): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
18642
diff
changeset
|
1641 ((and (> len 0) |
e9aa787f0154
(quail-translate-key): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
18642
diff
changeset
|
1642 (quail-lookup-key (substring quail-current-key 0 -1)) |
e9aa787f0154
(quail-translate-key): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
18642
diff
changeset
|
1643 quail-current-translations |
17052 | 1644 (not (quail-deterministic)) |
1645 (setq ch (aref quail-current-key (1- len))) | |
1646 (>= ch ?0) (<= ch ?9)) | |
1647 ;; A numeric key is entered to select a desirable translation. | |
1648 (setq quail-current-key (substring quail-current-key 0 -1)) | |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1649 ;; We treat key 1,2..,9,0 as specifying 0,1,..8,9. |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1650 (setq ch (if (= ch ?0) 9 (- ch ?1))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1651 (quail-update-current-translations ch) |
17052 | 1652 ;; And, we can terminate the current translation. |
1653 t) | |
1654 | |
1655 (t | |
1656 ;; No way to handle the last character in this context. | |
1657 (1- len)))))) | |
1658 | |
1659 (defun quail-next-translation () | |
1660 "Select next translation in the current batch of candidates." | |
1661 (interactive) | |
1662 (if quail-current-translations | |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1663 (let ((indices (car quail-current-translations))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1664 (if (= (1+ (car indices)) (length (cdr quail-current-translations))) |
19084
9f4b95f30c4f
(quail-next-translation): Call
Kenichi Handa <handa@m17n.org>
parents:
18983
diff
changeset
|
1665 ;; We are already at the tail. |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1666 (beep) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1667 (setcar indices (1+ (car indices))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1668 (quail-update-current-translations) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1669 (quail-update-translation nil))) |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1670 (setq unread-command-events |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1671 (cons last-command-event unread-command-events)) |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1672 (quail-terminate-translation))) |
17052 | 1673 |
1674 (defun quail-prev-translation () | |
1675 "Select previous translation in the current batch of candidates." | |
1676 (interactive) | |
1677 (if quail-current-translations | |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1678 (let ((indices (car quail-current-translations))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1679 (if (= (car indices) 0) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1680 ;; We are already at the head. |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1681 (beep) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1682 (setcar indices (1- (car indices))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1683 (quail-update-current-translations) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1684 (quail-update-translation nil))) |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1685 (setq unread-command-events |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1686 (cons last-command-event unread-command-events)) |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1687 (quail-terminate-translation))) |
17052 | 1688 |
1689 (defun quail-next-translation-block () | |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1690 "Select from the next block of translations." |
17052 | 1691 (interactive) |
1692 (if quail-current-translations | |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1693 (let* ((indices (car quail-current-translations)) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1694 (offset (- (car indices) (nth 1 indices)))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1695 (if (>= (nth 2 indices) (length (cdr quail-current-translations))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1696 ;; We are already at the last block. |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1697 (beep) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1698 (setcar indices (+ (nth 2 indices) offset)) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1699 (quail-update-current-translations) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1700 (quail-update-translation nil))) |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1701 (setq unread-command-events |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1702 (cons last-command-event unread-command-events)) |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1703 (quail-terminate-translation))) |
17052 | 1704 |
1705 (defun quail-prev-translation-block () | |
1706 "Select the previous batch of 10 translation candidates." | |
1707 (interactive) | |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1708 (if quail-current-translations |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1709 (let* ((indices (car quail-current-translations)) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1710 (offset (- (car indices) (nth 1 indices)))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1711 (if (= (nth 1 indices) 0) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1712 ;; We are already at the first block. |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1713 (beep) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1714 (setcar indices (1- (nth 1 indices))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1715 (quail-update-current-translations) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1716 (if (< (+ (nth 1 indices) offset) (nth 2 indices)) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1717 (progn |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1718 (setcar indices (+ (nth 1 indices) offset)) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1719 (quail-update-current-translations))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1720 (quail-update-translation nil))) |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1721 (setq unread-command-events |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1722 (cons last-command-event unread-command-events)) |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1723 (quail-terminate-translation))) |
17052 | 1724 |
1725 (defun quail-abort-translation () | |
1726 "Abort translation and delete the current Quail key sequence." | |
1727 (interactive) | |
1728 (quail-delete-region) | |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1729 (setq quail-current-str nil) |
17052 | 1730 (quail-terminate-translation)) |
1731 | |
1732 (defun quail-delete-last-char () | |
1733 "Delete the last input character from the current Quail key sequence." | |
1734 (interactive) | |
1735 (if (= (length quail-current-key) 1) | |
1736 (quail-abort-translation) | |
1737 (setq quail-current-key (substring quail-current-key 0 -1)) | |
26891
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
1738 (quail-delete-region) |
17052 | 1739 (quail-update-translation (quail-translate-key)))) |
1740 | |
1741 ;; For conversion mode. | |
1742 | |
23887
3a4d3e2418dc
(quail-point-in-conversion-region): New
Kenichi Handa <handa@m17n.org>
parents:
23629
diff
changeset
|
1743 (defsubst quail-point-in-conversion-region () |
3a4d3e2418dc
(quail-point-in-conversion-region): New
Kenichi Handa <handa@m17n.org>
parents:
23629
diff
changeset
|
1744 "Return non-nil value if the point is in conversion region of Quail mode." |
3a4d3e2418dc
(quail-point-in-conversion-region): New
Kenichi Handa <handa@m17n.org>
parents:
23629
diff
changeset
|
1745 (let (start pos) |
3a4d3e2418dc
(quail-point-in-conversion-region): New
Kenichi Handa <handa@m17n.org>
parents:
23629
diff
changeset
|
1746 (and (setq start (overlay-start quail-conv-overlay)) |
3a4d3e2418dc
(quail-point-in-conversion-region): New
Kenichi Handa <handa@m17n.org>
parents:
23629
diff
changeset
|
1747 (>= (setq pos (point)) start) |
3a4d3e2418dc
(quail-point-in-conversion-region): New
Kenichi Handa <handa@m17n.org>
parents:
23629
diff
changeset
|
1748 (<= pos (overlay-end quail-conv-overlay))))) |
3a4d3e2418dc
(quail-point-in-conversion-region): New
Kenichi Handa <handa@m17n.org>
parents:
23629
diff
changeset
|
1749 |
17052 | 1750 (defun quail-conversion-backward-char () |
1751 (interactive) | |
1752 (if (<= (point) (overlay-start quail-conv-overlay)) | |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1753 (quail-error "Beginning of conversion region")) |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1754 (setq quail-translating nil) |
17052 | 1755 (forward-char -1)) |
1756 | |
1757 (defun quail-conversion-forward-char () | |
1758 (interactive) | |
1759 (if (>= (point) (overlay-end quail-conv-overlay)) | |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1760 (quail-error "End of conversion region")) |
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1761 (setq quail-translating nil) |
17052 | 1762 (forward-char 1)) |
1763 | |
1764 (defun quail-conversion-beginning-of-region () | |
1765 (interactive) | |
22777
1b0761cbc15b
(quail-conversion-keymap): New binding
Kenichi Handa <handa@m17n.org>
parents:
22765
diff
changeset
|
1766 (setq quail-translating nil) |
17052 | 1767 (goto-char (overlay-start quail-conv-overlay))) |
1768 | |
1769 (defun quail-conversion-end-of-region () | |
1770 (interactive) | |
22777
1b0761cbc15b
(quail-conversion-keymap): New binding
Kenichi Handa <handa@m17n.org>
parents:
22765
diff
changeset
|
1771 (setq quail-translating nil) |
17052 | 1772 (goto-char (overlay-end quail-conv-overlay))) |
1773 | |
1774 (defun quail-conversion-delete-char () | |
1775 (interactive) | |
22777
1b0761cbc15b
(quail-conversion-keymap): New binding
Kenichi Handa <handa@m17n.org>
parents:
22765
diff
changeset
|
1776 (setq quail-translating nil) |
17052 | 1777 (if (>= (point) (overlay-end quail-conv-overlay)) |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
1778 (quail-error "End of conversion region")) |
17052 | 1779 (delete-char 1) |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1780 (let ((start (overlay-start quail-conv-overlay)) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1781 (end (overlay-end quail-conv-overlay))) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1782 (setq quail-conversion-str (buffer-substring start end)) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1783 (if (= start end) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1784 (setq quail-converting nil)))) |
17052 | 1785 |
22777
1b0761cbc15b
(quail-conversion-keymap): New binding
Kenichi Handa <handa@m17n.org>
parents:
22765
diff
changeset
|
1786 (defun quail-conversion-delete-tail () |
1b0761cbc15b
(quail-conversion-keymap): New binding
Kenichi Handa <handa@m17n.org>
parents:
22765
diff
changeset
|
1787 (interactive) |
1b0761cbc15b
(quail-conversion-keymap): New binding
Kenichi Handa <handa@m17n.org>
parents:
22765
diff
changeset
|
1788 (if (>= (point) (overlay-end quail-conv-overlay)) |
1b0761cbc15b
(quail-conversion-keymap): New binding
Kenichi Handa <handa@m17n.org>
parents:
22765
diff
changeset
|
1789 (quail-error "End of conversion region")) |
1b0761cbc15b
(quail-conversion-keymap): New binding
Kenichi Handa <handa@m17n.org>
parents:
22765
diff
changeset
|
1790 (delete-region (point) (overlay-end quail-conv-overlay)) |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1791 (let ((start (overlay-start quail-conv-overlay)) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1792 (end (overlay-end quail-conv-overlay))) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1793 (setq quail-conversion-str (buffer-substring start end)) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1794 (if (= start end) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1795 (setq quail-converting nil)))) |
22777
1b0761cbc15b
(quail-conversion-keymap): New binding
Kenichi Handa <handa@m17n.org>
parents:
22765
diff
changeset
|
1796 |
17052 | 1797 (defun quail-conversion-backward-delete-char () |
1798 (interactive) | |
23887
3a4d3e2418dc
(quail-point-in-conversion-region): New
Kenichi Handa <handa@m17n.org>
parents:
23629
diff
changeset
|
1799 (if (> (length quail-current-key) 0) |
3a4d3e2418dc
(quail-point-in-conversion-region): New
Kenichi Handa <handa@m17n.org>
parents:
23629
diff
changeset
|
1800 (quail-delete-last-char) |
3a4d3e2418dc
(quail-point-in-conversion-region): New
Kenichi Handa <handa@m17n.org>
parents:
23629
diff
changeset
|
1801 (if (<= (point) (overlay-start quail-conv-overlay)) |
3a4d3e2418dc
(quail-point-in-conversion-region): New
Kenichi Handa <handa@m17n.org>
parents:
23629
diff
changeset
|
1802 (quail-error "Beginning of conversion region")) |
3a4d3e2418dc
(quail-point-in-conversion-region): New
Kenichi Handa <handa@m17n.org>
parents:
23629
diff
changeset
|
1803 (delete-char -1) |
3a4d3e2418dc
(quail-point-in-conversion-region): New
Kenichi Handa <handa@m17n.org>
parents:
23629
diff
changeset
|
1804 (let ((start (overlay-start quail-conv-overlay)) |
3a4d3e2418dc
(quail-point-in-conversion-region): New
Kenichi Handa <handa@m17n.org>
parents:
23629
diff
changeset
|
1805 (end (overlay-end quail-conv-overlay))) |
3a4d3e2418dc
(quail-point-in-conversion-region): New
Kenichi Handa <handa@m17n.org>
parents:
23629
diff
changeset
|
1806 (setq quail-conversion-str (buffer-substring start end)) |
3a4d3e2418dc
(quail-point-in-conversion-region): New
Kenichi Handa <handa@m17n.org>
parents:
23629
diff
changeset
|
1807 (if (= start end) |
3a4d3e2418dc
(quail-point-in-conversion-region): New
Kenichi Handa <handa@m17n.org>
parents:
23629
diff
changeset
|
1808 (setq quail-converting nil))))) |
17052 | 1809 |
1810 (defun quail-do-conversion (func &rest args) | |
1811 "Call FUNC to convert text in the current conversion region of Quail. | |
1812 Remaining args are for FUNC." | |
1813 (delete-overlay quail-overlay) | |
1814 (apply func args)) | |
1815 | |
1816 (defun quail-no-conversion () | |
1817 "Do no conversion of the current conversion region of Quail." | |
1818 (interactive) | |
22777
1b0761cbc15b
(quail-conversion-keymap): New binding
Kenichi Handa <handa@m17n.org>
parents:
22765
diff
changeset
|
1819 (setq quail-converting nil)) |
17052 | 1820 |
1821 ;; Guidance, Completion, and Help buffer handlers. | |
1822 | |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1823 ;; Make a new one-line frame for Quail guidance buffer. |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1824 (defun quail-make-guidance-frame (buf) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1825 (let* ((fparam (frame-parameters)) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1826 (top (cdr (assq 'top fparam))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1827 (border (cdr (assq 'border-width fparam))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1828 (internal-border (cdr (assq 'internal-border-width fparam))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1829 (newtop (- top |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1830 (frame-char-height) (* internal-border 2) (* border 2)))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1831 (if (< newtop 0) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1832 (setq newtop (+ top (frame-pixel-height)))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1833 (let* ((frame (make-frame (append '((user-position . t) (height . 1) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1834 (minibuffer) (menu-bar-lines . 0)) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1835 (cons (cons 'top newtop) fparam)))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1836 (win (frame-first-window frame))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1837 (set-window-buffer win buf) |
19878
a69ae37e6932
(quail-update-translation): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
19849
diff
changeset
|
1838 ;;(set-window-dedicated-p win t) |
a69ae37e6932
(quail-update-translation): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
19849
diff
changeset
|
1839 ))) |
17052 | 1840 |
19432
4492653b04e8
(quail-exit-from-minibuffer): Call
Kenichi Handa <handa@m17n.org>
parents:
19404
diff
changeset
|
1841 ;; Setup Quail completion buffer. |
4492653b04e8
(quail-exit-from-minibuffer): Call
Kenichi Handa <handa@m17n.org>
parents:
19404
diff
changeset
|
1842 (defun quail-setup-completion-buf () |
4492653b04e8
(quail-exit-from-minibuffer): Call
Kenichi Handa <handa@m17n.org>
parents:
19404
diff
changeset
|
1843 (unless (buffer-live-p quail-completion-buf) |
4492653b04e8
(quail-exit-from-minibuffer): Call
Kenichi Handa <handa@m17n.org>
parents:
19404
diff
changeset
|
1844 (setq quail-completion-buf (get-buffer-create "*Quail Completions*")) |
4492653b04e8
(quail-exit-from-minibuffer): Call
Kenichi Handa <handa@m17n.org>
parents:
19404
diff
changeset
|
1845 (save-excursion |
4492653b04e8
(quail-exit-from-minibuffer): Call
Kenichi Handa <handa@m17n.org>
parents:
19404
diff
changeset
|
1846 (set-buffer quail-completion-buf) |
4492653b04e8
(quail-exit-from-minibuffer): Call
Kenichi Handa <handa@m17n.org>
parents:
19404
diff
changeset
|
1847 (setq quail-overlay (make-overlay 1 1)) |
4492653b04e8
(quail-exit-from-minibuffer): Call
Kenichi Handa <handa@m17n.org>
parents:
19404
diff
changeset
|
1848 (overlay-put quail-overlay 'face 'highlight)))) |
4492653b04e8
(quail-exit-from-minibuffer): Call
Kenichi Handa <handa@m17n.org>
parents:
19404
diff
changeset
|
1849 |
19849
1c5164d81426
(quail-simple): New function.
Kenichi Handa <handa@m17n.org>
parents:
19844
diff
changeset
|
1850 ;; Return t iff the current Quail package requires showing guidance |
1c5164d81426
(quail-simple): New function.
Kenichi Handa <handa@m17n.org>
parents:
19844
diff
changeset
|
1851 ;; buffer. |
1c5164d81426
(quail-simple): New function.
Kenichi Handa <handa@m17n.org>
parents:
19844
diff
changeset
|
1852 (defun quail-require-guidance-buf () |
1c5164d81426
(quail-simple): New function.
Kenichi Handa <handa@m17n.org>
parents:
19844
diff
changeset
|
1853 (and input-method-verbose-flag |
20160
b8234ea503cd
(quail-require-guidance-buf): Adjusted
Kenichi Handa <handa@m17n.org>
parents:
19987
diff
changeset
|
1854 (if (eq input-method-verbose-flag 'default) |
b8234ea503cd
(quail-require-guidance-buf): Adjusted
Kenichi Handa <handa@m17n.org>
parents:
19987
diff
changeset
|
1855 (not (and (eq (selected-window) (minibuffer-window)) |
b8234ea503cd
(quail-require-guidance-buf): Adjusted
Kenichi Handa <handa@m17n.org>
parents:
19987
diff
changeset
|
1856 (quail-simple))) |
b8234ea503cd
(quail-require-guidance-buf): Adjusted
Kenichi Handa <handa@m17n.org>
parents:
19987
diff
changeset
|
1857 (if (eq input-method-verbose-flag 'complex-only) |
b8234ea503cd
(quail-require-guidance-buf): Adjusted
Kenichi Handa <handa@m17n.org>
parents:
19987
diff
changeset
|
1858 (not (quail-simple)) |
b8234ea503cd
(quail-require-guidance-buf): Adjusted
Kenichi Handa <handa@m17n.org>
parents:
19987
diff
changeset
|
1859 t)))) |
19849
1c5164d81426
(quail-simple): New function.
Kenichi Handa <handa@m17n.org>
parents:
19844
diff
changeset
|
1860 |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1861 (defun quail-show-guidance-buf () |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1862 "Display a guidance buffer for Quail input method in some window. |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1863 Create the buffer if it does not exist yet. |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1864 The buffer is normally displayed at the echo area, |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1865 but if the current buffer is a minibuffer, it is shown in |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1866 the bottom-most ordinary window of the same frame, |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1867 or in a newly created frame (if the selected frame has no other windows)." |
19849
1c5164d81426
(quail-simple): New function.
Kenichi Handa <handa@m17n.org>
parents:
19844
diff
changeset
|
1868 (when (quail-require-guidance-buf) |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1869 ;; At first, setup a guidance buffer. |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1870 (or (buffer-live-p quail-guidance-buf) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1871 (setq quail-guidance-buf (generate-new-buffer " *Quail-guidance*"))) |
29129
1fad86b8adfc
(quail-show-guidance-buf): Set
Kenichi Handa <handa@m17n.org>
parents:
29073
diff
changeset
|
1872 (let ((name (quail-name)) |
1fad86b8adfc
(quail-show-guidance-buf): Set
Kenichi Handa <handa@m17n.org>
parents:
29073
diff
changeset
|
1873 (title (quail-title))) |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1874 (save-excursion |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1875 (set-buffer quail-guidance-buf) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1876 ;; To show the title of Quail package. |
29129
1fad86b8adfc
(quail-show-guidance-buf): Set
Kenichi Handa <handa@m17n.org>
parents:
29073
diff
changeset
|
1877 (setq current-input-method name |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1878 current-input-method-title title) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1879 (erase-buffer) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1880 (or (overlayp quail-overlay) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1881 (progn |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1882 (setq quail-overlay (make-overlay 1 1)) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1883 (overlay-put quail-overlay 'face 'highlight))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1884 (delete-overlay quail-overlay) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1885 (set-buffer-modified-p nil))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1886 (bury-buffer quail-guidance-buf) |
17052 | 1887 |
23599
ab69e7987be0
(quail-start-translation): Handle
Kenichi Handa <handa@m17n.org>
parents:
23401
diff
changeset
|
1888 ;; Assign the buffer " *Minibuf-N*" to all windows which are now |
ab69e7987be0
(quail-start-translation): Handle
Kenichi Handa <handa@m17n.org>
parents:
23401
diff
changeset
|
1889 ;; displaying quail-guidance-buf. |
ab69e7987be0
(quail-start-translation): Handle
Kenichi Handa <handa@m17n.org>
parents:
23401
diff
changeset
|
1890 (let ((win-list (get-buffer-window-list quail-guidance-buf t t))) |
ab69e7987be0
(quail-start-translation): Handle
Kenichi Handa <handa@m17n.org>
parents:
23401
diff
changeset
|
1891 (while win-list |
ab69e7987be0
(quail-start-translation): Handle
Kenichi Handa <handa@m17n.org>
parents:
23401
diff
changeset
|
1892 (set-window-buffer (car win-list) |
ab69e7987be0
(quail-start-translation): Handle
Kenichi Handa <handa@m17n.org>
parents:
23401
diff
changeset
|
1893 (format " *Minibuf-%d*" (minibuffer-depth))) |
ab69e7987be0
(quail-start-translation): Handle
Kenichi Handa <handa@m17n.org>
parents:
23401
diff
changeset
|
1894 (setq win-list (cdr win-list)))) |
ab69e7987be0
(quail-start-translation): Handle
Kenichi Handa <handa@m17n.org>
parents:
23401
diff
changeset
|
1895 |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1896 ;; Then, display it in an appropriate window. |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1897 (let ((win (minibuffer-window))) |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1898 (if (or (eq (selected-window) win) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
1899 input-method-use-echo-area) |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1900 ;; Since we are in minibuffer, we can't use it for guidance. |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1901 (if (eq win (frame-root-window)) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1902 ;; Create a frame. It is sure that we are using some |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1903 ;; window system. |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1904 (quail-make-guidance-frame quail-guidance-buf) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1905 ;; Find the bottom window and split it if necessary. |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1906 (let (height) |
29690
a81355bcaaeb
(quail-show-guidance-buf): To find the bottom window (but minibuffer),
Kenichi Handa <handa@m17n.org>
parents:
29326
diff
changeset
|
1907 (setq win (window-at |
a81355bcaaeb
(quail-show-guidance-buf): To find the bottom window (but minibuffer),
Kenichi Handa <handa@m17n.org>
parents:
29326
diff
changeset
|
1908 0 (1- (- (frame-height) (window-height win))))) |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1909 (setq height (window-height win)) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1910 ;; If WIN is tall enough, split it vertically and use |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1911 ;; the lower one. |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1912 (if (>= height 4) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1913 (let ((window-min-height 2)) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1914 ;; Here, `split-window' returns a lower window |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1915 ;; which is what we wanted. |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1916 (setq win (split-window win (- height 2))))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1917 (set-window-buffer win quail-guidance-buf) |
19878
a69ae37e6932
(quail-update-translation): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
19849
diff
changeset
|
1918 ;;(set-window-dedicated-p win t) |
a69ae37e6932
(quail-update-translation): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
19849
diff
changeset
|
1919 )) |
23629
ab6b58c72a04
(quail-show-guidance-buf): Call
Kenichi Handa <handa@m17n.org>
parents:
23599
diff
changeset
|
1920 (set-window-buffer win quail-guidance-buf) |
ab6b58c72a04
(quail-show-guidance-buf): Call
Kenichi Handa <handa@m17n.org>
parents:
23599
diff
changeset
|
1921 (set-minibuffer-window win)) |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1922 (setq quail-guidance-win win))) |
17052 | 1923 |
1924 ;; And, create a buffer for completion. | |
19432
4492653b04e8
(quail-exit-from-minibuffer): Call
Kenichi Handa <handa@m17n.org>
parents:
19404
diff
changeset
|
1925 (quail-setup-completion-buf) |
17052 | 1926 (bury-buffer quail-completion-buf)) |
1927 | |
1928 (defun quail-hide-guidance-buf () | |
1929 "Hide the Quail guidance buffer." | |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1930 (if (buffer-live-p quail-guidance-buf) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1931 (let ((win-list (get-buffer-window-list quail-guidance-buf t t)) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1932 win) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1933 (while win-list |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1934 (setq win (car win-list) win-list (cdr win-list)) |
23599
ab69e7987be0
(quail-start-translation): Handle
Kenichi Handa <handa@m17n.org>
parents:
23401
diff
changeset
|
1935 (if (window-minibuffer-p win) |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1936 ;; We are using echo area for the guidance buffer. |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1937 ;; Vacate it to the deepest minibuffer. |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1938 (set-window-buffer win |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1939 (format " *Minibuf-%d*" (minibuffer-depth))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1940 (if (eq win (frame-root-window (window-frame win))) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1941 (progn |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1942 ;; We are using a separate frame for guidance buffer. |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1943 ;;(set-window-dedicated-p win nil) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
1944 (delete-frame (window-frame win))) |
19878
a69ae37e6932
(quail-update-translation): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
19849
diff
changeset
|
1945 ;;(set-window-dedicated-p win nil) |
23599
ab69e7987be0
(quail-start-translation): Handle
Kenichi Handa <handa@m17n.org>
parents:
23401
diff
changeset
|
1946 (delete-window win)))) |
ab69e7987be0
(quail-start-translation): Handle
Kenichi Handa <handa@m17n.org>
parents:
23401
diff
changeset
|
1947 (setq quail-guidance-win nil)))) |
17052 | 1948 |
1949 (defun quail-update-guidance () | |
1950 "Update the Quail guidance buffer and completion buffer (if displayed now)." | |
1951 ;; Update guidance buffer. | |
19849
1c5164d81426
(quail-simple): New function.
Kenichi Handa <handa@m17n.org>
parents:
19844
diff
changeset
|
1952 (if (quail-require-guidance-buf) |
17052 | 1953 (let ((guidance (quail-guidance))) |
23599
ab69e7987be0
(quail-start-translation): Handle
Kenichi Handa <handa@m17n.org>
parents:
23401
diff
changeset
|
1954 (or (and (eq (selected-frame) (window-frame (minibuffer-window))) |
ab69e7987be0
(quail-start-translation): Handle
Kenichi Handa <handa@m17n.org>
parents:
23401
diff
changeset
|
1955 (eq (selected-frame) (window-frame quail-guidance-win))) |
ab69e7987be0
(quail-start-translation): Handle
Kenichi Handa <handa@m17n.org>
parents:
23401
diff
changeset
|
1956 (quail-show-guidance-buf)) |
19723
3ada64a43911
(quail-update-guidance): If PROMPTKEY is
Kenichi Handa <handa@m17n.org>
parents:
19675
diff
changeset
|
1957 (cond ((or (eq guidance t) |
23304
3a7a029df593
(quail-update-guidance): Check for the
Kenichi Handa <handa@m17n.org>
parents:
23176
diff
changeset
|
1958 (consp guidance)) |
17052 | 1959 ;; Show the current possible translations. |
1960 (quail-show-translations)) | |
1961 ((null guidance) | |
1962 ;; Show the current input keys. | |
1963 (let ((key quail-current-key)) | |
31828
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
1964 (if (quail-kbd-translate) |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
1965 (setq key (quail-keyseq-translate key))) |
17052 | 1966 (save-excursion |
1967 (set-buffer quail-guidance-buf) | |
1968 (erase-buffer) | |
19723
3ada64a43911
(quail-update-guidance): If PROMPTKEY is
Kenichi Handa <handa@m17n.org>
parents:
19675
diff
changeset
|
1969 (insert key))))))) |
17052 | 1970 |
1971 ;; Update completion buffer if displayed now. We highlight the | |
1972 ;; selected candidate string in *Completion* buffer if any. | |
1973 (let ((win (get-buffer-window quail-completion-buf)) | |
1974 key str pos) | |
1975 (if win | |
1976 (save-excursion | |
1977 (setq str (if (stringp quail-current-str) | |
1978 quail-current-str | |
1979 (if (numberp quail-current-str) | |
1980 (char-to-string quail-current-str))) | |
1981 key quail-current-key) | |
1982 (set-buffer quail-completion-buf) | |
1983 (goto-char (point-min)) | |
1984 (if (null (search-forward (concat " " key ":") nil t)) | |
1985 (delete-overlay quail-overlay) | |
1986 (setq pos (point)) | |
1987 (if (and str (search-forward (concat "." str) nil t)) | |
1988 (move-overlay quail-overlay (1+ (match-beginning 0)) (point)) | |
1989 (move-overlay quail-overlay (match-beginning 0) (point))) | |
1990 ;; Now POS points end of KEY and (point) points end of STR. | |
1991 (if (pos-visible-in-window-p (point) win) | |
1992 ;; STR is already visible. | |
1993 nil | |
1994 ;; We want to make both KEY and STR visible, but if the | |
1995 ;; window is too short, make at least STR visible. | |
1996 (setq pos (progn (point) (goto-char pos))) | |
1997 (beginning-of-line) | |
1998 (set-window-start win (point)) | |
1999 (if (not (pos-visible-in-window-p pos win)) | |
2000 (set-window-start win pos)) | |
2001 )))))) | |
2002 | |
2003 (defun quail-show-translations () | |
2004 "Show the current possible translations." | |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
2005 (let* ((key quail-current-key) |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2006 (map (quail-lookup-key quail-current-key)) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2007 (current-translations quail-current-translations)) |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
2008 (if quail-current-translations |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
2009 (quail-update-current-translations)) |
17052 | 2010 (save-excursion |
2011 (set-buffer quail-guidance-buf) | |
2012 (erase-buffer) | |
2013 | |
2014 ;; Show the current key. | |
19723
3ada64a43911
(quail-update-guidance): If PROMPTKEY is
Kenichi Handa <handa@m17n.org>
parents:
19675
diff
changeset
|
2015 (let ((guidance (quail-guidance))) |
3ada64a43911
(quail-update-guidance): If PROMPTKEY is
Kenichi Handa <handa@m17n.org>
parents:
19675
diff
changeset
|
2016 (if (listp guidance) |
3ada64a43911
(quail-update-guidance): If PROMPTKEY is
Kenichi Handa <handa@m17n.org>
parents:
19675
diff
changeset
|
2017 ;; We must show the specified PROMPTKEY instead of the |
3ada64a43911
(quail-update-guidance): If PROMPTKEY is
Kenichi Handa <handa@m17n.org>
parents:
19675
diff
changeset
|
2018 ;; actual typed keys. |
3ada64a43911
(quail-update-guidance): If PROMPTKEY is
Kenichi Handa <handa@m17n.org>
parents:
19675
diff
changeset
|
2019 (let ((i 0) |
3ada64a43911
(quail-update-guidance): If PROMPTKEY is
Kenichi Handa <handa@m17n.org>
parents:
19675
diff
changeset
|
2020 (len (length key)) |
3ada64a43911
(quail-update-guidance): If PROMPTKEY is
Kenichi Handa <handa@m17n.org>
parents:
19675
diff
changeset
|
2021 prompt-key) |
3ada64a43911
(quail-update-guidance): If PROMPTKEY is
Kenichi Handa <handa@m17n.org>
parents:
19675
diff
changeset
|
2022 (while (< i len) |
3ada64a43911
(quail-update-guidance): If PROMPTKEY is
Kenichi Handa <handa@m17n.org>
parents:
19675
diff
changeset
|
2023 (setq prompt-key (cdr (assoc (aref key i) guidance))) |
3ada64a43911
(quail-update-guidance): If PROMPTKEY is
Kenichi Handa <handa@m17n.org>
parents:
19675
diff
changeset
|
2024 (insert (or prompt-key (aref key i))) |
3ada64a43911
(quail-update-guidance): If PROMPTKEY is
Kenichi Handa <handa@m17n.org>
parents:
19675
diff
changeset
|
2025 (setq i (1+ i)))) |
3ada64a43911
(quail-update-guidance): If PROMPTKEY is
Kenichi Handa <handa@m17n.org>
parents:
19675
diff
changeset
|
2026 (insert key))) |
17052 | 2027 |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
2028 ;; Show followable keys. |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2029 (if (and (> (length key) 0) (cdr map)) |
21881
1a80d464c77a
(quail-show-translations): Show
Kenichi Handa <handa@m17n.org>
parents:
21659
diff
changeset
|
2030 (let ((keys (mapcar (function (lambda (x) (car x))) |
1a80d464c77a
(quail-show-translations): Show
Kenichi Handa <handa@m17n.org>
parents:
21659
diff
changeset
|
2031 (cdr map)))) |
1a80d464c77a
(quail-show-translations): Show
Kenichi Handa <handa@m17n.org>
parents:
21659
diff
changeset
|
2032 (setq keys (sort keys '<)) |
17052 | 2033 (insert "[") |
21881
1a80d464c77a
(quail-show-translations): Show
Kenichi Handa <handa@m17n.org>
parents:
21659
diff
changeset
|
2034 (while keys |
1a80d464c77a
(quail-show-translations): Show
Kenichi Handa <handa@m17n.org>
parents:
21659
diff
changeset
|
2035 (insert (car keys)) |
1a80d464c77a
(quail-show-translations): Show
Kenichi Handa <handa@m17n.org>
parents:
21659
diff
changeset
|
2036 (setq keys (cdr keys))) |
17052 | 2037 (insert "]"))) |
2038 | |
2039 ;; Show list of translations. | |
26891
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2040 (if (and current-translations |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2041 (not (quail-deterministic))) |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2042 (let* ((indices (car current-translations)) |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
2043 (cur (car indices)) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
2044 (start (nth 1 indices)) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
2045 (end (nth 2 indices)) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
2046 (idx start)) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
2047 (indent-to (- quail-guidance-translations-starting-column 7)) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
2048 (insert (format "(%02d/"(nth 3 indices)) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
2049 (if (nth 4 indices) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
2050 (format "%02d)" (nth 4 indices)) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
2051 "??)")) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
2052 (while (< idx end) |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
2053 (insert (format " %d." (if (= (- idx start) 9) 0 |
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
2054 (1+ (- idx start))))) |
17052 | 2055 (let ((pos (point))) |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2056 (insert (aref (cdr current-translations) idx)) |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
2057 (if (= idx cur) |
17052 | 2058 (move-overlay quail-overlay pos (point)))) |
18556
99e8ae18137f
(quail-guidance-buf): Make it buffer
Kenichi Handa <handa@m17n.org>
parents:
18377
diff
changeset
|
2059 (setq idx (1+ idx))))) |
17052 | 2060 ))) |
2061 | |
26891
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2062 (defvar quail-completion-max-depth 5 |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2063 "The maximum depth of Quail completion list.") |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2064 |
17052 | 2065 (defun quail-completion () |
2066 "List all completions for the current key. | |
2067 All possible translations of the current key and whole possible longer keys | |
26891
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2068 are shown (at most to the depth specified `quail-completion-max-depth')." |
17052 | 2069 (interactive) |
19432
4492653b04e8
(quail-exit-from-minibuffer): Call
Kenichi Handa <handa@m17n.org>
parents:
19404
diff
changeset
|
2070 (quail-setup-completion-buf) |
22124
10b3c1cd7f18
(quail-completion): Consecutive call of
Kenichi Handa <handa@m17n.org>
parents:
21881
diff
changeset
|
2071 (let ((win (get-buffer-window quail-completion-buf 'visible)) |
10b3c1cd7f18
(quail-completion): Consecutive call of
Kenichi Handa <handa@m17n.org>
parents:
21881
diff
changeset
|
2072 (key quail-current-key) |
10b3c1cd7f18
(quail-completion): Consecutive call of
Kenichi Handa <handa@m17n.org>
parents:
21881
diff
changeset
|
2073 (map (quail-lookup-key quail-current-key)) |
10b3c1cd7f18
(quail-completion): Consecutive call of
Kenichi Handa <handa@m17n.org>
parents:
21881
diff
changeset
|
2074 (require-update nil)) |
17052 | 2075 (save-excursion |
2076 (set-buffer quail-completion-buf) | |
22124
10b3c1cd7f18
(quail-completion): Consecutive call of
Kenichi Handa <handa@m17n.org>
parents:
21881
diff
changeset
|
2077 (if (and win |
10b3c1cd7f18
(quail-completion): Consecutive call of
Kenichi Handa <handa@m17n.org>
parents:
21881
diff
changeset
|
2078 (equal key quail-current-key) |
10b3c1cd7f18
(quail-completion): Consecutive call of
Kenichi Handa <handa@m17n.org>
parents:
21881
diff
changeset
|
2079 (eq last-command 'quail-completion)) |
10b3c1cd7f18
(quail-completion): Consecutive call of
Kenichi Handa <handa@m17n.org>
parents:
21881
diff
changeset
|
2080 ;; The window for Quail completion buffer has already been |
10b3c1cd7f18
(quail-completion): Consecutive call of
Kenichi Handa <handa@m17n.org>
parents:
21881
diff
changeset
|
2081 ;; shown. We just scroll it appropriately. |
10b3c1cd7f18
(quail-completion): Consecutive call of
Kenichi Handa <handa@m17n.org>
parents:
21881
diff
changeset
|
2082 (if (pos-visible-in-window-p (point-max) win) |
10b3c1cd7f18
(quail-completion): Consecutive call of
Kenichi Handa <handa@m17n.org>
parents:
21881
diff
changeset
|
2083 (set-window-start win (point-min)) |
10b3c1cd7f18
(quail-completion): Consecutive call of
Kenichi Handa <handa@m17n.org>
parents:
21881
diff
changeset
|
2084 (let ((other-window-scroll-buffer quail-completion-buf)) |
10b3c1cd7f18
(quail-completion): Consecutive call of
Kenichi Handa <handa@m17n.org>
parents:
21881
diff
changeset
|
2085 (scroll-other-window))) |
10b3c1cd7f18
(quail-completion): Consecutive call of
Kenichi Handa <handa@m17n.org>
parents:
21881
diff
changeset
|
2086 (setq quail-current-key key) |
10b3c1cd7f18
(quail-completion): Consecutive call of
Kenichi Handa <handa@m17n.org>
parents:
21881
diff
changeset
|
2087 (erase-buffer) |
10b3c1cd7f18
(quail-completion): Consecutive call of
Kenichi Handa <handa@m17n.org>
parents:
21881
diff
changeset
|
2088 (insert "Possible completion and corresponding translations are:\n") |
10b3c1cd7f18
(quail-completion): Consecutive call of
Kenichi Handa <handa@m17n.org>
parents:
21881
diff
changeset
|
2089 (quail-completion-1 key map 1) |
10b3c1cd7f18
(quail-completion): Consecutive call of
Kenichi Handa <handa@m17n.org>
parents:
21881
diff
changeset
|
2090 (goto-char (point-min)) |
10b3c1cd7f18
(quail-completion): Consecutive call of
Kenichi Handa <handa@m17n.org>
parents:
21881
diff
changeset
|
2091 (display-buffer (current-buffer)) |
10b3c1cd7f18
(quail-completion): Consecutive call of
Kenichi Handa <handa@m17n.org>
parents:
21881
diff
changeset
|
2092 (setq require-update t))) |
10b3c1cd7f18
(quail-completion): Consecutive call of
Kenichi Handa <handa@m17n.org>
parents:
21881
diff
changeset
|
2093 (if require-update |
10b3c1cd7f18
(quail-completion): Consecutive call of
Kenichi Handa <handa@m17n.org>
parents:
21881
diff
changeset
|
2094 (quail-update-guidance))) |
10b3c1cd7f18
(quail-completion): Consecutive call of
Kenichi Handa <handa@m17n.org>
parents:
21881
diff
changeset
|
2095 (setq this-command 'quail-completion)) |
17052 | 2096 |
2097 ;; List all completions of KEY in MAP with indentation INDENT. | |
2098 (defun quail-completion-1 (key map indent) | |
2099 (let ((len (length key))) | |
2100 (indent-to indent) | |
2101 (insert key ":") | |
2102 (if (and (symbolp map) (fboundp map)) | |
2103 (setq map (funcall map key len))) | |
2104 (if (car map) | |
2105 (quail-completion-list-translations map key (+ indent len 1)) | |
2106 (insert " -\n")) | |
2107 (setq indent (+ indent 2)) | |
26891
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2108 (if (and (cdr map) (< (/ (1- indent) 2) quail-completion-max-depth)) |
17052 | 2109 (let ((l (cdr map)) |
2110 (newkey (make-string (1+ len) 0)) | |
2111 (i 0)) | |
26891
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2112 (if (functionp l) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2113 (setq l (funcall l))) |
17052 | 2114 ;; Set KEY in the first LEN characters of NEWKEY. |
2115 (while (< i len) | |
2116 (aset newkey i (aref key i)) | |
2117 (setq i (1+ i))) | |
2118 (while l ; L = ((CHAR . DEFN) ....) ; | |
2119 (aset newkey len (car (car l))) | |
2120 (quail-completion-1 newkey (cdr (car l)) indent) | |
2121 (setq l (cdr l))))))) | |
2122 | |
2123 ;; List all possible translations of KEY in Quail map MAP with | |
17764
561a8476368f
(use-quail-package): Error message added.
Kenichi Handa <handa@m17n.org>
parents:
17315
diff
changeset
|
2124 ;; indentation INDENT. |
17052 | 2125 (defun quail-completion-list-translations (map key indent) |
20169
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2126 (let (beg (translations |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
2127 (quail-get-translation (car map) key (length key)))) |
17052 | 2128 (if (integerp translations) |
20169
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2129 (progn |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2130 (insert "(1/1) 1.") |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2131 ;; Endow the character `translations' with `mouse-face' text |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2132 ;; property to enable `mouse-2' completion. |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2133 (setq beg (point)) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2134 (insert translations) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2135 (put-text-property beg (point) 'mouse-face 'highlight) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2136 (insert "\n")) |
17052 | 2137 ;; We need only vector part. |
2138 (setq translations (cdr translations)) | |
2139 ;; Insert every 10 elements with indices in a line. | |
2140 (let ((len (length translations)) | |
2141 (i 0) | |
2142 num) | |
2143 (while (< i len) | |
19944
e274dc2d61f1
(quail-completion-list-translations): Fix
Richard M. Stallman <rms@gnu.org>
parents:
19934
diff
changeset
|
2144 (when (zerop (% i 10)) |
e274dc2d61f1
(quail-completion-list-translations): Fix
Richard M. Stallman <rms@gnu.org>
parents:
19934
diff
changeset
|
2145 (when (>= i 10) |
20169
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2146 (insert "\n") |
19944
e274dc2d61f1
(quail-completion-list-translations): Fix
Richard M. Stallman <rms@gnu.org>
parents:
19934
diff
changeset
|
2147 (indent-to indent)) |
e274dc2d61f1
(quail-completion-list-translations): Fix
Richard M. Stallman <rms@gnu.org>
parents:
19934
diff
changeset
|
2148 (insert (format "(%d/%d)" (1+ (/ i 10)) (1+ (/ len 10))))) |
17052 | 2149 ;; We show the last digit of FROM while converting |
2150 ;; 0,1,..,9 to 1,2,..,0. | |
19944
e274dc2d61f1
(quail-completion-list-translations): Fix
Richard M. Stallman <rms@gnu.org>
parents:
19934
diff
changeset
|
2151 (insert (format " %d." (% (1+ i) 10))) |
20169
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2152 (setq beg (point)) |
17052 | 2153 (insert (aref translations i)) |
20169
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2154 ;; Passing the mouse over a character will highlight. |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2155 (put-text-property beg (point) 'mouse-face 'highlight) |
17052 | 2156 (setq i (1+ i))) |
20169
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2157 (insert "\n"))))) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2158 |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2159 ;; Choose a completion in *Quail Completions* buffer with mouse-2. |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2160 |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2161 (defun quail-mouse-choose-completion (event) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2162 "Click on an alternative in the `*Quail Completions*' buffer to choose it." |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2163 (interactive "e") |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2164 ;; This function is an exact copy of the mouse.el function |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2165 ;; `mouse-choose-completion' except that we: |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2166 ;; 1) add two lines from `choose-completion' in simple.el to give |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2167 ;; the `mouse-2' click a little more leeway. |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2168 ;; 2) don't bury *Quail Completions* buffer so comment a section, and |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2169 ;; 3) delete/terminate the current quail selection here. |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2170 ;; Give temporary modes such as isearch a chance to turn off. |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2171 (run-hooks 'mouse-leave-buffer-hook) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2172 (let ((buffer (window-buffer)) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2173 choice |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2174 base-size) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2175 (save-excursion |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2176 (set-buffer (window-buffer (posn-window (event-start event)))) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2177 (if completion-reference-buffer |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2178 (setq buffer completion-reference-buffer)) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2179 (setq base-size completion-base-size) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2180 (save-excursion |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2181 (goto-char (posn-point (event-start event))) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2182 (let (beg end) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2183 (if (and (not (eobp)) (get-text-property (point) 'mouse-face)) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2184 (setq end (point) beg (1+ (point)))) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2185 (if (and (not (bobp)) (get-text-property (1- (point)) 'mouse-face)) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2186 (setq end (1- (point)) beg (point))) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2187 (if (null beg) |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
2188 (quail-error "No completion here")) |
20169
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2189 (setq beg (previous-single-property-change beg 'mouse-face)) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2190 (setq end (or (next-single-property-change end 'mouse-face) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2191 (point-max))) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2192 (setq choice (buffer-substring beg end))))) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2193 ; (let ((owindow (selected-window))) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2194 ; (select-window (posn-window (event-start event))) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2195 ; (if (and (one-window-p t 'selected-frame) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2196 ; (window-dedicated-p (selected-window))) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2197 ; ;; This is a special buffer's frame |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2198 ; (iconify-frame (selected-frame)) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2199 ; (or (window-dedicated-p (selected-window)) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2200 ; (bury-buffer))) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2201 ; (select-window owindow)) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2202 (quail-delete-region) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2203 (quail-choose-completion-string choice buffer base-size) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2204 (quail-terminate-translation))) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2205 |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2206 ;; Modify the simple.el function `choose-completion-string', because |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2207 ;; the simple.el function `choose-completion-delete-max-match' breaks |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2208 ;; on Mule data, since the semantics of `forward-char' have changed. |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2209 |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2210 (defun quail-choose-completion-string (choice &optional buffer base-size) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2211 (let ((buffer (or buffer completion-reference-buffer))) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2212 ;; If BUFFER is a minibuffer, barf unless it's the currently |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2213 ;; active minibuffer. |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2214 (if (and (string-match "\\` \\*Minibuf-[0-9]+\\*\\'" (buffer-name buffer)) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2215 (or (not (active-minibuffer-window)) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2216 (not (equal buffer |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2217 (window-buffer (active-minibuffer-window)))))) |
22765
7cf2c3800e8f
(quail-mode): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents:
22124
diff
changeset
|
2218 (quail-error "Minibuffer is not active for completion") |
23172
a47eab4fc085
(quail-choose-completion-string): Store
Kenichi Handa <handa@m17n.org>
parents:
23014
diff
changeset
|
2219 ;; Store the completion in `quail-current-str', which will later |
a47eab4fc085
(quail-choose-completion-string): Store
Kenichi Handa <handa@m17n.org>
parents:
23014
diff
changeset
|
2220 ;; be converted to a character event list, then inserted into |
a47eab4fc085
(quail-choose-completion-string): Store
Kenichi Handa <handa@m17n.org>
parents:
23014
diff
changeset
|
2221 ;; the buffer where completion was requested. |
20169
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2222 (set-buffer buffer) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2223 ; (if base-size |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2224 ; (delete-region (+ base-size (point-min)) (point)) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2225 ; (choose-completion-delete-max-match choice)) |
23172
a47eab4fc085
(quail-choose-completion-string): Store
Kenichi Handa <handa@m17n.org>
parents:
23014
diff
changeset
|
2226 (setq quail-current-str choice) |
20169
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2227 ;; Update point in the window that BUFFER is showing in. |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2228 (let ((window (get-buffer-window buffer t))) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2229 (set-window-point window (point))) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2230 ;; If completing for the minibuffer, exit it with this choice. |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2231 (and (not completion-no-auto-exit) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2232 (equal buffer (window-buffer (minibuffer-window))) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2233 minibuffer-completion-table |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2234 ;; If this is reading a file name, and the file name chosen |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2235 ;; is a directory, don't exit the minibuffer. |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2236 (if (and (eq minibuffer-completion-table 'read-file-name-internal) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2237 (file-directory-p (buffer-string))) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2238 (select-window (active-minibuffer-window)) |
d938bdf82445
(quail-translation-keymap): KP_Enter key
Kenichi Handa <handa@m17n.org>
parents:
20160
diff
changeset
|
2239 (exit-minibuffer)))))) |
17052 | 2240 |
31546
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2241 ;; Accumulate in the cdr part of DECODE-MAP all pairs of key sequences |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2242 ;; vs the corresponding translations defined in the Quail map |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2243 ;; specified by the first element MAP-LIST. Each pair has the form |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2244 ;; (KEYSEQ . TRANSLATION). DECODE-MAP should have the form |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2245 ;; (decode-map . ALIST), where ALIST is an alist of length NUM. KEY |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2246 ;; is a key sequence to reach MAP. |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2247 ;; Optional 5th arg MAXNUM limits the number of accumulated pairs. |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2248 ;; Optional 6th arg IGNORES is a list of translations to ignore. |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2249 |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2250 (defun quail-build-decode-map (map-list key decode-map num |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2251 &optional maxnum ignores) |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2252 (let* ((map (car map-list)) |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2253 (translation (quail-get-translation (car map) key (length key))) |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2254 elt) |
31424 | 2255 (cond ((integerp translation) |
31546
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2256 ;; Accept only non-ASCII chars not listed in IGNORES. |
31424 | 2257 (when (and (> translation 255) (not (memq translation ignores))) |
2258 (setcdr decode-map | |
2259 (cons (cons key translation) (cdr decode-map))) | |
2260 (setq num (1+ num)))) | |
2261 ((consp translation) | |
2262 (setq translation (cdr translation)) | |
2263 (let ((multibyte nil)) | |
2264 (mapc (function (lambda (x) | |
31546
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2265 ;; Accept only non-ASCII chars not |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2266 ;; listed in IGNORES. |
31424 | 2267 (if (and (if (integerp x) (> x 255) |
2268 (> (string-bytes x) (length x))) | |
2269 (not (member x ignores))) | |
2270 (setq multibyte t)))) | |
2271 translation) | |
2272 (when multibyte | |
2273 (setcdr decode-map | |
2274 (cons (cons key translation) (cdr decode-map))) | |
2275 (setq num (+ num (length translation))))))) | |
2276 (if (and maxnum (> num maxnum)) | |
2277 (- num) | |
2278 (setq map (cdr map)) | |
31546
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2279 ;; Recursively check the deeper map. |
31424 | 2280 (while (and map (>= num 0)) |
2281 (setq elt (car map) map (cdr map)) | |
31546
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2282 (when (and (integerp (car elt)) (consp (cdr elt)) |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2283 (not (memq (cdr elt) map-list))) |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2284 (setq num (quail-build-decode-map (cons (cdr elt) map-list) |
31424 | 2285 (format "%s%c" key (car elt)) |
2286 decode-map num maxnum ignores)))) | |
2287 num))) | |
2288 | |
31546
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2289 ;; Insert the pairs of key sequences vs the corresponding translations |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2290 ;; stored in DECODE-MAP by the concise format. DECODE-MAP should be |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2291 ;; made by `quail-build-decode-map' (which see). |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2292 |
31424 | 2293 (defun quail-insert-decode-map (decode-map) |
2294 (setq decode-map | |
2295 (sort (cdr decode-map) | |
2296 (function (lambda (x y) | |
2297 (setq x (car x) y (car y)) | |
2298 (or (> (length x) (length y)) | |
2299 (and (= (length x) (length y)) | |
2300 (not (string< x y)))))))) | |
2301 (let ((frame-width (frame-width)) | |
31546
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2302 (single-key-width 3) |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2303 (single-trans-width 4) |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2304 (multiple-key-width 3) |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2305 (single-list nil) |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2306 (multiple-list nil) |
31424 | 2307 elt trans width pos cols rows col row str col-width) |
31546
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2308 ;; Divide the elements of decoding map into single ones (i.e. the |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2309 ;; one that has single translation) and multibyte ones (i.e. the |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2310 ;; one that has multiple translations). |
31424 | 2311 (while decode-map |
2312 (setq elt (car decode-map) decode-map (cdr decode-map) | |
2313 trans (cdr elt)) | |
2314 (if (and (vectorp trans) (= (length trans) 1)) | |
2315 (setq trans (aref trans 0))) | |
2316 (if (vectorp trans) | |
31546
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2317 (setq multiple-list (cons elt multiple-list)) |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2318 (setq single-list (cons (cons (car elt) trans) single-list) |
31424 | 2319 width (if (stringp trans) (string-width trans) |
2320 (char-width trans))) | |
31546
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2321 (if (> width single-trans-width) |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2322 (setq single-trans-width width))) |
31424 | 2323 (setq width (length (car elt))) |
31546
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2324 (if (> width single-key-width) |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2325 (setq single-key-width width)) |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2326 (if (> width multiple-key-width) |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2327 (setq multiple-key-width width))) |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2328 (when single-list |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2329 (setq col-width (+ single-key-width 1 single-trans-width 1) |
31424 | 2330 cols (/ frame-width col-width) |
31546
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2331 rows (/ (length single-list) cols)) |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2332 (if (> (% (length single-list) cols) 0) |
31424 | 2333 (setq rows (1+ rows))) |
2334 (insert "key") | |
31546
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2335 (indent-to (1+ single-key-width)) |
31424 | 2336 (insert "char") |
2337 (indent-to (1+ col-width)) | |
2338 (insert "[type a key sequence to insert the corresponding character]\n") | |
2339 (setq pos (point)) | |
2340 (insert-char ?\n (+ rows 2)) | |
2341 (goto-char pos) | |
2342 (setq col (- col-width) row 0) | |
31546
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2343 (while single-list |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2344 (setq elt (car single-list) single-list (cdr single-list)) |
31424 | 2345 (when (= (% row rows) 0) |
2346 (goto-char pos) | |
2347 (setq col (+ col col-width)) | |
2348 (move-to-column col t) | |
31546
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2349 (insert-char ?- single-key-width) |
31424 | 2350 (insert ? ) |
31546
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2351 (insert-char ?- single-trans-width) |
31424 | 2352 (forward-line 1)) |
2353 (move-to-column col t) | |
2354 (insert (car elt)) | |
31546
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2355 (indent-to (+ col single-key-width 1)) |
31424 | 2356 (insert (cdr elt)) |
2357 (forward-line 1) | |
2358 (setq row (1+ row))) | |
2359 (goto-char (point-max))) | |
2360 | |
31546
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2361 (when multiple-list |
31424 | 2362 (insert "key") |
31546
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2363 (indent-to (1+ multiple-key-width)) |
31424 | 2364 (insert "character(s) [type a key (sequence) and select one from the list]\n") |
31546
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2365 (insert-char ?- multiple-key-width) |
31424 | 2366 (insert " ------------\n") |
31546
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2367 (while multiple-list |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2368 (setq elt (car multiple-list) multiple-list (cdr multiple-list)) |
31424 | 2369 (insert (car elt)) |
31546
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2370 (indent-to multiple-key-width) |
31424 | 2371 (if (vectorp (cdr elt)) |
2372 (mapc (function | |
2373 (lambda (x) | |
2374 (let ((width (if (integerp x) (char-width x) | |
2375 (string-width x)))) | |
2376 (when (> (+ (current-column) 1 width) frame-width) | |
2377 (insert "\n") | |
31546
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2378 (indent-to multiple-key-width)) |
31424 | 2379 (insert " " x)))) |
2380 (cdr elt)) | |
2381 (insert " " (cdr elt))) | |
2382 (insert ?\n)) | |
2383 (insert ?\n)))) | |
2384 | |
31247
e49bf88ce1f8
(quail-help): New arg PACKAGE. Hyperlinks to mule related items.
Kenichi Handa <handa@m17n.org>
parents:
31217
diff
changeset
|
2385 (defun quail-help (&optional package) |
e49bf88ce1f8
(quail-help): New arg PACKAGE. Hyperlinks to mule related items.
Kenichi Handa <handa@m17n.org>
parents:
31217
diff
changeset
|
2386 "Show brief description of the current Quail package. |
31546
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2387 Optional 2nd arg PACKAGE specifies the name of alternative Quail |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2388 package to describe." |
17052 | 2389 (interactive) |
31424 | 2390 (if package |
2391 (setq package (assoc package quail-package-alist)) | |
2392 (setq package quail-current-package)) | |
31247
e49bf88ce1f8
(quail-help): New arg PACKAGE. Hyperlinks to mule related items.
Kenichi Handa <handa@m17n.org>
parents:
31217
diff
changeset
|
2393 (let ((help-xref-mule-regexp help-xref-mule-regexp-template)) |
e49bf88ce1f8
(quail-help): New arg PACKAGE. Hyperlinks to mule related items.
Kenichi Handa <handa@m17n.org>
parents:
31217
diff
changeset
|
2394 (with-output-to-temp-buffer "*Help*" |
18349
f468344dd2bd
(quail-help): Use with-output-to-temp-buffer.
Kenichi Handa <handa@m17n.org>
parents:
18297
diff
changeset
|
2395 (save-excursion |
f468344dd2bd
(quail-help): Use with-output-to-temp-buffer.
Kenichi Handa <handa@m17n.org>
parents:
18297
diff
changeset
|
2396 (set-buffer standard-output) |
31247
e49bf88ce1f8
(quail-help): New arg PACKAGE. Hyperlinks to mule related items.
Kenichi Handa <handa@m17n.org>
parents:
31217
diff
changeset
|
2397 (setq quail-current-package package) |
31424 | 2398 (insert "Input method: " (quail-name) |
2399 " (mode line indicator:" | |
31247
e49bf88ce1f8
(quail-help): New arg PACKAGE. Hyperlinks to mule related items.
Kenichi Handa <handa@m17n.org>
parents:
31217
diff
changeset
|
2400 (quail-title) |
31546
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2401 ")\n\n") |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2402 (save-restriction |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2403 (narrow-to-region (point) (point)) |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2404 (insert (quail-docstring)) |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2405 (goto-char (point-min)) |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2406 (with-syntax-table emacs-lisp-mode-syntax-table |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2407 (while (re-search-forward "\\\\<\\sw\\(\\sw\\|\\s_\\)+>" nil t) |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2408 (let ((sym (intern-soft |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2409 (buffer-substring (+ (match-beginning 0) 2) |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2410 (1- (point)))))) |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2411 (if (and (boundp sym) |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2412 (stringp (symbol-value sym))) |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2413 (replace-match (symbol-value sym) t t))))) |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2414 (goto-char (point-max))) |
31424 | 2415 (or (bolp) |
2416 (insert "\n")) | |
2417 (insert "\n") | |
2418 | |
2419 (let ((done-list nil)) | |
2420 ;; Show keyboard layout if the current package requests it.. | |
2421 (when (quail-show-layout) | |
31546
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2422 (insert " |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2423 KEYBOARD LAYOUT |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2424 --------------- |
31828
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
2425 This input method works by translating individual input characters. |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
2426 Assuming that your actual keyboard has the `") |
31424 | 2427 (help-insert-xref-button |
2428 quail-keyboard-layout-type | |
2429 #'quail-show-keyboard-layout quail-keyboard-layout-type | |
2430 "mouse-2, RET: show this layout") | |
31828
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
2431 (insert "' layout, |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
2432 translation results in the following \"virtual\" keyboard layout: |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
2433 ") |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
2434 (setq done-list |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
2435 (quail-insert-kbd-layout quail-keyboard-layout)) |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
2436 (insert "If your keyboard has a different layout, rearranged from |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
2437 `") |
31424 | 2438 (help-insert-xref-button |
31828
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
2439 "standard" |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
2440 #'quail-show-keyboard-layout "standard" |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
2441 "mouse-2, RET: show this layout") |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
2442 (insert "', the \"virtual\" keyboard you get with this input method |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
2443 will be rearranged in the same way. |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
2444 |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
2445 You can set the variable `quail-keyboard-layout-type' to specify |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
2446 the physical layout of your keyboard; the tables shown in |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
2447 documentation of input methods including this one are based on the |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
2448 physical keyboard layout as specified with that variable. |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
2449 ") |
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
2450 (help-insert-xref-button |
31920
75b162c6dc9e
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31828
diff
changeset
|
2451 "[customize keyboard layout]" |
31424 | 2452 #'customize-variable 'quail-keyboard-layout-type |
2453 "mouse-2, RET: set keyboard layout type") | |
31828
c6cdd9deac21
(quail-help): The output message is improved.
Kenichi Handa <handa@m17n.org>
parents:
31584
diff
changeset
|
2454 (insert "\n")) |
31424 | 2455 |
2456 ;; Show key sequences. | |
2457 (let ((decode-map (list 'decode-map)) | |
2458 elt pos num) | |
31546
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2459 (setq num (quail-build-decode-map (list (quail-map)) "" decode-map |
31424 | 2460 0 512 done-list)) |
2461 (when (> num 0) | |
31546
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2462 (insert " |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2463 KEY SEQUENCE |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2464 ----------- |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2465 ") |
31424 | 2466 (if (quail-show-layout) |
2467 (insert "You can also input more characters") | |
2468 (insert "You can input characters")) | |
2469 (insert " by the following key sequences:\n") | |
2470 (quail-insert-decode-map decode-map)))) | |
2471 | |
31247
e49bf88ce1f8
(quail-help): New arg PACKAGE. Hyperlinks to mule related items.
Kenichi Handa <handa@m17n.org>
parents:
31217
diff
changeset
|
2472 (quail-help-insert-keymap-description |
e49bf88ce1f8
(quail-help): New arg PACKAGE. Hyperlinks to mule related items.
Kenichi Handa <handa@m17n.org>
parents:
31217
diff
changeset
|
2473 (quail-translation-keymap) |
31546
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2474 "\ |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2475 KEY BINDINGS FOR TRANSLATION |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2476 ----------------------------\n") |
31424 | 2477 (insert ?\n) |
31247
e49bf88ce1f8
(quail-help): New arg PACKAGE. Hyperlinks to mule related items.
Kenichi Handa <handa@m17n.org>
parents:
31217
diff
changeset
|
2478 (if (quail-conversion-keymap) |
e49bf88ce1f8
(quail-help): New arg PACKAGE. Hyperlinks to mule related items.
Kenichi Handa <handa@m17n.org>
parents:
31217
diff
changeset
|
2479 (quail-help-insert-keymap-description |
e49bf88ce1f8
(quail-help): New arg PACKAGE. Hyperlinks to mule related items.
Kenichi Handa <handa@m17n.org>
parents:
31217
diff
changeset
|
2480 (quail-conversion-keymap) |
31546
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2481 "\ |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2482 KEY BINDINGS FOR CONVERSION |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2483 ---------------------------\n")) |
31453
8dff6bfed650
(quail-help): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
31424
diff
changeset
|
2484 (help-setup-xref (list #'quail-help (quail-name)) |
8dff6bfed650
(quail-help): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
31424
diff
changeset
|
2485 (interactive-p)) |
8dff6bfed650
(quail-help): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
31424
diff
changeset
|
2486 (setq quail-current-package nil))))) |
18349
f468344dd2bd
(quail-help): Use with-output-to-temp-buffer.
Kenichi Handa <handa@m17n.org>
parents:
18297
diff
changeset
|
2487 |
17052 | 2488 (defun quail-help-insert-keymap-description (keymap &optional header) |
31424 | 2489 (let (pos1 pos2 eol) |
2490 (setq pos1 (point)) | |
17052 | 2491 (if header |
2492 (insert header)) | |
31546
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2493 (save-excursion |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2494 (insert (substitute-command-keys "\\{keymap}"))) |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2495 ;; Skip headers "key bindings", etc. |
31424 | 2496 (forward-line 3) |
2497 (setq pos2 (point)) | |
2498 (with-syntax-table emacs-lisp-mode-syntax-table | |
2499 (while (re-search-forward "\\sw\\(\\sw\\|\\s_\\)+" nil t) | |
2500 (let ((sym (intern-soft (buffer-substring (match-beginning 0) | |
2501 (point))))) | |
2502 (if (and sym (fboundp sym) | |
31546
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2503 (or (eq (get sym 'quail-help) 'hide) |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2504 (and (quail-deterministic) |
09bc2badb9e6
(quail-translation-docstring): New variable.
Kenichi Handa <handa@m17n.org>
parents:
31453
diff
changeset
|
2505 (eq (get sym 'quail-help) 'non-deterministic)))) |
31424 | 2506 (delete-region (line-beginning-position) |
2507 (1+ (line-end-position))))))) | |
2508 (goto-char pos2) | |
2509 (while (not (eobp)) | |
2510 (if (looking-at "[ \t]*$") | |
2511 (delete-region (point) (1+ (line-end-position))) | |
2512 (forward-line 1))) | |
2513 (goto-char pos2) | |
2514 (if (eobp) | |
2515 (delete-region pos1 (point))) | |
2516 (goto-char (point-max)))) | |
17052 | 2517 |
2518 (defun quail-translation-help () | |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2519 "Show help message while translating in Quail input method." |
17052 | 2520 (interactive) |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2521 (if (not (eq this-command last-command)) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2522 (let (state-msg keymap) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2523 (if (and quail-converting (= (length quail-current-key) 0)) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2524 (setq state-msg |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2525 (format "Converting string %S by input method %S.\n" |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2526 quail-conversion-str (quail-name)) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2527 keymap (quail-conversion-keymap)) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2528 (setq state-msg |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2529 (format "Translating key sequence %S by input method %S.\n" |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2530 quail-current-key (quail-name)) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2531 keymap (quail-translation-keymap))) |
31247
e49bf88ce1f8
(quail-help): New arg PACKAGE. Hyperlinks to mule related items.
Kenichi Handa <handa@m17n.org>
parents:
31217
diff
changeset
|
2532 (with-output-to-temp-buffer "*Help*" |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2533 (save-excursion |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2534 (set-buffer standard-output) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2535 (insert state-msg) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2536 (quail-help-insert-keymap-description |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2537 keymap |
31247
e49bf88ce1f8
(quail-help): New arg PACKAGE. Hyperlinks to mule related items.
Kenichi Handa <handa@m17n.org>
parents:
31217
diff
changeset
|
2538 "-----------------------\n") |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2539 (help-mode))))) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2540 (let (scroll-help) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2541 (save-selected-window |
31247
e49bf88ce1f8
(quail-help): New arg PACKAGE. Hyperlinks to mule related items.
Kenichi Handa <handa@m17n.org>
parents:
31217
diff
changeset
|
2542 (select-window (get-buffer-window "*Help*")) |
22917
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2543 (if (eq this-command last-command) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2544 (if (< (window-end) (point-max)) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2545 (scroll-up) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2546 (if (> (window-start) (point-min)) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2547 (set-window-start (selected-window) (point-min))))) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2548 (setq scroll-help |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2549 (if (< (window-end (selected-window) 'up-to-date) (point-max)) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2550 "Type \\[quail-translation-help] to scroll up the help" |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2551 (if (> (window-start) (point-min)) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2552 "Type \\[quail-translation-help] to see the head of help")))) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2553 (if scroll-help |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2554 (progn |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2555 (message "%s" (substitute-command-keys scroll-help)) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2556 (sit-for 1) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2557 (message nil) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2558 (quail-update-guidance) |
00f3497854c4
(quail-translation-keymap): Declare it as
Kenichi Handa <handa@m17n.org>
parents:
22883
diff
changeset
|
2559 )))) |
26891
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2560 |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2561 ;; Quail map generator from state transition table. |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2562 |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2563 (defun quail-map-from-table (table) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2564 "Make quail map from state transition table TABLE. |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2565 |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2566 TABLE is an alist, the form is: |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2567 ((STATE-0 TRANSITION-0-1 TRANSITION-0-2 ...) (STATE-1 ...) ...) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2568 |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2569 STATE-n are symbols to denote state. STATE-0 is the initial state. |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2570 |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2571 TRANSITION-n-m are transition rules from STATE-n, and have the form |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2572 \(RULES . STATE-x) or RULES, where STATE-x is one of STATE-n above, |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2573 RULES is a symbol whose value is an alist of keys \(string) vs the |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2574 correponding characters or strings. The format of the symbol value of |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2575 RULES is the same as arguments to `quail-define-rules'. |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2576 |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2577 If TRANSITION-n-m has the form (RULES . STATE-x), it means that |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2578 STATE-n transits to STATE-x when keys in RULES are input. Recursive |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2579 transition is allowed, i.e. STATE-x may be STATE-n. |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2580 |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2581 If TRANSITION-n-m has the form RULES, the transition terminates |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2582 when keys in RULES are input. |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2583 |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2584 The generated map can be set for the current Quail package by the |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2585 function `quail-install-map' (which see)." |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2586 (let ((state-alist (mapcar (lambda (x) (list (car x))) table)) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2587 tail elt) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2588 ;; STATE-ALIST is an alist of states vs the correponding sub Quail |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2589 ;; map. It is now initialized to ((STATE-0) (STATE-1) ...). |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2590 ;; Set key sequence mapping rules in cdr part of each element. |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2591 (while table |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2592 (quail-map-from-table-1 state-alist (car table)) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2593 (setq table (cdr table))) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2594 |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2595 ;; Now STATE-ALIST has the form ((STATE-0 MAPPING-RULES) ...). |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2596 ;; Elements of MAPPING-RULES may have the form (STATE-x). Replace |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2597 ;; them with MAPPING-RULES of STATE-x to make elements of |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2598 ;; STATE-ALIST valid Quail maps. |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2599 (setq tail state-alist) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2600 (while tail |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2601 (setq elt (car tail) tail (cdr tail)) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2602 (quail-map-from-table-2 state-alist elt)) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2603 |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2604 ;; Return the Quail map for the initial state. |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2605 (car state-alist))) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2606 |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2607 ;; STATE-INFO has the form (STATE TRANSITION ...). Set key sequence |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2608 ;; mapping rules in the element of STATE-ALIST that corresponds to |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2609 ;; STATE according to TRANSITION ... |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2610 (defun quail-map-from-table-1 (state-alist state-info) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2611 (let* ((state (car state-info)) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2612 (map (assq state state-alist)) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2613 (transitions (cdr state-info)) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2614 elt) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2615 (while transitions |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2616 (setq elt (car transitions) transitions (cdr transitions)) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2617 (let (rules dst-state key trans) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2618 ;; ELT has the form (RULES-SYMBOL . STATE-x) or RULES-SYMBOL. |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2619 ;; STATE-x is one of car parts of STATE-ALIST's elements. |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2620 (if (consp elt) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2621 (setq rules (symbol-value (car elt)) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2622 ;; Set (STATE-x) as branches for all keys in RULES. |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2623 ;; It is replaced with actual branches for STATE-x |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2624 ;; later in `quail-map-from-table-2'. |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2625 dst-state (list (cdr elt))) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2626 (setq rules (symbol-value elt))) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2627 (while rules |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2628 (setq key (car (car rules)) trans (cdr (car rules)) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2629 rules (cdr rules)) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2630 (if (stringp trans) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2631 (if (= (length trans) 1) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2632 (setq trans (aref trans 0)) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2633 (setq trans (string-to-vector trans)))) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2634 (set-nested-alist key trans map nil dst-state)))))) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2635 |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2636 ;; ELEMENT is one element of STATE-ALIST. ELEMENT is a nested alist; |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2637 ;; the form is: |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2638 ;; (STATE (CHAR NESTED-ALIST) ...) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2639 ;; NESTED-ALIST is a nested alist; the form is: |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2640 ;; (TRANS (CHAR NESTED-ALIST) ...) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2641 ;; or |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2642 ;; (TRANS (CHAR NESTED-ALIST) ... . (STATE-x)) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2643 ;; Here, the task is to replace all occurrences of (STATE-x) with: |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2644 ;; (cdr (assq STATE-x STATE-ALIST)) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2645 |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2646 (defun quail-map-from-table-2 (state-alist element) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2647 (let ((prev element) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2648 (tail (cdr element)) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2649 elt) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2650 (while (cdr tail) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2651 (setq elt (car tail) prev tail tail (cdr tail)) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2652 (quail-map-from-table-2 state-alist (cdr elt))) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2653 (setq elt (car tail)) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2654 (if (consp elt) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2655 (quail-map-from-table-2 state-alist (cdr elt)) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2656 (setcdr prev (cdr (assq elt state-alist)))))) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2657 |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2658 ;; Concatenate translations for all heading substrings of KEY in the |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2659 ;; current Quail map. Here, `heading substring' means (substring KEY |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2660 ;; 0 LEN), where LEN is 1, 2, ... (length KEY). |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2661 (defun quail-lookup-map-and-concat (key) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2662 (let* ((len (length key)) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2663 (translation-list nil) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2664 map) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2665 (while (> len 0) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2666 (setq map (quail-lookup-key key len) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2667 len (1- len)) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2668 (if map |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2669 (let* ((def (quail-map-definition map)) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2670 (trans (if (consp def) (aref (cdr def) (car (car def))) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2671 def))) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2672 (if (integerp trans) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2673 (setq trans (char-to-string trans))) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2674 (setq translation-list (cons trans translation-list))))) |
651d521c8f52
(quail-install-map): New optional arg
Kenichi Handa <handa@m17n.org>
parents:
24821
diff
changeset
|
2675 (apply 'concat translation-list))) |
17052 | 2676 |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
2677 |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
2678 (defvar quail-directory-name "quail" |
23176 | 2679 "Name of Quail directory which contains Quail packages. |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
2680 This is a sub-directory of LEIM directory.") |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
2681 |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
2682 ;;;###autoload |
19605
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2683 (defun quail-update-leim-list-file (dirname &rest dirnames) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2684 "Update entries for Quail packages in `LEIM' list file in directory DIRNAME. |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2685 DIRNAME is a directory containing Emacs input methods; |
19200
74ec766c0ada
(quail-update-leim-list-file):
Richard M. Stallman <rms@gnu.org>
parents:
19144
diff
changeset
|
2686 normally, it should specify the `leim' subdirectory |
19605
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2687 of the Emacs source tree. |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2688 |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2689 It searches for Quail packages under `quail' subdirectory of DIRNAME, |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2690 and update the file \"leim-list.el\" in DIRNAME. |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2691 |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2692 When called from a program, the remaining arguments are additional |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2693 directory names to search for Quail packages under `quail' subdirectory |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2694 of each directory." |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
2695 (interactive "FDirectory of LEIM: ") |
19605
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2696 (setq dirname (expand-file-name dirname)) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2697 (let ((leim-list (expand-file-name leim-list-file-name dirname)) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2698 quail-dirs list-buf pkg-list pkg-buf pos) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2699 (if (not (file-writable-p leim-list)) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2700 (error "Can't write to file \"%s\"" leim-list)) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2701 (message "Updating %s ..." leim-list) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2702 (setq list-buf (find-file-noselect leim-list)) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2703 |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2704 ;; At first, clean up the file. |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2705 (save-excursion |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2706 (set-buffer list-buf) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2707 (goto-char 1) |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
2708 |
19605
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2709 ;; Insert the correct header. |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2710 (if (looking-at (regexp-quote leim-list-header)) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2711 (goto-char (match-end 0)) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2712 (insert leim-list-header)) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2713 (setq pos (point)) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2714 (if (not (re-search-forward leim-list-entry-regexp nil t)) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2715 nil |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2716 |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2717 ;; Remove garbages after the header. |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2718 (goto-char (match-beginning 0)) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2719 (if (< pos (point)) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2720 (delete-region pos (point))) |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
2721 |
19605
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2722 ;; Remove all entries for Quail. |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2723 (while (re-search-forward leim-list-entry-regexp nil 'move) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2724 (goto-char (match-beginning 0)) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2725 (setq pos (point)) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2726 (condition-case nil |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2727 (let ((form (read list-buf))) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2728 (when (equal (nth 3 form) ''quail-use-package) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2729 (if (eolp) (forward-line 1)) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2730 (delete-region pos (point)))) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2731 (error |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2732 ;; Delete the remaining contents because it seems that |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2733 ;; this file is broken. |
23014
ddc2fa7883d6
(quail-update-leim-list-file): Fix message syntax.
Richard M. Stallman <rms@gnu.org>
parents:
22984
diff
changeset
|
2734 (message "Garbage in %s deleted" leim-list) |
19605
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2735 (delete-region pos (point-max))))))) |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
2736 |
23176 | 2737 ;; Search for `quail' subdirectory under each DIRNAMES. |
19605
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2738 (setq dirnames (cons dirname dirnames)) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2739 (let ((l dirnames)) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2740 (while l |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2741 (setcar l (expand-file-name (car l))) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2742 (setq dirname (expand-file-name quail-directory-name (car l))) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2743 (if (file-readable-p dirname) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2744 (setq quail-dirs (cons dirname quail-dirs)) |
23014
ddc2fa7883d6
(quail-update-leim-list-file): Fix message syntax.
Richard M. Stallman <rms@gnu.org>
parents:
22984
diff
changeset
|
2745 (message "%s doesn't have `%s' subdirectory, just ignored" |
19605
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2746 (car l) quail-directory-name) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2747 (setq quail-dirs (cons nil quail-dirs))) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2748 (setq l (cdr l))) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2749 (setq quail-dirs (nreverse quail-dirs))) |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
2750 |
19605
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2751 ;; Insert input method registering forms. |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2752 (while quail-dirs |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2753 (setq dirname (car quail-dirs)) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2754 (when dirname |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2755 (setq pkg-list (directory-files dirname 'full "\\.el$" 'nosort)) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2756 (while pkg-list |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2757 (message "Checking %s ..." (car pkg-list)) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2758 (with-temp-buffer |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2759 (insert-file-contents (car pkg-list)) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2760 (goto-char (point-min)) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2761 (while (search-forward "(quail-define-package" nil t) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2762 (goto-char (match-beginning 0)) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2763 (condition-case nil |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2764 (let ((form (read (current-buffer)))) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2765 (save-excursion |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2766 (set-buffer list-buf) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2767 (insert |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2768 (format "(register-input-method |
18297
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
2769 %S %S '%s |
5c8e37591da5
(quail-current-data): New variable.
Kenichi Handa <handa@m17n.org>
parents:
18201
diff
changeset
|
2770 %S %S |
19200
74ec766c0ada
(quail-update-leim-list-file):
Richard M. Stallman <rms@gnu.org>
parents:
19144
diff
changeset
|
2771 %S)\n" |
19605
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2772 (nth 1 form) ; PACKAGE-NAME |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2773 (nth 2 form) ; LANGUAGE |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2774 'quail-use-package ; ACTIVATE-FUNC |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2775 (nth 3 form) ; PACKAGE-TITLE |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2776 (progn ; PACKAGE-DESCRIPTION (one line) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2777 (string-match ".*" (nth 5 form)) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2778 (match-string 0 (nth 5 form))) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2779 (file-relative-name ; PACKAGE-FILENAME |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2780 (file-name-sans-extension (car pkg-list)) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2781 (car dirnames)))))) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2782 (error |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2783 ;; Ignore the remaining contents of this file. |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2784 (goto-char (point-max)) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2785 (message "Some part of \"%s\" is broken" dirname))))) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2786 (setq pkg-list (cdr pkg-list))) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2787 (setq quail-dirs (cdr quail-dirs) dirnames (cdr dirnames)))) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2788 |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2789 ;; At last, write out LEIM list file. |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2790 (save-excursion |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2791 (set-buffer list-buf) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2792 (setq buffer-file-coding-system 'iso-2022-7bit) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2793 (save-buffer 0)) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2794 (kill-buffer list-buf) |
3b700b203cfd
(quail-update-leim-list-file): Make it
Kenichi Handa <handa@m17n.org>
parents:
19519
diff
changeset
|
2795 (message "Updating %s ... done" leim-list))) |
30656
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
2796 |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
2797 (defun quail-advice (args) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
2798 "Advice users about the characters input by the current Quail package. |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
2799 The argument is a parameterized event of the form: |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
2800 (quail-advice STRING) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
2801 where STRING is a string containing the input characters. |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
2802 If STRING has property `advice' and the value is a function, |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
2803 call it with one argument STRING." |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
2804 (interactive "e") |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
2805 (let* ((string (nth 1 args)) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
2806 (func (get-text-property 0 'advice string))) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
2807 (if (functionp func) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
2808 (funcall func string)))) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
2809 |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
2810 (global-set-key [quail-advice] 'quail-advice) |
321084a896d1
(quail-define-rules): Handle Quail decode
Kenichi Handa <handa@m17n.org>
parents:
29690
diff
changeset
|
2811 |
17052 | 2812 ;; |
2813 (provide 'quail) | |
2814 | |
2815 ;;; quail.el ends here |