1 ;;; egg-wnn.el --- a inputting method communicating with [jck]server
3 ;; Author: Satoru Tomura (tomura@etl.go.jp), and
4 ;; Toshiaki Shingu (shingu@cpr.canon.co.jp)
5 ;; Keywords: inputting method
7 ;; This file is part of Egg on Mule (Multilingual Environment)
9 ;; Egg is free software; you can redistribute it and/or modify
10 ;; it under the terms of the GNU General Public License as published by
11 ;; the Free Software Foundation; either version 2, or (at your option)
14 ;; Egg is distributed in the hope that it will be useful,
15 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
16 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 ;; GNU General Public License for more details.
19 ;; You should have received a copy of the GNU General Public License
20 ;; along with GNU Emacs; see the file COPYING. If not, write to
21 ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
25 ;;; Modified to provide english strings as well by Jareth Hein (jareth@camelot-soft.com)
26 ;;; Modified for Wnn V4 and Wnn6 by Satoru Tomura(tomura@etl.go.jp)
27 ;;; Modified for Wnn6 by OMRON
28 ;;; Written by Toshiaki Shingu (shingu@cpr.canon.co.jp)
29 ;;; Modified for Wnn V4 library on wnn4v3-egg.el
31 ;;;
\e$B$?$^$4!V$?$+$J!W%P!<%8%g%s
\e(B
32 ;;;
\e$B!V$?$+$J!W$H$ODR$1J*$N$?$+$J$G$O$"$j$^$;$s!#
\e(B
33 ;;;
\e$B!V$?$^$4$h!?$+$7$3$/!?$J!<!<$l!W$NN,$r$H$C$FL?L>$7$^$7$?!#
\e(B
34 ;;; Wnn V4
\e$B$N
\e(B jl
\e$B%i%$%V%i%j$r;H$$$^$9!#
\e(B
35 ;;;
\e$B%i%$%V%i%j$H$N%$%s%?!<%U%'!<%9$O
\e(B wnnfns.c
\e$B$GDj5A$5$l$F$$$^$9!#
\e(B
39 ;;; 97/10/27 Help system modification by J.Hein
40 ;;; 97/2/4 Modified for use with XEmacs by J.Hein <jareth@camelot-soft.com>
41 ;;; (mostly changes regarding extents and markers)
42 ;;; 94/2/3 kWnn support by H.Kuribayashi
43 ;;; 93/11/24 henkan-select-kouho: bug fixed
44 ;;; 93/7/22 hinsi-from-menu updated
45 ;;; 93/5/12 remove-regexp-in-string
46 ;;; fixed by Shuji NARAZAKI <narazaki@csce.kyushu-u.ac.jp>
47 ;;; 93/4/22 set-wnn-host-name, set-cwnn-host-name
48 ;;; 93/4/5 EGG:open-wnn, close-wnn modified by tsuiki.
49 ;;; 93/4/2 wnn-param-set
50 ;;; 93/4/2 modified along with wnn4fns.c
51 ;;; 93/3/3 edit-dict-item: bug fixed
52 ;;; 93/1/8 henkan-help-command modified.
53 ;;; 92/12/1 buffer local 'wnn-server-type' and 'cwnn-zhuyin'
54 ;;; so as to support individual its mode with multiple buffers.
55 ;;; 92/11/26 set-cserver-host-name fixed.
56 ;;; 92/11/26 its:{previous,next}-mode by <yasutome@ics.osaka-u.ac.jp>
57 ;;; 92/11/25 set-wnn-host-name was changed to set-{j,c}server-host-name.
58 ;;; 92/11/25 redefined its:select-mode and its:select-mode-from-menu
59 ;;; defined in egg.el to run hook with its mode selection.
60 ;;; 92/11/20 bug fixed related to henkan mode attribute.
61 ;;; 92/11/12 get-wnn-host-name and set-wnn-host-name were changed.
62 ;;; 92/11/10 (set-dict-comment) bug fixed
63 ;;; 92/10/27 (henkan-region-internal) display message if error occurs.
64 ;;; 92/9/28 completely modified for chinese translation.
65 ;;; 92/9/28 diced-{use,hindo-set} bug fixed <tetsuya@rabbit.is.s.u-tokyo.ac.jp>
66 ;;; 92/9/22 touroku-henkan-mode by <tsuiki@sfc.keio.ac.jp>
67 ;;; 92/9/18 rewrite wnn-dict-add to support password files.
68 ;;; 92/9/8 henkan-region-internal was modified.
69 ;;; 92/9/8 henkan-mode-map " " 'henkan-next-kouho-dai -> 'henkan-next-kouho
70 ;;; 92/9/7 henkan-mode-map "\C-h" 'help-command -> 'henkan-help-command (Shuji Narazaki)
71 ;;; 92/9/3 wnn-server-get-msg without wnn-error-code.
72 ;;; 92/9/3 get-wnn-lang-name was modified.
73 ;;; 92/8/19 get-wnn-lang-name
\e$B$NJQ99
\e(B (by T.Matsuzawa)
74 ;;; 92/8/5 Bug in henkan-kakutei-first-char fixed. (by Y.Kasai)
75 ;;; 92/7/17 set-egg-henkan-format
\e$B$NJQ99
\e(B
76 ;;; 92/7/17 egg:error
\e$B$N0z?t$r
\e(B format &rest args
\e$B$KJQ99
\e(B
77 ;;; 92/7/17 henkan/gyaku-henkan-word
\e$B$N=$@5
\e(B
78 ;;; 92/7/17 henkan/gyaku-henkan-paragraph/sentence/word
\e$B$G!"
\e(B
79 ;;;
\e$BI=<($,Mp$l$k$N$r=$@5!J
\e(Bsave-excursion
\e$B$r$O$:$9!K
\e(B
80 ;;; 92.7.14 Unnecessary '*' in comments of variables deleted. (by T.Ito)
81 ;;; 92/7/10 henkan-kakutei-first-char
\e$B$rDI2C!"
\e(BC-@
\e$B$K3d$jEv$F!#
\e(B(by K.Handa)
82 ;;; 92/7/8 overwrite-mode
\e$B$N%5%]!<%H
\e(B(by K. Handa)
83 ;;; 92/6/30 startup file
\e$B<~$j$NJQ99
\e(B
84 ;;; 92/6/30
\e$BJQ49%b!<%I$N%"%H%j%S%e!<%H$K
\e(B bold
\e$B$rDI2C
\e(B
85 ;;; (by ITO Toshiyuki <toshi@his.cpl.melco.co.jp>)
86 ;;; 92/6/22
\e$B6uJ8;zNs$rJQ49$9$k$HMn$A$k%P%0$r=$@5
\e(B
87 ;;; 92/5/20 set-egg-henkan-mode-format
\e$B$N
\e(B bug fix
88 ;;; 92/5/20 egg:set-bunsetu-attribute
\e$B$,BgJ8@a$G@5$7$/F0$/$h$&$KJQ99
\e(B
90 ;;; ----------------------------------------------------------------
95 (make-variable-buffer-local 'wnn-server-type)
96 (make-variable-buffer-local 'cwnn-zhuyin)
98 (defvar egg:*sho-bunsetu-face* nil "*
\e$B>.J8@aI=<($KMQ$$$k
\e(B face
\e$B$^$?$O
\e(B nil")
99 (make-variable-buffer-local
100 (defvar egg:*sho-bunsetu-extent* nil "
\e$B>.J8@a$NI=<($K;H$&
\e(B extent"))
102 (defvar egg:*sho-bunsetu-kugiri* "-" "*
\e$B>.J8@a$N6h@Z$j$r<($9J8;zNs
\e(B")
104 (defvar egg:*dai-bunsetu-face* nil "*
\e$BBgJ8@aI=<($KMQ$$$k
\e(B face
\e$B$^$?$O
\e(B nil")
105 (make-variable-buffer-local
106 (defvar egg:*dai-bunsetu-extent* nil "
\e$BBgJ8@a$NI=<($K;H$&
\e(B extent"))
108 (defvar egg:*dai-bunsetu-kugiri* " " "*
\e$BBgJ8@a$N6h@Z$j$r<($9J8;zNs
\e(B")
110 (defvar egg:*henkan-face* nil "*
\e$BJQ49NN0h$rI=<($9$k
\e(B face
\e$B$^$?$O
\e(B nil")
111 (make-variable-buffer-local
112 (defvar egg:*henkan-extent* nil "
\e$BJQ49NN0h$NI=<($K;H$&
\e(B extent"))
114 (defvar egg:*henkan-open* "|" "*
\e$BJQ49$N;OE@$r<($9J8;zNs
\e(B")
115 (defvar egg:*henkan-close* "|" "*
\e$BJQ49$N=*E@$r<($9J8;zNs
\e(B")
117 (make-variable-buffer-local
118 (defvar egg:henkan-mode-in-use nil "buffer
\e$B$,JQ49Cf$N;~
\e(B t"))
120 ;;; ----------------------------------------------------------------
121 ;;;
\e$B0J2<$N
\e(B its mode
\e$B4X78$N4X?t$O!"
\e(Begg.el
\e$B$GDj5A$5$l$F$$$k$,!"
\e(B
122 ;;;
\e$B$?$+$J$G$O
\e(B its mode
\e$B$N@ZBX$($KF14|$7$F!"
\e(Bjserver/cserver,
123 ;;; pinyin/zhuyin
\e$B$N@ZBX$($b9T$J$$$?$$$N$G!":FDj5A$7$F$$$k!#
\e(B
124 ;;;
\e$B=>$C$F!"
\e(Begg.el, egg-wnn.el
\e$B$N=g$K%m!<%I$7$J$1$l$P$J$i$J$$!#
\e(B
127 (defun its:select-mode (name)
128 "Switch ITS mode to NAME or prompt for it if called interactively.
129 After changing, its:select-mode-hook is called."
130 (interactive (list (completing-read "ITS mode: " its:*mode-alist*)))
131 (if (its:get-mode-map name)
133 (setq its:*current-map* (its:get-mode-map name))
134 (egg:mode-line-display)
135 (run-hooks 'its:select-mode-hook))
139 (defun its:select-mode-from-menu ()
140 "Select ITS mode from menu.
141 After changing, its:select-mode-hook is called."
143 (setcar (nthcdr 2 its:*select-mode-menu*) its:*mode-alist*)
144 (setq its:*current-map* (menu:select-from-menu its:*select-mode-menu*))
145 (egg:mode-line-display)
146 (run-hooks 'its:select-mode-hook))
148 (defvar its:select-mode-hook
151 (cond ((eq its:*current-map* (its:get-mode-map "roma-kana"))
152 (setq wnn-server-type 'jserver))
153 ((eq its:*current-map* (its:get-mode-map "PinYin"))
154 (setq wnn-server-type 'cserver)
155 (setq cwnn-zhuyin nil))
156 ((eq its:*current-map* (its:get-mode-map "zhuyin"))
157 (setq wnn-server-type 'cserver)
158 (setq cwnn-zhuyin t))
159 ((eq its:*current-map* (its:get-mode-map "hangul"))
160 (setq wnn-server-type 'kserver))
163 (defun its:next-mode ()
164 "Switch to next mode in list its:*standard-modes*
165 After changing, its:select-mode-hook is called."
167 (let ((pos (its:find its:*current-map* its:*standard-modes*)))
168 (setq its:*current-map*
169 (nth (% (1+ pos) (length its:*standard-modes*))
170 its:*standard-modes*))
171 (egg:mode-line-display)
172 (run-hooks 'its:select-mode-hook)))
174 (defun its:previous-mode ()
175 "Switch to previous mode in list its:*standard-modes*
176 After changing, its:select-mode-hook is called."
178 (let ((pos (its:find its:*current-map* its:*standard-modes*)))
179 (setq its:*current-map*
180 (nth (1- (if (= pos 0) (length its:*standard-modes*) pos))
181 its:*standard-modes*))
182 (egg:mode-line-display)
183 (run-hooks 'its:select-mode-hook)))
185 (defun read-current-its-string (prompt &optional initial-input henkan)
186 (let ((egg:fence-buffer (window-buffer (minibuffer-window)))
187 (old-its-map its:*current-map*)
188 ;;(minibuffer-exit-hook
189 ;; (append minibuffer-exit-hook
190 ;; '((lambda () (use-local-map minibuffer-local-map)))))
193 (set-buffer egg:fence-buffer)
194 (setq egg:*input-mode* t
196 its:*current-map* old-its-map)
197 (mode-line-egg-mode-update
198 (nth 1 (its:get-mode-indicator its:*current-map*)))
199 (read-from-minibuffer prompt initial-input
201 egg:*minibuffer-local-hiragana-map*)))))
203 ;;;----------------------------------------------------------------------
205 ;;; Kana Kanji Henkan
207 ;;;----------------------------------------------------------------------
209 (defvar wnn-host-name nil "Jserver host name currently connected")
210 (defvar cwnn-host-name nil "Cserver host name currently connected")
211 (defvar kwnn-host-name nil "Kserver host name currently connected")
212 (defvar jserver-list nil "*List of jserver host name")
213 (defvar cserver-list nil "*List of cserver host name")
214 (defvar kserver-list nil "*List of kserver host name")
216 (defvar egg:*sai-henkan-start* nil)
217 (defvar egg:*sai-henkan-end* nil)
218 (defvar egg:*old-bunsetu-suu* nil)
220 (defun egg-wnn:kill-emacs-function ()
221 (let ((wnn-server-type))
222 (setq wnn-server-type 'jserver)
224 (setq wnn-server-type 'cserver)
226 (setq wnn-server-type 'kserver)
229 (add-hook 'kill-emacs-hook 'egg-wnn:kill-emacs-function)
231 (defun egg:error (form &rest mesg)
232 (apply 'notify (or form "%s") mesg)
233 (apply 'error (or form "%s") mesg))
235 (defun wnn-toggle-english-messages ()
236 "Toggle whether wnn reports info in english or the native language of the server."
238 (setq wnn-english-messages (not wnn-english-messages)))
240 (defvar wnn-english-messages nil "*If non-nil, display messages from the [jck]server in English")
242 (make-symbol "english-mess")
244 (defun egg:msg-get (message)
246 (nth 1 (assoc message (nth 1 (assoc (if wnn-english-messages 'english-mess wnn-server-type)
247 *egg-message-alist*))))
248 (format "No message. Check *egg-message-alist* %s %s"
249 wnn-server-type message)))
251 (defvar *egg-message-alist*
253 ((open-wnn "Connected with Wnn on host %s")
254 (no-rcfile "No egg-startup-file on %s")
255 (file-saved "Wnn dictionary and frequency data recorded.")
256 (henkan-mode-indicator "
\e$B4A
\e(B")
257 (begin-henkan "Fence starting character: ")
258 (end-henkan "Fence ending character: ")
259 (kugiri-dai "Large bunsetsu separator: ")
260 (kugiri-sho "Small bunsetsu separator: ")
261 (face-henkan "Face for conversion: ")
262 (face-dai "Face for large bunsetsu: ")
263 (face-sho "Face for small bunsetsu: ")
265 (off-msg "%s %s(%s:%s) turned off.")
266 (henkan-help "Kanji conversion mode:
267 Bunsetsu motion commands
268 \\[henkan-first-bunsetu]\tFirst bunsetsu\t\\[henkan-last-bunsetu]\tLast bunsetsu
269 \\[henkan-backward-bunsetu]\tPrevious bunsetsu\t\\[henkan-forward-bunsetu]\tNext bunsetsu
270 Bunsetsu conversion commands
271 \\[henkan-next-kouho-dai]\tNext larger match\t\\[henkan-next-kouho-sho]\tNext smaller match
272 \\[henkan-previous-kouho]\tPrevious match\t\\[henkan-next-kouho]\tNext match
273 \\[henkan-bunsetu-nobasi-dai]\tExtend bunsetsu largest\t\\[henkan-bunsetu-chijime-dai]\tShrink bunsetsu smallest
274 \\[henkan-bunsetu-nobasi-sho]\tExtend bunsetsu\t\\[henkan-bunsetu-chijime-sho]\tShrink bunsetsu
275 \\[henkan-select-kouho-dai]\tMenu select largest match\t\\[henkan-select-kouho-sho]\tMenu select smallest match
277 \\[henkan-kakutei]\tComplete conversion commit\t\\[henkan-kakutei-before-point]\tCommit before point
278 \\[henkan-quit]\tAbort conversion
280 (hinsimei "Hinshi (product/noun) name:")
281 (jishotouroku-yomi "Dictionary entry for
\e$B!X
\e(B%s
\e$B!Y
\e(B reading:")
282 (touroku-jishomei "Name of dictionary:" )
283 (registerd "Dictonary entry
\e$B!X
\e(B%s
\e$B!Y
\e(B(%s: %s) registered in %s.")
284 (yomi "Reading
\e$B!'
\e(B")
285 (no-yomi "No dictionary entry for
\e$B!X
\e(B%s
\e$B!Y
\e(B.")
286 (jisho "Dictionary:")
289 (register-notify "Dictonary entry
\e$B!X
\e(B%s
\e$B!Y
\e(B(%s: %s) registered in %s.")
290 (cannot-remove "Cannot delete entry from system dictionary.")
291 (enter-hindo "Enter frequency:")
292 (remove-notify "Dictonary entry
\e$B!X
\e(B%s
\e$B!Y
\e(B(%s) removed from %s.")
293 (removed "Dictonary entry
\e$B!X
\e(B%s
\e$B!Y
\e(B(%s) removed from %s.")
294 (jishomei "Dictionary name:" )
296 (jisho-comment "Dictionary:%s: comment:%s")
297 (param ("
\e$B#N
\e(B (
\e$BBg
\e(B )
\e$BJ8@a2r@O$N#N
\e(B"
298 "
\e$BBgJ8@aCf$N>.J8@a$N:GBg?t
\e(B"
299 "
\e$B448l$NIQEY$N%Q%i%a!<%?
\e(B"
300 "
\e$B>.J8@aD9$N%Q%i%a!<%?
\e(B"
301 "
\e$B448lD9$N%Q%i%a!<%?
\e(B"
302 "
\e$B:#;H$C$?$h%S%C%H$N%Q%i%a!<%?
\e(B"
303 "
\e$B<-=q$N%Q%i%a!<%?
\e(B"
304 "
\e$B>.J8@a$NI>2ACM$N%Q%i%a!<%?
\e(B"
305 "
\e$BBgJ8@aD9$N%Q%i%a!<%?
\e(B"
306 "
\e$B>.J8@a?t$N%Q%i%a!<%?
\e(B"
307 "
\e$B5?;wIJ;l
\e(B
\e$B?t;z$NIQEY
\e(B"
308 "
\e$B5?;wIJ;l
\e(B
\e$B%+%J$NIQEY
\e(B"
309 "
\e$B5?;wIJ;l
\e(B
\e$B1Q?t$NIQEY
\e(B"
310 "
\e$B5?;wIJ;l
\e(B
\e$B5-9f$NIQEY
\e(B"
311 "
\e$B5?;wIJ;l
\e(B
\e$BJD3g8L$NIQEY
\e(B"
312 "
\e$B5?;wIJ;l
\e(B
\e$BIUB08l$NIQEY
\e(B"
313 "
\e$B5?;wIJ;l
\e(B
\e$B3+3g8L$NIQEY
\e(B"))
316 ((open-wnn "
\e$B%[%9%H
\e(B %s
\e$B$N
\e(B Wnn
\e$B$r5/F0$7$^$7$?
\e(B")
317 (no-rcfile "%s
\e$B>e$K
\e(B egg-startup-file
\e$B$,$"$j$^$;$s!#
\e(B")
318 (file-saved "Wnn
\e$B$NIQEY>pJs!&<-=q>pJs$rB`Hr$7$^$7$?!#
\e(B")
319 (henkan-mode-indicator "
\e$B4A
\e(B")
320 (begin-henkan "
\e$BJQ493+;OJ8;zNs
\e(B: ")
321 (end-henkan "
\e$BJQ49=*N;J8;zNs
\e(B: ")
322 (kugiri-dai "
\e$BBgJ8@a6h@Z$jJ8;zNs
\e(B: ")
323 (kugiri-sho "
\e$B>.J8@a6h@Z$jJ8;zNs
\e(B: ")
324 (face-henkan "
\e$BJQ496h4VI=<(B0@-
\e(B: ")
325 (face-dai "
\e$BBgJ8@a6h4VI=<(B0@-
\e(B: ")
326 (face-sho "
\e$B>.J8@a6h4VI=<(B0@-
\e(B: ")
327 (jikouho "
\e$B<!8uJd
\e(B:")
328 (off-msg "%s %s(%s:%s)
\e$B$r
\e(B off
\e$B$7$^$7$?!#
\e(B")
329 (henkan-help "
\e$B4A;zJQ49%b!<%I
\e(B:
331 \\[henkan-first-bunsetu]\t
\e$B@hF,J8@a
\e(B\t\\[henkan-last-bunsetu]\t
\e$B8eHxJ8@a
\e(B
332 \\[henkan-backward-bunsetu]\t
\e$BD>A0J8@a
\e(B\t\\[henkan-forward-bunsetu]\t
\e$BD>8eJ8@a
\e(B
334 \\[henkan-next-kouho-dai]\t
\e$BBgJ8@a<!8uJd
\e(B\t\\[henkan-next-kouho-sho]\t
\e$B>.J8@a<!8uJd
\e(B
335 \\[henkan-previous-kouho]\t
\e$BA08uJd
\e(B\t\\[henkan-next-kouho]\t
\e$B<!8uJd
\e(B
336 \\[henkan-bunsetu-nobasi-dai]\t
\e$BBgJ8@a?-$7
\e(B\t\\[henkan-bunsetu-chijime-dai]\t
\e$BBgJ8@a=L$a
\e(B
337 \\[henkan-bunsetu-nobasi-sho]\t
\e$B>.J8@a?-$7
\e(B\t\\[henkan-bunsetu-chijime-sho]\t
\e$B>.J8@a=L$a
\e(B
338 \\[henkan-select-kouho-dai]\t
\e$BBgJ8@aJQ498uJdA*Br
\e(B\t\\[henkan-select-kouho-sho]\t
\e$B>.J8@aJQ498uJdA*Br
\e(B
340 \\[henkan-kakutei]\t
\e$BA4J8@a3NDj
\e(B\t\\[henkan-kakutei-before-point]\t
\e$BD>A0J8@a$^$G3NDj
\e(B
341 \\[henkan-quit]\t
\e$BJQ49Cf;_
\e(B
343 (hinsimei "
\e$BIJ;lL>
\e(B:")
344 (jishotouroku-yomi "
\e$B<-=qEPO?!X
\e(B%s
\e$B!Y
\e(B
\e$BFI$_
\e(B :")
345 (touroku-jishomei "
\e$BEPO?<-=qL>
\e(B:" )
346 (registerd "
\e$B<-=q9`L\!X
\e(B%s
\e$B!Y
\e(B(%s: %s)
\e$B$r
\e(B%s
\e$B$KEPO?$7$^$7$?!#
\e(B" )
347 (yomi "
\e$B$h$_!'
\e(B")
348 ; (no-yomi "
\e$B!X
\e(B%s
\e$B!Y$N<-=q9`L\$O$"$j$^$;$s!#
\e(B")
349 (no-yomi "
\e$B<-=q9`L\!X
\e(B%s
\e$B!Y$O$"$j$^$;$s!#
\e(B")
350 (jisho "
\e$B<-=q!'
\e(B")
351 (hindo "
\e$BIQEY!'
\e(B")
352 (kanji "
\e$B4A;z!'
\e(B")
353 (register-notify "
\e$B<-=q9`L\!X
\e(B%s
\e$B!Y
\e(B(%s: %s)
\e$B$r
\e(B%s
\e$B$KEPO?$7$^$9!#
\e(B")
354 (cannot-remove "
\e$B%7%9%F%`<-=q9`L\$O:o=|$G$-$^$;$s!#
\e(B")
355 (enter-hindo "
\e$BIQEY$rF~$l$F2<$5$$
\e(B: ")
356 (remove-notify "
\e$B<-=q9`L\!X
\e(B%s
\e$B!Y
\e(B(%s)
\e$B$r
\e(B%s
\e$B$+$i:o=|$7$^$9!#
\e(B")
357 (removed "
\e$B<-=q9`L\!X
\e(B%s
\e$B!Y
\e(B(%s)
\e$B$r
\e(B%s
\e$B$+$i:o=|$7$^$7$?!#
\e(B")
358 (jishomei "
\e$B<-=qL>
\e(B:" )
359 (comment "
\e$B%3%a%s%H
\e(B: ")
360 (jisho-comment "
\e$B<-=q
\e(B:%s:
\e$B%3%a%s%H
\e(B:%s")
361 (param ("
\e$B#N
\e(B (
\e$BBg
\e(B )
\e$BJ8@a2r@O$N#N
\e(B"
362 "
\e$BBgJ8@aCf$N>.J8@a$N:GBg?t
\e(B"
363 "
\e$B448l$NIQEY$N%Q%i%a!<%?
\e(B"
364 "
\e$B>.J8@aD9$N%Q%i%a!<%?
\e(B"
365 "
\e$B448lD9$N%Q%i%a!<%?
\e(B"
366 "
\e$B:#;H$C$?$h%S%C%H$N%Q%i%a!<%?
\e(B"
367 "
\e$B<-=q$N%Q%i%a!<%?
\e(B"
368 "
\e$B>.J8@a$NI>2ACM$N%Q%i%a!<%?
\e(B"
369 "
\e$BBgJ8@aD9$N%Q%i%a!<%?
\e(B"
370 "
\e$B>.J8@a?t$N%Q%i%a!<%?
\e(B"
371 "
\e$B5?;wIJ;l
\e(B
\e$B?t;z$NIQEY
\e(B"
372 "
\e$B5?;wIJ;l
\e(B
\e$B%+%J$NIQEY
\e(B"
373 "
\e$B5?;wIJ;l
\e(B
\e$B1Q?t$NIQEY
\e(B"
374 "
\e$B5?;wIJ;l
\e(B
\e$B5-9f$NIQEY
\e(B"
375 "
\e$B5?;wIJ;l
\e(B
\e$BJD3g8L$NIQEY
\e(B"
376 "
\e$B5?;wIJ;l
\e(B
\e$BIUB08l$NIQEY
\e(B"
377 "
\e$B5?;wIJ;l
\e(B
\e$B3+3g8L$NIQEY
\e(B"))
380 ((open-wnn "Host %s
\e$AIO5D
\e(B cWnn
\e$ARQ>-Fp6/AK
\e(B")
381 (no-rcfile "
\e$ATZ
\e(B%s
\e$AIOC;SP
\e(B egg-startup-file")
382 (file-saved "Wnn
\e$A5DF56HND<~:M4G5dPEO"RQ>-MK3vAK
\e(B")
383 (henkan-mode-indicator "
\e$A::
\e(B")
384 (begin-henkan "
\e$A1d;;?*J<WV7{AP
\e(B: ")
385 (end-henkan "
\e$A1d;;=aJxWV7{AP
\e(B: ")
386 (kugiri-dai "
\e$A4JWi7V8nWV7{AP
\e(B: ")
387 (kugiri-sho "
\e$A5%4J7V8nWV7{AP
\e(B: ")
388 (face-henkan "
\e$A1d;;Gx<d1mJ>JtPT
\e(B: ")
389 (face-dai "
\e$A4JWiGx<d1mJ>JtPT
\e(B: ")
390 (face-sho "
\e$A5%4JGx<d1mJ>JtPT
\e(B: ")
391 (jikouho "
\e$A4N:nQ!
\e(B:")
392 (off-msg "%s %s(%s:%s)
\e$ARQ1;
\e(B off
\e$A5tAK
\e(B")
393 (henkan-help "
\e$A::WV1d;;D#J=
\e(B:
395 \\[henkan-first-bunsetu]\t
\e$AOHM74JWi
\e(B\t\\[henkan-last-bunsetu]\t
\e$A=aN24JWi
\e(B
396 \\[henkan-backward-bunsetu]\t
\e$AG0R;8v4JWi
\e(B\t\\[henkan-forward-bunsetu]\t
\e$AOBR;8v4JWi
\e(B
398 \\[henkan-next-kouho-dai]\t
\e$A4JWi4N:nQ!
\e(B\t\\[henkan-next-kouho-sho]\t
\e$A5%4J4N:nQ!
\e(B
399 \\[henkan-previous-kouho]\t
\e$AG0:nQ!
\e(B\t\\[henkan-next-kouho]\t
\e$A4N:nQ!
\e(B
400 \\[henkan-bunsetu-nobasi-dai]\t
\e$A4JWi@)U9
\e(B\t\\[henkan-bunsetu-chijime-dai]\t
\e$A4JWiJUKu
\e(B
401 \\[henkan-bunsetu-nobasi-sho]\t
\e$A5%4J@)U9
\e(B\t\\[henkan-bunsetu-chijime-sho]\t
\e$A5%4JJUKu
\e(B
402 \\[henkan-select-kouho-dai]\t
\e$A4JWi1d;;:r295DQ!Tq
\e(B\t\\[henkan-select-kouho-sho]\t
\e$A5%4J1d;;:r295DQ!Tq
\e(B
403 \\[henkan-select-kouho-dai]\t
\e$A1d;;:r295DQ!Tq
\e(B
405 \\[henkan-kakutei]\t
\e$AH+NDH76(
\e(B\t\\[henkan-kakutei-before-point]\t
\e$AIOR;4JWiN*V95DH76(
\e(B
406 \\[henkan-quit]\t
\e$AM#V91d;;
\e(B
408 (hinsimei "
\e$A4JPTC{
\e(B:")
409 (jishotouroku-yomi "
\e$A4G5d5GB<!:
\e(B%s
\e$A!;F47(
\e(B :")
410 (touroku-jishomei "
\e$A5GB<4G5dC{
\e(B:" )
411 (registerd "
\e$A4G5dOnD?!:
\e(B%s
\e$A!;
\e(B(%s: %s)
\e$ARQ1;5GB<5=
\e(B %s
\e$AVPAK
\e(B" )
412 (yomi "
\e$AF47(
\e$B!'
\e(B")
413 ; (no-yomi "
\e$A!:
\e(B%s
\e$A!;5D4G5dOnD?2;4fTZ
\e(B")
414 (no-yomi "
\e$A4G5dOnD?!:
\e(B%s
\e$A!;2;4fTZ
\e(B")
415 (jisho "
\e$A4G5d
\e(B:")
416 (hindo "
\e$AF56H
\e$B!'
\e(B")
417 (kanji "
\e$A::WV
\e$B!'
\e(B")
418 (register-notify "
\e$A4G5dOnD?!:
\e(B%s
\e$A!;
\e(B(%s: %s)
\e$A=+R*1;5GB<5=
\e(B %s
\e$AVP
\e(B")
419 (cannot-remove "
\e$AO5M34G5dOn2;D\O{3}
\e(B")
420 (enter-hindo "
\e$AGkJdHkF56H
\e(B: ")
421 (remove-notify "
\e$A4G5dOnD?!:
\e(B%s
\e$A!;
\e(B(%s)
\e$A=+R*4S
\e(B %s
\e$AVPO{3}
\e(B")
422 (removed "
\e$A4G5dOnD?!:
\e(B%s
\e$A!;
\e(B(%s)
\e$ARQ>-4S
\e(B%s
\e$AVPO{3}AK
\e(B")
423 (jishomei "
\e$A4G5dC{
\e(B:" )
424 (comment "
\e$AW"JM
\e(B: ")
425 (jisho-comment "
\e$A4G5d
\e(B:%s:
\e$AW"JM
\e(B:%s")
426 (param ("
\e$A=bNv4JWi8vJ}
\e(B"
427 "
\e$A4JWiVP4J5DWn4s8vJ}
\e(B"
430 "
\e$AKDIyU}H76HH(V5
\e(B"
431 "
\e$A8U2ESC9}H(V5
\e(B"
432 "
\e$AWV5dSEOH<6H(V5
\e(B"
433 "
\e$A4JF@<[>yV5H(V5
\e(B"
435 "
\e$A4JWiVP4JJ}H(V5
\e(B"
437 "
\e$AS"NDWVD85DF56H
\e(B"
439 "
\e$A?*@(;!5DF56H
\e(B"
440 "
\e$A1U@(;!5DF56H
\e(B"
441 "
\e$AWn4s:r298vJ}
\e(B"
446 ((open-wnn "
\e$(CH#=:F.
\e(B %s
\e$(C@G
\e(B kWnn
\e$(C8&
\e(B
\e$(CQ&TQG_@>4O4Y
\e(B.")
447 (no-rcfile "%s
\e$(C?!
\e(B egg-startup-file
\e$(C@L
\e(B
\e$(C>x@>4O4Y
\e(B.")
448 (file-saved "kWnn
\e$(C@G
\e(B
\e$(C^:SxoW\C!$^vnpoW\C8&
\e(B
\e$(C?E0e@>4O4Y
\e(B.")
449 (henkan-mode-indicator "
\e$(CyS
\e(B")
450 (begin-henkan "
\e$(C\(|5
\e(B
\e$(CKRc7
\e(B
\e$(CY~m.fj
\e(B: ")
451 (end-henkan "
\e$(C\(|5
\e(B
\e$(Cp{Vu
\e(B
\e$(CY~m.fj
\e(B: ")
452 (kugiri-dai "
\e$(CS^Y~o=
\e(B
\e$(CO!\,
\e(B
\e$(CY~m.fj
\e(B: ")
453 (kugiri-sho "
\e$(Ca3Y~o=
\e(B
\e$(CO!\,
\e(B
\e$(CY~m.fj
\e(B: ")
454 (face-henkan "
\e$(C\(|5
\e(B
\e$(CO!J`
\e(B
\e$(CxvcF
\e(B
\e$(CaU`u
\e(B: ")
455 (face-dai "
\e$(CS^Y~o=
\e(B
\e$(CO!J`
\e(B
\e$(CxvcF
\e(B
\e$(CaU`u
\e(B: ")
456 (face-sho "
\e$(Ca3Y~o=
\e(B
\e$(CO!J`
\e(B
\e$(CxvcF
\e(B
\e$(CaU`u
\e(B: ")
457 (jikouho "
\e$(C4Y@=
\e(B
\e$(C}&\M
\e(B:")
458 (off-msg "%s %s(%s:%s)
\e$(C@;
\e(B off
\e$(CG_@>4O4Y
\e(B.")
459 (henkan-help "
\e$(CySm.
\e(B
\e$(C\(|5
\e(B
\e$(C8p5e
\e(B:
460 \e$(CY~o=
\e(B
\e$(Cl9TQ
\e(B
461 \\[henkan-first-bunsetu]\t
\e$(C`;Ti
\e(B
\e$(CY~o=
\e(B\t\\[henkan-last-bunsetu]\t
\e$(C}-Z-
\e(B
\e$(CY~o=
\e(B
462 \\[henkan-backward-bunsetu]\t
\e$(CrAnq
\e(B
\e$(CY~o=
\e(B\t\\[henkan-forward-bunsetu]\t
\e$(CrA}-
\e(B
\e$(CY~o=
\e(B
463 \e$(C\(|5
\e(B
\e$(C\(LZ
\e(B
464 \\[henkan-next-kouho-dai]\t
\e$(CS^Y~o=
\e(B
\e$(C4Y@=
\e(B
\e$(C}&\M
\e(B\t\\[henkan-next-kouho-sho]\t
\e$(Ca3Y~o=
\e(B
\e$(C4Y@=
\e(B
\e$(C}&\M
\e(B
465 \\[henkan-previous-kouho]\t
\e$(Cnq
\e(B
\e$(C}&\M
\e(B\t\\[henkan-next-kouho]\t
\e$(C4Y@=
\e(B
\e$(C}&\M
\e(B
466 \\[henkan-bunsetu-nobasi-dai]\t
\e$(CS^Y~o=
\e(B
\e$(C|*S^
\e(B\t\\[henkan-bunsetu-chijime-dai]\t
\e$(CS^Y~o=
\e(B
\e$(Cuja3
\e(B
467 \\[henkan-bunsetu-nobasi-sho]\t
\e$(Ca3Y~o=
\e(B
\e$(C|*S^
\e(B\t\\[henkan-bunsetu-chijime-sho]\t
\e$(Ca3Y~o=
\e(B
\e$(Cuja3
\e(B
468 \\[henkan-select-kouho-dai]\t
\e$(CS^Y~o=
\e(B
\e$(C\(|5
\e(B
\e$(C4Y@=
\e(B
\e$(C}&\M
\e(B\t\\[henkan-select-kouho-sho]\t
\e$(Ca3Y~o=
\e(B
\e$(C\(|5
\e(B
\e$(C4Y@=
\e(B
\e$(C}&\M
\e(B
469 \e$(C\(|5
\e(B
\e$(C|,oR
\e(B
470 \\[henkan-kakutei]\t
\e$(CnoY~o=
\e(B
\e$(C|,oR
\e(B\t\\[henkan-kakutei-before-point]\t
\e$(CrAnq
\e(B
\e$(CY~o=1nAv
\e(B
\e$(C|,oR
\e(B
471 \\[henkan-quit]\t
\e$(C\(|5
\e(B
\e$(Cqir-
\e(B
473 (hinsimei "
\e$(Cy!^rY#
\e(B: ")
474 (jishotouroku-yomi "
\e$(C^vnp
\e(B
\e$(CTtVb!:
\e(B%s
\e$(C!;
\e(B
\e$(CGQ1[
\e(B: ")
475 (touroku-jishomei "
\e$(CTtVb
\e(B
\e$(C^vnpY#
\e(B: " )
476 (registerd "
\e$(C^vnp
\e(B
\e$(Cz#YM!:
\e(B%s
\e$(C!;
\e(B(%s: %s)
\e$(C@;
\e(B %s
\e$(C?!
\e(B
\e$(CTtVbG_@>4O4Y
\e(B." )
477 (yomi "
\e$(CGQ1[
\e(B: ")
478 ; (no-yomi "
\e$(C!:
\e(B%s
\e$(C!;@G
\e(B
\e$(C^vnp
\e(B
\e$(Cz#YM@L
\e(B
\e$(C>x@>4O4Y
\e(B.")
479 (no-yomi "
\e$(C^vnp
\e(B
\e$(Cz#YM
\e(B
\e$(C!:
\e(B%s
\e$(C!;@L
\e(B
\e$(C>x@>4O4Y
\e(B.")
480 (jisho "
\e$(C^vnp
\e(B: ")
481 (hindo "
\e$(C^:Sx
\e(B: ")
482 (kanji "
\e$(CySm.
\e(B: ")
483 (register-notify "
\e$(C^vnp
\e(B
\e$(Cz#YM
\e(B
\e$(C!:
\e(B%s
\e$(C!;
\e(B(%s: %s)
\e$(C@;
\e(B %s
\e$(C?!
\e(B
\e$(CTtVbGO0Z@>4O4Y
\e(B.")
484 (cannot-remove "
\e$(C=C=:E[
\e(B
\e$(C^vnpz#YM@:
\e(B
\e$(Ca<K[GR
\e(B
\e$(C<v
\e(B
\e$(C>x@>4O4Y
\e(B.")
485 (enter-hindo "
\e$(C^:Sx8&
\e(B
\e$(Cl}UtGO=J=C?@
\e(B: ")
486 (remove-notify "
\e$(C^vnpz#YM!:
\e(B%s
\e$(C!;
\e(B(%s)
\e$(C@;
\e(B %s
\e$(C:NEM
\e(B
\e$(Ca<K[GO0Z@>4O4Y
\e(B.")
487 (removed "
\e$(C^vnp
\e(B
\e$(Cz#YM!:
\e(B%s
\e$(C!;
\e(B(%s)
\e$(C@;
\e(B %s
\e$(C:NEM
\e(B
\e$(Ca<K[G_@>4O4Y
\e(B.")
488 (jishomei "
\e$(C^vnpY#
\e(B: " )
489 (comment "
\e$(CqI`7
\e(B: ")
490 (jisho-comment "
\e$(C^vnp
\e(B:%s:
\e$(CqI`7
\e(B:%s")
491 (param ("N (
\e$(CS^
\e(B)
\e$(CY~o=
\e(B
\e$(Cz0`0@G
\e(B N"
492 "
\e$(CS^Y~o=
\e(B
\e$(C>H@G
\e(B
\e$(Ca3Y~o=
\e(B
\e$(C<v@G
\e(B
\e$(CuLS^b&
\e(B"
493 "
\e$(CJOe^@G
\e(B
\e$(C^:Sx
\e(B
\e$(CFP7/9LEM
\e(B"
494 "
\e$(Ca3Y~o=
\e(B
\e$(C1f@L
\e(B
\e$(CFP7/9LEM
\e(B"
495 "
\e$(CJOe^@G
\e(B
\e$(C1f@L
\e(B
\e$(CFP7/9LEM
\e(B"
496 "
\e$(Cq~PQ
\e(B
\e$(C^EiDG_@>4O4Y
\e(B
\e$(C:qF.
\e(B
\e$(CFP7/9LEM
\e(B"
497 "
\e$(C^vnp@G
\e(B
\e$(CFP7/9LEM
\e(B"
498 "
\e$(Ca3Y~o=@G
\e(B
\e$(CxDJ$v7
\e(B
\e$(CFP7/9LEM
\e(B"
499 "
\e$(CS^Y~o=
\e(B
\e$(C1f@L
\e(B
\e$(CFP7/9LEM
\e(B"
500 "
\e$(Ca3Y~o=
\e(B
\e$(Cb&
\e(B
\e$(CFP7/9LEM
\e(B"
501 "
\e$(CJ#_L
\e(B
\e$(Cy!^r
\e(B:
\e$(Cb&m.@G
\e(B
\e$(C^:Sx
\e(B"
502 "
\e$(CJ#_L
\e(B
\e$(Cy!^r
\e(B:
\e$(CGQ1[@G
\e(B
\e$(C^:Sx
\e(B"
503 "
\e$(CJ#_L
\e(B
\e$(Cy!^r
\e(B:
\e$(CgHb&m.@G
\e(B
\e$(C^:Sx
\e(B"
504 "
\e$(CJ#_L
\e(B
\e$(Cy!^r
\e(B:
\e$(CQ@{\@G
\e(B
\e$(C^:Sx
\e(B"
505 "
\e$(CJ#_L
\e(B
\e$(Cy!^r
\e(B:
\e$(CxMN@{A@G
\e(B
\e$(C^:Sx
\e(B"
506 "
\e$(CJ#_L
\e(B
\e$(Cy!^r
\e(B:
\e$(C]>aUe^@G
\e(B
\e$(C^:Sx
\e(B"
507 "
\e$(CJ#_L
\e(B
\e$(Cy!^r
\e(B:
\e$(CKRN@{A@G
\e(B
\e$(C^:Sx
\e(B"))
513 ;;; Entry functions for egg-startup-file
516 ;(defvar wnn-lang-name nil)
517 ;(defvar default-wnn-lang-name "ja_JP") ; 92.8.19 by T.Matsuzawa
519 (defvar skip-wnn-setenv-if-env-exist nil
520 "skip wnn environment setting when the same name environment exists")
522 (defmacro push-end (val loc)
523 (list 'push-end-internal val (list 'quote loc)))
525 (defun push-end-internal (val loc)
528 (nconc (eval loc) (cons val nil))
531 (defun is-wnn6-server ()
532 (= (wnn-server-version) 61697))
534 (defun add-wnn-dict (dfile hfile priority dmode hmode &optional dpaswd hpaswd)
535 ; (open-wnn-if-disconnected)
536 (if (null (wnn-server-dict-add
537 (substitute-in-file-name dfile)
538 (substitute-in-file-name hfile)
539 priority dmode hmode dpaswd hpaswd))
540 (egg:error (wnn-server-get-msg))))
542 (defun set-wnn-fuzokugo (ffile)
543 ; (open-wnn-if-disconnected)
544 (if (null (wnn-server-fuzokugo-set (substitute-in-file-name ffile)))
545 (egg:error (wnn-server-get-msg))))
547 ;; ###jhod Currently very broken. Needs to be rewritten for the new
548 ;; wnn-server-set-param
549 (defun set-wnn-param (&rest param)
550 "Set parameters for the current wnn session.
551 Uses property list PARAM, or prompts if called interactively.
553 Currently very broken."
555 ; (open-wnn-if-disconnected)
556 (let ((current-param (wnn-server-get-param))
558 (message (egg:msg-get 'param)))
562 (if (or (null param) (null (car param)))
564 (read-from-minibuffer (concat (car message) ": ")
565 (int-to-string (car current-param))))
568 (setq current-param (cdr current-param)
569 message (cdr message)
570 param (if param (cdr param) nil)))
571 (apply 'wnn-server-set-param (nreverse new-param))))
576 (defun add-wnn-fisys-dict (dfile hfile hmode &optional hpaswd)
577 ; (open-wnn-if-disconnected)
578 (if (null (wnn-server-fisys-dict-add
579 (substitute-in-file-name dfile)
580 (substitute-in-file-name hfile)
582 (egg:error (wnn-server-get-msg))))
584 (defun add-wnn-fiusr-dict (dfile hfile dmode hmode &optional dpaswd hpaswd)
585 ; (open-wnn-if-disconnected)
586 (if (null (wnn-server-fiusr-dict-add
587 (substitute-in-file-name dfile)
588 (substitute-in-file-name hfile)
589 dmode hmode dpaswd hpaswd))
590 (egg:error (wnn-server-get-msg))))
592 (defun add-wnn-notrans-dict (dfile priority dmode &optional dpaswd)
593 ; (open-wnn-if-disconnected)
594 (if (null (wnn-server-notrans-dict-add
595 (substitute-in-file-name dfile)
596 priority dmode dpaswd))
597 (egg:error (wnn-server-get-msg))))
599 (defun add-wnn-bmodify-dict (dfile priority dmode &optional dpaswd)
600 ; (open-wnn-if-disconnected)
601 (if (null (wnn-server-bmodify-dict-add
602 (substitute-in-file-name dfile)
603 priority dmode dpaswd))
604 (egg:error (wnn-server-get-msg))))
606 (defun set-last-is-first-mode (mode)
607 ; (open-wnn-if-disconnected)
608 (if (null (wnn-server-set-last-is-first
610 (egg:error (wnn-server-get-msg))))
612 (defun set-complex-conv-mode (mode)
613 ; (open-wnn-if-disconnected)
614 (if (null (wnn-server-set-complex-conv-mode
616 (egg:error (wnn-server-get-msg))))
618 (defun set-okuri-learn-mode (mode)
619 ; (open-wnn-if-disconnected)
620 (if (null (wnn-server-set-okuri-learn-mode
622 (egg:error (wnn-server-get-msg))))
624 (defun set-okuri-flag (mode)
625 ; (open-wnn-if-disconnected)
626 (if (null (wnn-server-set-okuri-flag
628 (egg:error (wnn-server-get-msg))))
630 (defun set-prefix-learn-mode (mode)
631 ; (open-wnn-if-disconnected)
632 (if (null (wnn-server-set-prefix-learn-mode
634 (egg:error (wnn-server-get-msg))))
636 (defun set-prefix-flag (mode)
637 ; (open-wnn-if-disconnected)
638 (if (null (wnn-server-set-prefix-flag
640 (egg:error (wnn-server-get-msg))))
642 (defun set-suffix-learn-mode (mode)
643 ; (open-wnn-if-disconnected)
644 (if (null (wnn-server-set-suffix-learn-mode
646 (egg:error (wnn-server-get-msg))))
648 (defun set-common-learn-mode (mode)
649 ; (open-wnn-if-disconnected)
650 (if (null (wnn-server-set-common-learn-mode
652 (egg:error (wnn-server-get-msg))))
654 (defun set-freq-func-mode (mode)
655 ; (open-wnn-if-disconnected)
656 (if (null (wnn-server-set-freq-func-mode
658 (egg:error (wnn-server-get-msg))))
660 (defun set-numeric-mode (mode)
661 ; (open-wnn-if-disconnected)
662 (if (null (wnn-server-set-numeric-mode
664 (egg:error (wnn-server-get-msg))))
666 (defun set-alphabet-mode (mode)
667 ; (open-wnn-if-disconnected)
668 (if (null (wnn-server-set-alphabet-mode
670 (egg:error (wnn-server-get-msg))))
672 (defun set-symbol-mode (mode)
673 ; (open-wnn-if-disconnected)
674 (if (null (wnn-server-set-symbol-mode
676 (egg:error (wnn-server-get-msg))))
678 (defun set-yuragi-mode (mode)
679 ; (open-wnn-if-disconnected)
680 (if (null (wnn-server-set-yuragi-mode
682 (egg:error (wnn-server-get-msg))))
684 (defun wnn6-reset-prev-info ()
685 ; (open-wnn-if-disconnected)
686 (if (null (wnn-reset-previous-info))
687 (egg:error (wnn-server-get-msg))))
693 (defun make-host-list (name list)
694 (cons name (delete name list)))
696 (defun set-wnn-host-name (name)
697 "Set egg/wnn to connect to jserver on host NAME, or prompt for it."
698 (interactive "sHost name: ")
699 (let ((wnn-server-type 'jserver)) (close-wnn))
702 name (or jserver-list (list (or wnn-host-name (getenv "JSERVER") "localhost"))))))
704 (fset 'set-jserver-host-name (symbol-function 'set-wnn-host-name))
706 (defun set-cwnn-host-name (name)
707 "Set egg/wnn to connect to cserver on host NAME, or prompt for it."
708 (interactive "sHost name: ")
709 (let ((wnn-server-type 'cserver)) (close-wnn))
712 name (or cserver-list (list (or cwnn-host-name (getenv "CSERVER") "localhost"))))))
714 (fset 'set-cserver-host-name (symbol-function 'set-cwnn-host-name))
716 (defun set-kwnn-host-name (name)
717 "Set egg/wnn to connect to kserver on host NAME, or prompt for it."
718 (interactive "sHost name: ")
719 (let ((wnn-server-type 'kserver)) (close-wnn))
722 name (or kserver-list (list (or kwnn-host-name (getenv "KSERVER") "localhost"))))))
724 (fset 'set-kserver-host-name (symbol-function 'set-kwnn-host-name))
726 (defun open-wnn-if-disconnected ()
727 (if (null (wnn-server-isconnect))
729 (cond ((eq wnn-server-type 'jserver)
731 (list (or wnn-host-name (getenv "JSERVER") "localhost"))))
732 ((eq wnn-server-type 'cserver)
734 (list (or cwnn-host-name (getenv "CSERVER") "localhost"))))
735 ((eq wnn-server-type 'kserver)
737 (list (or kwnn-host-name (getenv "KSERVER") "localhost"))))))
738 (loginname (user-login-name)))
741 (let ((hostname (car hostlist)))
742 (if (wnn-server-open hostname loginname)
744 (cond ((eq wnn-server-type 'jserver)
745 (setq wnn-host-name hostname))
746 ((eq wnn-server-type 'cserver)
747 (setq cwnn-host-name hostname))
748 ((eq wnn-server-type 'kserver)
749 (setq kwnn-host-name hostname)))
750 (throw 'succ hostname))))
751 (setq hostlist (cdr hostlist)))
752 (egg:error (wnn-server-get-msg))))))
754 (defvar egg-default-startup-file "eggrc"
755 "*Egg startup file name (system default)")
757 (defvar egg-startup-file ".eggrc"
758 "*Egg startup file name.")
760 ;;; 92/6/30, by K.Handa
761 (defvar egg-startup-file-search-path '("~" ".")
762 "*List of directories to search for egg-startup-file
763 whose name defaults to .eggrc.")
765 (defun egg:search-file (filename searchpath)
766 (if (file-name-directory filename)
767 (let ((file (substitute-in-file-name (expand-file-name filename))))
768 (if (file-exists-p file) file nil))
771 (let ((path (car searchpath)))
773 (let ((file (substitute-in-file-name
774 (expand-file-name filename path))))
775 (if (file-exists-p file) (throw 'answer file)))))
776 (setq searchpath (cdr searchpath)))
779 (defun EGG:open-wnn ()
780 (let ((host (open-wnn-if-disconnected)))
781 (notify (egg:msg-get 'open-wnn)
783 (let* ((path (append egg-startup-file-search-path load-path))
784 (eggrc (or (egg:search-file egg-startup-file path)
785 (egg:search-file egg-default-startup-file load-path))))
786 (if (or (null skip-wnn-setenv-if-env-exist)
787 (null (wnn-server-dict-list)))
788 (if eggrc (load-file eggrc)
789 (let ((wnnenv-sticky nil)) (wnn-server-close))
790 (egg:error (egg:msg-get 'no-rcfile) path)))
791 (run-hooks 'egg:open-wnn-hook))))
793 (defun disconnect-wnn ()
794 "Dump connection to Wnn servers, discarding dictionary and frequency changes."
796 (if (wnn-server-isconnect) (wnn-server-close)))
799 "Cleanly shutdown connection to Wnn servers, saving data and calling egg:close-wnn-hook"
801 (if (wnn-server-isconnect)
803 (wnn-server-set-rev nil)
804 (if (wnn-server-dict-save)
805 (message (egg:msg-get 'file-saved))
806 (message (wnn-server-get-msg)))
808 (wnn-server-set-rev t)
809 (if (wnn-server-dict-save)
810 (message (egg:msg-get 'file-saved))
811 (message (wnn-server-get-msg)))
814 (run-hooks 'egg:close-wnn-hook))))
816 (defun set-wnn-reverse (arg)
817 ; (open-wnn-if-disconnected)
818 (wnn-server-set-rev arg))
824 (defvar egg:*kanji-kanabuff* nil)
826 (defvar *bunsetu-number* nil)
827 (defvar *zenkouho-suu* nil)
828 (defvar *zenkouho-offset* nil)
830 (defun bunsetu-length-sho (number)
831 (cdr (wnn-server-bunsetu-yomi number)))
833 (defun bunsetu-length (number)
834 (let ((max (wnn-server-dai-end number))
836 (l (bunsetu-length-sho number)))
838 (setq l (+ l (bunsetu-length-sho i)))
842 (defun bunsetu-position (number)
843 (let ((pos egg:*region-start*) (i 0))
845 (setq pos (+ pos (length (bunsetu-kanji i))
846 (if (wnn-server-dai-top (1+ i))
847 (length egg:*dai-bunsetu-kugiri*)
848 (length egg:*sho-bunsetu-kugiri*))))
852 (defun bunsetu-kanji (number) (car (wnn-server-bunsetu-kanji number)))
854 (defun bunsetu-yomi (number) (car (wnn-server-bunsetu-yomi number)))
856 (defun bunsetu-kouho-suu (bunsetu-number init)
857 (if (or init (/= (wnn-server-zenkouho-bun) bunsetu-number))
858 (setq *zenkouho-offset* (wnn-server-zenkouho bunsetu-number egg:*dai*)))
859 (setq *zenkouho-suu* (wnn-server-zenkouho-suu)))
861 (defun bunsetu-kouho-list (bunsetu-number init)
862 (if (or init (/= (wnn-server-zenkouho-bun) bunsetu-number))
863 (setq *zenkouho-offset* (wnn-server-zenkouho bunsetu-number egg:*dai*)))
864 (let ((i (1- (setq *zenkouho-suu* (wnn-server-zenkouho-suu))))
867 (setq val (cons (wnn-server-get-zenkouho i) val))
871 (defun bunsetu-kouho-number (bunsetu-number init)
872 (if (or init (/= (wnn-server-zenkouho-bun) bunsetu-number))
873 (setq *zenkouho-offset* (wnn-server-zenkouho bunsetu-number egg:*dai*)))
877 ;;;; User entry : henkan-region, henkan-paragraph, henkan-sentence
880 (defun egg:henkan-face-on ()
881 ;; Make an extent if henkan extent does not exist.
882 ;; Move henkan extent to henkan region.
883 (if egg:*henkan-face*
885 (if (extentp egg:*henkan-extent*)
886 (set-extent-endpoints egg:*henkan-extent* egg:*region-start* egg:*region-end*)
887 (setq egg:*henkan-extent* (make-extent egg:*region-start* egg:*region-end*))
888 (set-extent-property egg:*henkan-extent* 'start-open nil)
889 (set-extent-property egg:*henkan-extent* 'end-open nil)
890 (set-extent-property egg:*henkan-extent* 'detachable nil))
891 (set-extent-face egg:*henkan-extent* egg:*henkan-face*))))
893 (defun egg:henkan-face-off ()
894 ;; detach henkan extent from the current buffer.
895 (and egg:*henkan-face*
896 (extentp egg:*henkan-extent*)
897 (detach-extent egg:*henkan-extent*) ))
900 (defun henkan-region (start end)
901 "Convert a text in the region between START and END from kana to kanji."
903 (if (interactive-p) (set-mark (point))) ;;; to be fixed
904 (henkan-region-internal start end))
906 (defun gyaku-henkan-region (start end)
907 "Convert a text in the region between START and END from kanji to kana."
909 (if (interactive-p) (set-mark (point))) ;;; to be fixed
910 (henkan-region-internal start end t))
912 ;(defvar henkan-mode-indicator "
\e$B4A
\e(B")
914 (defun henkan-region-internal (start end &optional rev)
915 ;; region
\e$B$r$+$J4A;zJQ49$9$k
\e(B
916 (if egg:henkan-mode-in-use nil
917 (let ((finished nil))
920 (setq egg:henkan-mode-in-use t)
921 (if (null (wnn-server-isconnect)) (EGG:open-wnn))
922 (setq egg:*kanji-kanabuff* (buffer-substring start end))
924 (if (and (is-wnn6-server)
926 egg:*henkan-fence-mode*
929 (wnn6-reset-prev-info)))
931 (setq *bunsetu-number* 0)
932 (setq egg:*dai* t) ; 92.9.8 by T.shingu
933 (wnn-server-set-rev rev)
934 (let ((result (wnn-server-henkan-begin egg:*kanji-kanabuff*)))
936 (egg:error (wnn-server-get-msg))
939 (mode-line-egg-mode-update (egg:msg-get 'henkan-mode-indicator))
941 (or (markerp egg:*region-start*)
942 (setq egg:*region-start* (make-marker)))
943 (or (markerp egg:*region-end*)
944 (set-marker-insertion-type
945 (setq egg:*region-end* (make-marker)) t))
946 (if (null (marker-position egg:*region-start*))
948 ;;;(setq egg:*global-map-backup* (current-global-map))
949 ;;(setq egg:*local-map-backup* (current-local-map))
950 ;;(and (boundp 'disable-undo) (setq disable-undo t))
951 (delete-region start end)
954 (insert egg:*henkan-open*)
955 (set-marker egg:*region-start* (point))
956 (insert egg:*henkan-close*)
957 (set-marker egg:*region-end* egg:*region-start*)
958 (goto-char egg:*region-start*)
962 (delete-region (- egg:*region-start* (length egg:*fence-open*))
964 (delete-region egg:*region-end*
965 (+ egg:*region-end* (length egg:*fence-close*)))
966 (goto-char egg:*region-start*)
967 (insert egg:*henkan-open*)
968 (set-marker egg:*region-start* (point))
969 (goto-char egg:*region-end*)
970 (let ((point (point)))
971 (insert egg:*henkan-close*)
972 (set-marker egg:*region-end* point))
974 (delete-region start end)
976 (henkan-insert-kouho 0 result)
978 (egg:bunsetu-face-on)
979 (henkan-goto-bunsetu 0)
980 ;;;(use-global-map henkan-mode-map)
981 ;;;(use-local-map nil)
982 ;;(use-local-map henkan-mode-map)
983 (run-hooks 'egg:henkan-start-hook)))))
986 ;;(setq disable-undo nil)
987 (setq egg:henkan-mode-in-use nil)
988 (resume-undo-list)))))
991 (defun henkan-paragraph ()
992 "Convert the current paragraph from kana to kanji."
997 (henkan-region-internal (point) end)))
999 (defun gyaku-henkan-paragraph ()
1000 "Convert the current paragraph from kanji to kana."
1003 (let ((end (point)))
1004 (backward-paragraph)
1005 (henkan-region-internal (point) end t)))
1007 (defun henkan-sentence ()
1008 "Convert the current sentence from kana to kanji."
1011 (let ((end (point)))
1013 (henkan-region-internal (point) end)))
1015 (defun gyaku-henkan-sentence ()
1016 "Convert the current sentence from kanji to kana."
1019 (let ((end (point)))
1021 (henkan-region-internal (point) end t)))
1023 (defun henkan-word ()
1024 "Convert the current word from kana to kanji."
1026 (re-search-backward "\\<" nil t)
1027 (let ((start (point)))
1028 (re-search-forward "\\>" nil t)
1029 (henkan-region-internal start (point))))
1031 (defun gyaku-henkan-word ()
1032 "Convert the current word from kanji to kana."
1034 (re-search-backward "\\<" nil t)
1035 (let ((start (point)))
1036 (re-search-forward "\\>" nil t)
1037 (henkan-region-internal start (point) t)))
1040 ;;; Kana Kanji Henkan Henshuu mode
1043 (defun set-egg-henkan-mode-format (open close kugiri-dai kugiri-sho
1044 &optional henkan-face dai-bunsetu-face sho-bunsetu-face)
1045 "
\e$BJQ49
\e(B mode
\e$B$NI=<(J}K!$r@_Dj$9$k!#
\e(BOPEN
\e$B$OJQ49$N;OE@$r<($9J8;zNs$^$?$O
\e(B nil
\e$B!#
\e(B
1046 CLOSE
\e$B$OJQ49$N=*E@$r<($9J8;zNs$^$?$O
\e(B nil
\e$B!#
\e(B
1047 KUGIRI-DAI
\e$B$OBgJ8@a$N6h@Z$j$rI=<($9$kJ8;zNs$^$?$O
\e(B nil
\e$B!#
\e(B
1048 KUGIRI-SHO
\e$B$O>.J8@a$N6h@Z$j$rI=<($9$kJ8;zNs$^$?$O
\e(B nil
\e$B!#
\e(B
1049 optional HENKAN-FACE
\e$B$OJQ496h4V$rI=<($9$k
\e(B face
\e$B$^$?$O
\e(B nil
1050 optional DAI-BUNSETU-FACE
\e$B$OBgJ8@a6h4V$rI=<($9$k
\e(B face
\e$B$^$?$O
\e(B nil
1051 optional SHO-BUNSETU-FACE
\e$B$O>.J8@a6h4V$rI=<($9$k
\e(B face
\e$B$^$?$O
\e(B nil"
1053 (interactive (list (read-string (egg:msg-get 'begin-henkan))
1054 (read-string (egg:msg-get 'end-henkan))
1055 (read-string (egg:msg-get 'kugiri-dai))
1056 (read-string (egg:msg-get 'kugiri-sho))
1057 (cdr (assoc (completing-read (egg:msg-get 'face-henkan)
1060 (cdr (assoc (completing-read (egg:msg-get 'face-dai)
1063 (cdr (assoc (completing-read (egg:msg-get 'face-sho)
1067 (if (or (stringp open) (null open))
1068 (setq egg:*henkan-open* open)
1069 (egg:error "Wrong type of arguments(open): %s" open))
1071 (if (or (stringp close) (null close))
1072 (setq egg:*henkan-close* close)
1073 (egg:error "Wrong type of arguments(close): %s" close))
1075 (if (or (stringp kugiri-dai) (null kugiri-dai))
1076 (setq egg:*dai-bunsetu-kugiri* (or kugiri-dai ""))
1077 (egg:error "Wrong type of arguments(kugiri-dai): %s" kugiri-dai))
1079 (if (or (stringp kugiri-sho) (null kugiri-sho))
1080 (setq egg:*sho-bunsetu-kugiri* (or kugiri-sho ""))
1081 (egg:error "Wrong type of arguments(kugiri-sho): %s" kugiri-sho))
1083 (if (or (null henkan-face) (memq henkan-face (face-list)))
1085 (setq egg:*henkan-face* henkan-face)
1086 (if (extentp egg:*henkan-extent*)
1087 (set-extent-property egg:*henkan-extent* 'face egg:*henkan-face*)))
1088 (egg:error "Wrong type of arguments(henkan-face): %s" henkan-face))
1090 (if (or (null dai-bunsetu-face) (memq dai-bunsetu-face (face-list)))
1092 (setq egg:*dai-bunsetu-face* dai-bunsetu-face)
1093 (if (extentp egg:*dai-bunsetu-extent*)
1094 (set-extent-property egg:*dai-bunsetu-extent* 'face egg:*dai-bunsetu-face*)))
1095 (egg:error "Wrong type of arguments(dai-bunsetu-face): %s" dai-bunsetu-face))
1097 (if (or (null sho-bunsetu-face) (memq sho-bunsetu-face (face-list)))
1099 (setq egg:*sho-bunsetu-face* sho-bunsetu-face)
1100 (if (extentp egg:*sho-bunsetu-extent*)
1101 (set-extent-property egg:*sho-bunsetu-extent* 'face egg:*sho-bunsetu-face*)))
1102 (egg:error "Wrong type of arguments(sho-bunsetu-face): %s" sho-bunsetu-face))
1105 (defun henkan-insert-kouho (start number)
1108 (insert (car (wnn-server-bunsetu-kanji i))
1109 (if (= (1+ i) number)
1111 (if (wnn-server-dai-top (1+ i))
1112 egg:*dai-bunsetu-kugiri*
1113 egg:*sho-bunsetu-kugiri*)))
1116 (defun henkan-kakutei ()
1117 "Accept the current henkan region"
1119 (egg:bunsetu-face-off)
1120 (egg:henkan-face-off)
1121 (setq egg:henkan-mode-in-use nil)
1122 (setq egg:*in-fence-mode* nil)
1123 (delete-region (- egg:*region-start* (length egg:*henkan-open*))
1125 (delete-region egg:*region-start* egg:*region-end*)
1126 (delete-region egg:*region-end* (+ egg:*region-end* (length egg:*henkan-close*)))
1127 (goto-char egg:*region-start*)
1128 (setq egg:*sai-henkan-start* (point))
1130 (let ((i 0) (max (wnn-server-bunsetu-suu)))
1131 (setq egg:*old-bunsetu-suu* max)
1133 (insert (car (wnn-server-bunsetu-kanji i )))
1134 (if (not overwrite-mode)
1138 (setq egg:*sai-henkan-end* (point))
1139 (wnn-server-hindo-update)
1141 (run-hooks 'egg:henkan-end-hook)
1144 ;; 92.7.10 by K.Handa
1145 (defun henkan-kakutei-first-char ()
1146 "
\e$B3NDjJ8;zNs$N:G=i$N0lJ8;z$@$1A^F~$9$k!#
\e(B"
1148 (egg:bunsetu-face-off)
1149 (egg:henkan-face-off)
1150 (setq egg:henkan-mode-in-use nil)
1151 (setq egg:*in-fence-mode* nil)
1152 (delete-region (- egg:*region-start* (length egg:*henkan-open*))
1154 (delete-region egg:*region-start* egg:*region-end*)
1155 (delete-region egg:*region-end* (+ egg:*region-end*
1156 ;; 92.8.5 by Y.Kasai
1157 (length egg:*henkan-close*)))
1158 (goto-char egg:*region-start*)
1160 (insert (car (wnn-server-bunsetu-kanji 0)))
1161 (if (not overwrite-mode)
1163 (goto-char egg:*region-start*)
1165 (delete-region (point) egg:*region-end*)
1166 (wnn-server-hindo-update)
1171 (defun henkan-kakutei-before-point ()
1172 "Accept the henkan region before point, and put the rest back into a fence."
1174 (egg:bunsetu-face-off)
1175 (egg:henkan-face-off)
1176 (delete-region egg:*region-start* egg:*region-end*)
1177 (goto-char egg:*region-start*)
1178 (let ((i 0) (max *bunsetu-number*))
1180 (insert (car (wnn-server-bunsetu-kanji i )))
1181 (if (not overwrite-mode)
1185 (wnn-server-hindo-update *bunsetu-number*)
1186 (delete-region (- egg:*region-start* (length egg:*henkan-open*))
1188 (insert egg:*fence-open*)
1189 (set-marker egg:*region-start* (point))
1190 (delete-region egg:*region-end* (+ egg:*region-end* (length egg:*henkan-close*)))
1191 (goto-char egg:*region-end*)
1192 (let ((point (point)))
1193 (insert egg:*fence-close*)
1194 (set-marker egg:*region-end* point))
1195 (goto-char egg:*region-start*)
1197 (let ((point (point))
1198 (i *bunsetu-number*) (max (wnn-server-bunsetu-suu)))
1200 (insert (car (wnn-server-bunsetu-yomi i)))
1203 ;;;(insert egg:*fence-close*)
1204 ;;;(set-marker egg:*region-end* (point))
1206 (setq egg:*mode-on* t)
1207 ;;;(use-global-map fence-mode-map)
1208 ;;;(use-local-map nil)
1209 (setq egg:henkan-mode-in-use nil)
1210 ;;(use-local-map fence-mode-map)
1211 (egg:mode-line-display))
1213 ;; ### Should probably put this on a key.
1214 (defun sai-henkan ()
1215 "Reconvert last henkan entry."
1217 (if egg:henkan-mode-in-use nil
1218 (let ((finished nil))
1221 (setq egg:henkan-mode-in-use t)
1222 (mode-line-egg-mode-update (egg:msg-get 'henkan-mode-indicator))
1223 (goto-char egg:*sai-henkan-start*)
1224 ;;(setq egg:*local-map-backup* (current-local-map))
1225 ;;(and (boundp 'disable-undo) (setq disable-undo t))
1226 (delete-region egg:*sai-henkan-start* egg:*sai-henkan-end*)
1228 (goto-char egg:*sai-henkan-start*)
1229 (insert egg:*henkan-open*)
1230 (set-marker egg:*region-start* (point))
1231 (insert egg:*henkan-close*)
1232 (set-marker egg:*region-end* egg:*region-start*)
1233 (goto-char egg:*region-start*)
1234 (henkan-insert-kouho 0 egg:*old-bunsetu-suu*)
1235 (egg:henkan-face-on)
1236 (egg:bunsetu-face-on)
1237 (henkan-goto-bunsetu 0)
1238 ;;(use-local-map henkan-mode-map)
1241 ;;(setq disable-undo nil)
1242 (setq egg:henkan-mode-in-use nil)
1243 (resume-undo-list)))))
1246 (defun egg:bunsetu-face-on ()
1247 ;; make dai-bunsetu extent and sho-bunsetu extent if they do not exist.
1248 ;; put their faces to extents and move them to each bunsetu.
1249 (let* ((bunsetu-begin *bunsetu-number*)
1251 ; (bunsetu-suu (wnn-server-bunsetu-suu)))
1253 (if egg:*dai-bunsetu-face*
1255 (if (extentp egg:*dai-bunsetu-extent*)
1257 (setq egg:*dai-bunsetu-extent* (make-extent 1 1))
1258 (set-extent-property egg:*dai-bunsetu-extent* 'face egg:*dai-bunsetu-face*))
1259 (setq bunsetu-end (wnn-server-dai-end *bunsetu-number*))
1260 (while (not (wnn-server-dai-top bunsetu-begin))
1261 (setq bunsetu-begin (1- bunsetu-begin)))
1262 (set-extent-endpoints egg:*dai-bunsetu-extent*
1263 (bunsetu-position bunsetu-begin)
1264 (+ (bunsetu-position (1- bunsetu-end))
1265 (length (bunsetu-kanji (1- bunsetu-end)))))))
1267 (if egg:*sho-bunsetu-face*
1269 (if (extentp egg:*sho-bunsetu-extent*)
1271 (setq egg:*sho-bunsetu-extent* (make-extent 1 1))
1272 (set-extent-property egg:*sho-bunsetu-extent* 'face egg:*sho-bunsetu-face*))
1273 (setq bunsetu-end (1+ *bunsetu-number*))
1274 (set-extent-endpoints egg:*sho-bunsetu-extent*
1275 (let ((point (bunsetu-position *bunsetu-number*)))
1276 ;; ###jhod Removed the char-boundary stuff, as I *THINK* we can only move by whole chars...
1277 ;; (if (eq egg:*sho-bunsetu-face* 'modeline)
1278 ;; (+ point (1+ (char-boundary-p point)))
1280 (if (eq egg:*sho-bunsetu-face* 'modeline)
1284 (+ (bunsetu-position (1- bunsetu-end))
1285 (length (bunsetu-kanji (1- bunsetu-end)))))))))
1287 (defun egg:bunsetu-face-off ()
1288 (and egg:*dai-bunsetu-face*
1289 (extentp egg:*dai-bunsetu-extent*)
1290 (detach-extent egg:*dai-bunsetu-extent*))
1291 (and egg:*sho-bunsetu-face*
1292 (extentp egg:*sho-bunsetu-extent*)
1293 (detach-extent egg:*sho-bunsetu-extent*))
1296 (defun henkan-goto-bunsetu (number)
1297 (setq *bunsetu-number*
1298 (check-number-range number 0 (1- (wnn-server-bunsetu-suu))))
1299 (goto-char (bunsetu-position *bunsetu-number*))
1300 ; (egg:move-bunsetu-extent)
1301 (egg:bunsetu-face-on)
1304 (defun henkan-forward-bunsetu ()
1306 (henkan-goto-bunsetu (1+ *bunsetu-number*))
1309 (defun henkan-backward-bunsetu ()
1311 (henkan-goto-bunsetu (1- *bunsetu-number*))
1314 (defun henkan-first-bunsetu ()
1316 (henkan-goto-bunsetu 0))
1318 (defun henkan-last-bunsetu ()
1320 (henkan-goto-bunsetu (1- (wnn-server-bunsetu-suu)))
1323 (defun check-number-range (i min max)
1324 (cond((< i min) max)
1328 (defun henkan-hiragana ()
1330 (henkan-goto-kouho (- (bunsetu-kouho-suu *bunsetu-number* nil) 1)))
1332 (defun henkan-katakana ()
1334 (henkan-goto-kouho (- (bunsetu-kouho-suu *bunsetu-number* nil) 2)))
1336 (defun henkan-next-kouho ()
1338 (henkan-goto-kouho (1+ (bunsetu-kouho-number *bunsetu-number* nil))))
1340 (defun henkan-next-kouho-dai ()
1342 (let ((init (not egg:*dai*)))
1344 (henkan-goto-kouho (1+ (bunsetu-kouho-number *bunsetu-number* init)))))
1346 (defun henkan-next-kouho-sho ()
1348 (let ((init egg:*dai*))
1349 (setq egg:*dai* nil)
1350 (henkan-goto-kouho (1+ (bunsetu-kouho-number *bunsetu-number* init)))))
1352 (defun henkan-previous-kouho ()
1354 (henkan-goto-kouho (1- (bunsetu-kouho-number *bunsetu-number* nil))))
1356 (defun henkan-previous-kouho-dai ()
1358 (let ((init (not egg:*dai*)))
1360 (henkan-goto-kouho (1- (bunsetu-kouho-number *bunsetu-number* init)))))
1362 (defun henkan-previous-kouho-sho ()
1364 (let ((init egg:*dai*))
1365 (setq egg:*dai* nil)
1366 (henkan-goto-kouho (1- (bunsetu-kouho-number *bunsetu-number* init)))))
1368 (defun henkan-goto-kouho (kouho-number)
1369 ; (egg:bunsetu-face-off)
1370 (let ((point (point))
1371 ; (yomi (bunsetu-yomi *bunsetu-number*))
1375 (check-number-range kouho-number
1377 (1- (length (bunsetu-kouho-list
1378 *bunsetu-number* nil)))))
1379 (setq *zenkouho-offset* kouho-number)
1380 (wnn-server-henkan-kakutei kouho-number egg:*dai*)
1381 (setq max (wnn-server-bunsetu-suu))
1382 (setq min (max 0 (1- *bunsetu-number*)))
1384 (bunsetu-position min) egg:*region-end*)
1385 (goto-char (bunsetu-position min))
1386 (henkan-insert-kouho min max)
1388 ; (egg:move-bunsetu-extent)
1389 (egg:bunsetu-face-on)
1390 (egg:henkan-face-on)
1393 (defun henkan-bunsetu-chijime-dai ()
1396 (or (= (bunsetu-length *bunsetu-number*) 1)
1397 (bunsetu-length-henko (1- (bunsetu-length *bunsetu-number*)))))
1399 (defun henkan-bunsetu-chijime-sho ()
1401 (setq egg:*dai* nil)
1402 (or (= (bunsetu-length-sho *bunsetu-number*) 1)
1403 (bunsetu-length-henko (1- (bunsetu-length-sho *bunsetu-number*)))))
1405 (defun henkan-bunsetu-nobasi-dai ()
1408 (let ((i *bunsetu-number*)
1409 (max (wnn-server-bunsetu-suu))
1410 (len (bunsetu-length *bunsetu-number*))
1413 (setq maxlen (+ maxlen (cdr (wnn-server-bunsetu-yomi i))))
1415 (if (not (= len maxlen))
1416 (bunsetu-length-henko (1+ len)))))
1418 (defun henkan-bunsetu-nobasi-sho ()
1420 (setq egg:*dai* nil)
1421 (let ((i *bunsetu-number*)
1422 (max (wnn-server-bunsetu-suu))
1423 (len (bunsetu-length-sho *bunsetu-number*))
1426 (setq maxlen (+ maxlen (cdr (wnn-server-bunsetu-yomi i))))
1428 (if (not (= len maxlen))
1429 (bunsetu-length-henko (1+ len)))))
1431 ; (if (not (= (1+ *bunsetu-number*) (wnn-server-bunsetu-suu)))
1432 ; (bunsetu-length-henko (1+ (bunsetu-length *bunsetu-number*)))))
1435 (defun henkan-saishou-bunsetu ()
1437 (bunsetu-length-henko 1))
1439 (defun henkan-saichou-bunsetu ()
1441 (let ((max (wnn-server-bunsetu-suu)) (i *bunsetu-number*)
1444 (setq l (+ l (bunsetu-length-sho i)))
1446 (bunsetu-length-henko l)))
1448 (defun bunsetu-length-henko (length)
1449 (let ((r (wnn-server-bunsetu-henkou *bunsetu-number* length egg:*dai*))
1450 (start (max 0 (1- *bunsetu-number*))))
1452 (egg:error (wnn-server-get-msg)))
1454 ; (egg:henkan-face-off)
1455 ; (egg:bunsetu-face-off)
1457 (bunsetu-position start) egg:*region-end*)
1458 (goto-char (bunsetu-position start))
1459 (henkan-insert-kouho start r)
1460 (henkan-goto-bunsetu *bunsetu-number*)))))
1462 (defun henkan-quit ()
1464 (egg:bunsetu-face-off)
1465 (egg:henkan-face-off)
1466 (delete-region (- egg:*region-start* (length egg:*henkan-open*))
1468 (delete-region egg:*region-start* egg:*region-end*)
1469 (delete-region egg:*region-end* (+ egg:*region-end* (length egg:*henkan-close*)))
1470 (goto-char egg:*region-start*)
1471 (insert egg:*fence-open*)
1472 (set-marker egg:*region-start* (point))
1473 (insert egg:*kanji-kanabuff*)
1474 (let ((point (point)))
1475 (insert egg:*fence-close*)
1476 (set-marker egg:*region-end* point)
1478 (goto-char egg:*region-end*)
1480 (wnn-server-henkan-quit)
1481 (setq egg:*mode-on* t)
1482 ;;;(use-global-map fence-mode-map)
1483 ;;;(use-local-map nil)
1484 (setq egg:henkan-mode-in-use nil)
1485 ;;(use-local-map fence-mode-map)
1486 (setq egg:*in-fence-mode* t)
1487 (egg:mode-line-display)
1490 (defun henkan-select-kouho (init)
1491 (if (not (eq (selected-window) (minibuffer-window)))
1492 (let ((kouho-list (bunsetu-kouho-list *bunsetu-number* init))
1495 (list 'menu (egg:msg-get 'jikouho)
1496 (let ((l kouho-list) (r nil) (i 0))
1498 (setq r (cons (cons (car l) i) r))
1503 (menu:select-from-menu menu
1504 (bunsetu-kouho-number *bunsetu-number* nil))))
1507 (defun henkan-select-kouho-dai ()
1509 (let ((init (not egg:*dai*)))
1511 (henkan-select-kouho init)))
1513 (defun henkan-select-kouho-sho ()
1515 (let ((init egg:*dai*))
1516 (setq egg:*dai* nil)
1517 (henkan-select-kouho init)))
1519 (defun henkan-word-off ()
1521 (let ((info (wnn-server-inspect *bunsetu-number*)))
1523 (notify (wnn-server-get-msg))
1525 (let ((dic-list (wnn-server-dict-list)))
1527 (notify (wnn-server-get-msg))
1529 (let* ((kanji (nth 0 info))
1531 (serial (nth 3 info))
1532 (jisho-no (nth 2 info))
1533 (jisho-name (nth 2 (assoc jisho-no dic-list))))
1534 (if (wnn-server-word-use jisho-no serial)
1535 (notify (egg:msg-get 'off-msg)
1536 kanji yomi jisho-name serial)
1537 (egg:error (wnn-server-get-msg)))))))))))
1539 (defun henkan-kakutei-and-self-insert ()
1541 (setq unread-command-events (list last-command-event))
1544 (defvar henkan-mode-map (make-sparse-keymap))
1545 (set-keymap-default-binding henkan-mode-map 'undefined)
1549 (define-key henkan-mode-map (char-to-string ch) 'henkan-kakutei-and-self-insert)
1552 (define-key henkan-mode-map "\ei" 'henkan-bunsetu-chijime-sho)
1553 (define-key henkan-mode-map "\eo" 'henkan-bunsetu-nobasi-sho)
1554 (define-key henkan-mode-map "\es" 'henkan-select-kouho-dai)
1555 (define-key henkan-mode-map "\eh" 'henkan-hiragana)
1556 (define-key henkan-mode-map "\ek" 'henkan-katakana)
1557 (define-key henkan-mode-map "\ez" 'henkan-select-kouho-sho)
1558 (define-key henkan-mode-map "\e<" 'henkan-saishou-bunsetu)
1559 (define-key henkan-mode-map "\e>" 'henkan-saichou-bunsetu)
1561 ;(define-key henkan-mode-map " " 'henkan-next-kouho-dai)
1562 ; 92.9.8 by T.Shingu
1563 (define-key henkan-mode-map " " 'henkan-next-kouho)
1564 ; 92.7.10 by K.Handa
1565 (define-key henkan-mode-map "\C-@" 'henkan-kakutei-first-char)
1566 (define-key henkan-mode-map [?\C-\ ] 'henkan-kakutei-first-char)
1567 (define-key henkan-mode-map "\C-a" 'henkan-first-bunsetu)
1568 (define-key henkan-mode-map "\C-b" 'henkan-backward-bunsetu)
1569 (define-key henkan-mode-map "\C-c" 'henkan-quit)
1570 (define-key henkan-mode-map "\C-e" 'henkan-last-bunsetu)
1571 (define-key henkan-mode-map "\C-f" 'henkan-forward-bunsetu)
1572 (define-key henkan-mode-map "\C-g" 'henkan-quit)
1573 (define-key henkan-mode-map "\C-h" 'henkan-help-command)
1574 (define-key henkan-mode-map "\C-i" 'henkan-bunsetu-chijime-dai)
1575 (define-key henkan-mode-map "\C-k" 'henkan-kakutei-before-point)
1576 (define-key henkan-mode-map "\C-l" 'henkan-kakutei)
1577 (define-key henkan-mode-map "\C-m" 'henkan-kakutei)
1578 (define-key henkan-mode-map "\C-n" 'henkan-next-kouho)
1579 (define-key henkan-mode-map "\C-o" 'henkan-bunsetu-nobasi-dai)
1580 (define-key henkan-mode-map "\C-p" 'henkan-previous-kouho)
1581 (define-key henkan-mode-map "\C-t" 'toroku-henkan-mode)
1582 (define-key henkan-mode-map "\C-v" 'henkan-inspect-bunsetu)
1583 (define-key henkan-mode-map "\C-w" 'henkan-next-kouho-dai)
1584 (define-key henkan-mode-map "\C-z" 'henkan-next-kouho-sho)
1585 (define-key henkan-mode-map "\177" 'henkan-quit)
1586 (define-key henkan-mode-map [backspace] 'henkan-quit)
1587 (define-key henkan-mode-map [clear] 'henkan-quit)
1588 (define-key henkan-mode-map [delete] 'henkan-quit)
1589 (define-key henkan-mode-map [down] 'henkan-next-kouho)
1590 (define-key henkan-mode-map [help] 'henkan-help-command)
1591 (define-key henkan-mode-map [kp-enter] 'henkan-kakutei)
1592 (define-key henkan-mode-map [kp-down] 'henkan-next-kouho)
1593 (define-key henkan-mode-map [kp-left] 'henkan-backward-bunsetu)
1594 (define-key henkan-mode-map [kp-right] 'henkan-forward-bunsetu)
1595 (define-key henkan-mode-map [kp-up] 'henkan-previous-kouho)
1596 (define-key henkan-mode-map [left] 'henkan-backward-bunsetu)
1597 (define-key henkan-mode-map [next] 'henkan-next-kouho)
1598 (define-key henkan-mode-map [prior] 'henkan-previous-kouho)
1599 (define-key henkan-mode-map [return] 'henkan-kakutei)
1600 (define-key henkan-mode-map [right] 'henkan-forward-bunsetu)
1601 (define-key henkan-mode-map [up] 'henkan-previous-kouho)
1603 (unless (assq 'egg:henkan-mode-in-use minor-mode-map-alist)
1604 (setq minor-mode-map-alist
1605 (cons (cons 'egg:henkan-mode-in-use henkan-mode-map)
1606 minor-mode-map-alist)))
1608 (defun henkan-help-command ()
1609 "Display documentation for henkan-mode."
1611 (let ((buf "*Help*"))
1612 (if (eq (get-buffer buf) (current-buffer))
1614 (with-output-to-temp-buffer buf
1615 ;;(princ (substitute-command-keys henkan-mode-document-string))
1616 (princ (substitute-command-keys (egg:msg-get 'henkan-help)))
1617 (print-help-return-message)))))
1619 ;;;----------------------------------------------------------------------
1621 ;;; Dictionary management Facility
1623 ;;;----------------------------------------------------------------------
1626 ;;;
\e$B<-=qEPO?
\e(B
1630 ;;;; User entry: toroku-region
1633 (defun remove-regexp-in-string (regexp string)
1634 (cond((not(string-match regexp string))
1638 (oend (match-beginning 0))
1639 (nstart (match-end 0)))
1640 (setq str (concat str (substring string ostart oend)))
1641 (while (string-match regexp string nstart)
1642 (setq ostart nstart)
1643 (setq oend (match-beginning 0))
1644 (setq nstart (match-end 0))
1645 (setq str (concat str (substring string ostart oend))))
1646 (concat str (substring string nstart))))))
1648 (defun hinsi-from-menu (dict-number name)
1649 (let ((result (wnn-server-hinsi-list dict-number name))
1653 (egg:error (wnn-server-get-msg))
1657 ; (setq hinsi-pair (mapcar '(lambda (x) (cons x x)) result))
1658 ; (if (null (string= name "/"))
1659 ; (setq hinsi-pair (cons (cons "/" "/") hinsi-pair)))
1660 ; (setq menu (list 'menu (egg:msg-get 'hinsimei) hinsi-pair))
1661 (setq menu (list 'menu (egg:msg-get 'hinsimei)
1662 (if (string= name "/")
1664 (cons "/" result))))
1665 (hinsi-from-menu dict-number
1666 (menu:select-from-menu menu)))))))
1668 (defun wnn-dict-name (dict-number dict-list)
1669 (let* ((dict-info (assoc dict-number dict-list))
1670 (dict-comment (nth 2 dict-info)))
1671 (if (string= dict-comment "")
1672 (file-name-nondirectory (nth 1 dict-info))
1675 (defun egg:toroku-word (yomi kanji interactive)
1676 (let*((dic-list (wnn-server-dict-list))
1677 (writable-dic-list (wnn-server-hinsi-dicts -1))
1679 (menu:select-from-menu
1680 (list 'menu (egg:msg-get 'touroku-jishomei)
1682 (mapcar '(lambda (x)
1683 (let ((y (car (assoc x dic-list))))
1685 (cons (wnn-dict-name y dic-list) y))))
1686 writable-dic-list)))))
1687 (hinsi-name (hinsi-from-menu dict-number "/"))
1688 (hinsi-no (wnn-server-hinsi-number hinsi-name))
1689 (dict-name (wnn-dict-name dict-number dic-list)))
1690 (if (or (not interactive)
1691 (notify-yes-or-no-p (egg:msg-get 'register-notify)
1692 kanji yomi hinsi-name dict-name))
1693 (if (wnn-server-word-add dict-number kanji yomi "" hinsi-no)
1694 (notify (egg:msg-get 'registerd) kanji yomi hinsi-name dict-name)
1695 (egg:error (wnn-server-get-msg))))))
1697 (defun toroku-region (start end)
1699 (if (null (wnn-server-isconnect)) (EGG:open-wnn))
1700 (wnn-server-set-rev nil)
1702 (remove-regexp-in-string "[\0-\37]" (buffer-substring start end)))
1703 (yomi (read-current-its-string
1704 (format (egg:msg-get 'jishotouroku-yomi) kanji))))
1705 (egg:toroku-word yomi kanji nil)))
1707 (defun delete-space (string)
1708 (let ((len (length string)))
1710 (if (or (char-equal (aref string 0) ? ) (char-equal (aref string 0) ?-))
1711 (delete-space (substring string 1))
1712 (concat (substring string 0 1) (delete-space (substring string 1)))))))
1715 (defun toroku-henkan-mode ()
1718 (read-current-its-string (egg:msg-get 'kanji)
1720 (buffer-substring (point) egg:*region-end* ))))
1721 (yomi (read-current-its-string
1722 (format (egg:msg-get 'jishotouroku-yomi) kanji)
1724 (i *bunsetu-number*)
1725 (max (wnn-server-bunsetu-suu)))
1727 (setq str (concat str (car (wnn-server-bunsetu-yomi i)) ))
1730 (egg:toroku-word yomi kanji nil)))
1733 ;;;
\e$B<-=qJT=87O
\e(B DicEd
1736 (defvar *diced-window-configuration* nil)
1738 (defvar *diced-dict-info* nil)
1740 (defvar *diced-yomi* nil)
1743 ;;;;; User entry : edit-dict-item
1746 (defun edit-dict-item (yomi)
1747 (interactive (list (read-current-its-string (egg:msg-get 'yomi))))
1748 (if (null (wnn-server-isconnect)) (EGG:open-wnn))
1749 (wnn-server-set-rev nil)
1750 (let ((dict-info (wnn-server-word-search yomi))
1751 (current-wnn-server-type))
1752 (if (null dict-info)
1753 (message (egg:msg-get 'no-yomi) yomi)
1755 (setq current-wnn-server-type wnn-server-type)
1756 (setq *diced-yomi* yomi)
1757 (setq *diced-window-configuration* (current-window-configuration))
1758 (pop-to-buffer "*Nihongo Dictionary Information*")
1759 (setq wnn-server-type current-wnn-server-type)
1760 (setq major-mode 'diced-mode)
1761 (setq mode-name "Diced")
1762 (setq mode-line-buffer-identification
1763 (concat "DictEd: " yomi
1764 (make-string (max 0 (- 17 (string-width yomi))) ? )))
1765 (sit-for 0) ;; will redislay.
1766 ;;;(use-global-map diced-mode-map)
1767 (use-local-map diced-mode-map)
1768 (diced-display dict-info)
1771 (defun diced-redisplay ()
1772 (wnn-server-set-rev nil)
1773 (let ((dict-info (wnn-server-word-search *diced-yomi*)))
1774 (if (null dict-info)
1776 (message (egg:msg-get 'no-yomi) *diced-yomi*)
1778 (diced-display dict-info))))
1780 (defun diced-display (dict-info)
1781 ;;; (values (list (record kanji bunpo hindo dict-number serial-number)))
1785 (function (lambda (x y)
1786 (or (< (nth 1 x) (nth 1 y))
1787 (if (= (nth 1 x) (nth 1 y))
1788 (or (> (nth 2 x) (nth 2 y))
1789 (if (= (nth 2 x) (nth 2 y))
1790 (< (nth 3 x) (nth 3 y))))))))))
1791 (setq *diced-dict-info* dict-info)
1792 (setq buffer-read-only nil)
1796 (mapcar (function (lambda (l) (string-width (nth 0 l))))
1800 (mapcar (function(lambda (l)
1801 (string-width (wnn-server-hinsi-name (nth 1 l)))))
1803 (dict-list (wnn-server-dict-list))
1804 (writable-dict-list (wnn-server-hinsi-dicts -1)))
1806 (let*((kanji (nth 0 (car dict-info)))
1807 (bunpo (nth 1 (car dict-info)))
1808 (hinshi (wnn-server-hinsi-name bunpo))
1809 (hindo (nth 2 (car dict-info)))
1810 (dict-number (nth 3 (car dict-info)))
1811 (dict-name (wnn-dict-name dict-number dict-list))
1812 (sys-dict-p (null (memq dict-number writable-dict-list)))
1813 (serial-number (nth 4 (car dict-info))))
1814 (insert (if sys-dict-p " *" " "))
1817 (- (+ l-kanji 10) (string-width kanji)))
1819 (insert-char ? (- (+ l-bunpo 2) (string-width hinshi)))
1820 (insert (egg:msg-get 'jisho) (file-name-nondirectory dict-name)
1821 "/" (int-to-string serial-number)
1822 (egg:msg-get 'hindo) (int-to-string hindo) ?\n )
1823 (setq dict-info (cdr dict-info))))
1824 (goto-char (point-min)))
1825 (setq buffer-read-only t))
1830 (let*((kanji (read-from-minibuffer (egg:msg-get 'kanji))))
1831 (egg:toroku-word *diced-yomi* kanji t)
1834 (defun diced-delete ()
1837 (if (= (char-after (1+ (point))) ?* )
1838 (progn (message (egg:msg-get 'cannot-remove)) (beep))
1839 (if (= (following-char) ? )
1840 (let ((buffer-read-only nil))
1841 (delete-char 1) (insert "D") (backward-char 1))
1845 (defun diced-undelete ()
1848 (if (= (following-char) ?D)
1849 (let ((buffer-read-only nil))
1850 (delete-char 1) (insert " ") (backward-char 1))
1853 (defun diced-redisplay-hindo (dict-number serial-number)
1855 (setq buffer-read-only nil)
1857 (re-search-forward "\\([0-9\-]+\\)\\(\n\\)")
1858 (delete-region (match-beginning 1) (match-end 1))
1859 (setq hindo (nth 3 (wnn-server-word-info dict-number serial-number)))
1860 (goto-char (match-beginning 1))
1861 (insert (int-to-string hindo))
1863 (setq buffer-read-only t)))
1867 (let* ((dict-item (nth
1868 (+ (count-lines (point-min) (point))
1869 (if (= (current-column) 0) 1 0)
1872 ; (hindo (nth 2 dict-item))
1873 (dict-number (nth 3 dict-item))
1874 (serial-number (nth 4 dict-item))
1876 (if (null (wnn-server-word-use dict-number serial-number))
1877 (egg:error (wnn-server-get-msg)))
1878 (diced-redisplay-hindo dict-number serial-number)))
1880 (defun diced-hindo-set (&optional newhindo)
1883 (setq newhindo (read-expression (egg:msg-get 'enter-hindo))))
1884 (let* ((dict-item (nth
1885 (+ (count-lines (point-min) (point))
1886 (if (= (current-column) 0) 1 0)
1889 ; (hindo (nth 2 dict-item))
1890 (dict-number (nth 3 dict-item))
1891 (serial-number (nth 4 dict-item))
1893 (if (null (wnn-server-word-hindo-set dict-number serial-number newhindo))
1894 (egg:error (wnn-server-get-msg)))
1895 (diced-redisplay-hindo dict-number serial-number)))
1897 (defun diced-quit ()
1899 (setq buffer-read-only nil)
1901 (setq buffer-read-only t)
1902 (bury-buffer (get-buffer "*Nihongo Dictionary Information*"))
1903 (set-window-configuration *diced-window-configuration*)
1906 (defun diced-execute (&optional display)
1908 (goto-char (point-min))
1911 (if (= (following-char) ?D)
1912 (let* ((dict-item (nth no *diced-dict-info*))
1913 (kanji (nth 0 dict-item))
1914 (bunpo (nth 1 dict-item))
1915 (hinshi (wnn-server-hinsi-name bunpo))
1916 ; (hindo (nth 2 dict-item))
1917 (dict-number (nth 3 dict-item))
1918 (dict-name (wnn-dict-name dict-number (wnn-server-dict-list)))
1919 ; (sys-dict-p (null (memq dict-number (wnn-server-hinsi-dicts -1))))
1920 (serial-number (nth 4 dict-item))
1922 (if (notify-yes-or-no-p (egg:msg-get 'remove-notify)
1923 kanji hinshi dict-name)
1925 (if (wnn-server-word-delete dict-number serial-number)
1926 (notify (egg:msg-get 'removed)
1927 kanji hinshi dict-name)
1928 (egg:error (wnn-server-get-msg)))
1933 (if (not display) (diced-redisplay)))
1935 (defun diced-next-line ()
1939 (if (eobp) (progn (beep) (forward-line -1))))
1941 (defun diced-end-of-buffer ()
1943 (goto-char (point-max))
1946 (defun diced-scroll-down ()
1949 (if (eobp) (forward-line -1)))
1951 (defun diced-mode ()
1952 "Mode for \"editing\" Wnn dictionaries.
1953 In diced, you are \"editing\" a list of the entries in dictionaries.
1954 You can move using the usual cursor motion commands.
1955 Letters no longer insert themselves. Instead,
1957 Type a to Add new entry.
1958 Type d to flag an entry for Deletion.
1959 Type n to move cursor to Next entry.
1960 Type p to move cursor to Previous entry.
1961 Type q to Quit from DicEd.
1962 Type C-u to Toggle the word to use/unuse.
1963 Type u to Unflag an entry (remove its D flag).
1964 Type x to eXecute the deletions requested.
1968 (defvar diced-mode-map (make-sparse-keymap))
1969 (set-keymap-default-binding diced-mode-map 'undefined)
1971 (define-key diced-mode-map "a" 'diced-add)
1972 (define-key diced-mode-map "d" 'diced-delete)
1973 (define-key diced-mode-map "n" 'diced-next-line)
1974 (define-key diced-mode-map "p" 'previous-line)
1975 (define-key diced-mode-map "q" 'diced-quit)
1976 ;(define-key diced-mode-map "t" 'diced-use)
1977 (define-key diced-mode-map "u" 'diced-undelete)
1978 (define-key diced-mode-map "x" 'diced-execute)
1980 (define-key diced-mode-map "\C-h" 'help-command)
1981 (define-key diced-mode-map "\C-n" 'diced-next-line)
1982 (define-key diced-mode-map "\C-p" 'previous-line)
1983 (define-key diced-mode-map "\C-u" 'diced-use)
1984 (define-key diced-mode-map "\C-v" 'scroll-up)
1985 (define-key diced-mode-map "\eh" 'diced-hindo-set)
1986 (define-key diced-mode-map "\e<" 'beginning-of-buffer)
1987 (define-key diced-mode-map "\e>" 'diced-end-of-buffer)
1988 (define-key diced-mode-map "\ev" 'diced-scroll-down)
1990 (define-key diced-mode-map [up] 'previous-line)
1991 (define-key diced-mode-map [down] 'diced-next-line)
1995 ;;; set comment on dictionary
1998 (defun set-dict-comment ()
2000 (if (null (wnn-server-isconnect)) (EGG:open-wnn))
2001 (wnn-server-set-rev nil)
2002 (let*((dic-list (wnn-server-dict-list))
2003 (writable-dic-list (wnn-server-hinsi-dicts -1))
2005 (menu:select-from-menu
2006 (list 'menu (egg:msg-get 'jishomei)
2008 (mapcar '(lambda (x)
2009 (let ((y (assoc x dic-list)))
2011 (cons (nth 1 y) (nth 0 y)))))
2012 writable-dic-list)))))
2013 (comment (read-from-minibuffer (egg:msg-get 'comment)
2014 (wnn-dict-name dict-number dic-list))))
2015 (if (wnn-server-dict-comment dict-number comment)
2016 (notify (egg:msg-get 'jisho-comment)
2017 (wnn-dict-name dict-number dic-list) comment)
2018 (egg:error (wnn-server-get-msg)))))
2022 ;;; Pure inspect facility
2025 (defun henkan-inspect-bunsetu ()
2027 (let ((info (wnn-server-inspect *bunsetu-number*)))
2029 (notify (wnn-server-get-msg))
2031 (let ((dic-list (wnn-server-dict-list)))
2033 (notify (wnn-server-get-msg))
2035 (let ((hinsi (wnn-server-hinsi-name (nth 4 info)))
2036 (kanji (nth 0 info))
2038 (serial (nth 3 info))
2039 (hindo (nth 5 info))
2040 (jisho (wnn-dict-name (nth 2 info) dic-list))
2042 (hyoka (nth 7 info))
2043 (daihyoka (nth 8 info))
2044 (kangovect (nth 9 info)))
2046 (format "%s %s(%s %s:%s Freq:%s%s) S:%s D:%s V:%s "
2047 kanji yomi hinsi jisho serial
2048 (if (= ima 1) "*" " ")
2049 hindo hyoka daihyoka kangovect)
2054 ;;; egg-wnn.el ends here