1 ;; skk-gadget.el --
\e$B<B9TJQ49$N$?$a$N%W%m%0%i%`
\e(B
2 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999
3 ;; Masahiko Sato <masahiko@kuis.kyoto-u.ac.jp>
5 ;; Author: Masahiko Sato <masahiko@kuis.kyoto-u.ac.jp>
6 ;; Maintainer: Murata Shuuichirou <mrt@astec.co.jp>
7 ;; Mikio Nakajima <minakaji@osaka.email.ne.jp>
8 ;; Version: $Id: skk-gadget.el,v 1.4 2000-11-08 01:51:43 youngs Exp $
10 ;; Last Modified: $Date: 2000-11-08 01:51:43 $
12 ;; This file is part of SKK.
14 ;; SKK is free software; you can redistribute it and/or modify
15 ;; it under the terms of the GNU General Public License as published by
16 ;; the Free Software Foundation; either versions 2, or (at your option)
19 ;; SKK is distributed in the hope that it will be useful
20 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
21 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 ;; GNU General Public License for more details.
24 ;; You should have received a copy of the GNU General Public License
25 ;; along with SKK, see the file COPYING. If not, write to the Free
26 ;; Software Foundation Inc., 59 Temple Place - Suite 330, Boston,
27 ;; MA 02111-1307, USA.
31 ;;
\e$B%W%m%0%i%`<B9TJQ49$H$O
\e(B
32 ;; ======================
33 ;;
\e$BAw$j2>L>$N$J$$<-=q$NJQ49$N8uJd$K
\e(B Emacs Lisp
\e$B$N%3!<%I$,=q$$$F$"$l$P!"
\e(BSKK
34 ;;
\e$B$O$=$N%3!<%I$r
\e(B Lisp
\e$B$N%W%m%0%i%`$H$7$F<B9T$7!"$=$N7k2L$NJ8;zNs$r2hLL$KA^
\e(B
35 ;;
\e$BF~$9$k!#Nc$($P!"<-=q$K
\e(B
37 ;; now /(current-time-string)/
39 ;;
\e$B$H$$$&9T$,$"$k$H$-!"
\e(B`/now '
\e$B$H%?%$%W$9$l$P2hLL$K$O8=:_$N;~9o$,I=<($5$l!"
\e(B
40 ;; `
\e$B"'
\e(BFri Apr 10 11:41:43 1992'
\e$B$N$h$&$K$J$k!#
\e(B
42 ;;
\e$B$3$3$G;H$($k
\e(B Lisp
\e$B$N%3!<%I$O2~9T$r4^$s$G$$$J$$$b$N$K8B$i$l$k!#$^$?$3$N%3!<
\e(B
43 ;;
\e$B%I$O7k2L$H$7$FJ8;zNs$rJV$9$b$N$G$J$1$l$P$J$i$J$$!#
\e(B
45 ;;
\e$B$3$N%U%!%$%k$O<B9TJQ49%W%m%0%i%`$r=8$a$?$b$N$G$"$k!#
\e(B
47 ;; skk-gadget.el
\e$B$N
\e(B `gadget'
\e$B$O!V>e<j$/9)IW$7$?F;6q!W$N0UL#!#!V?'!9Ht$S=P$9
\e(B
48 ;;
\e$B5$$N$-$$$?$*$b$A$cH"!W$H$$$&$h$&$J0UL#$GL>IU$1$i$l$?!#
\e(B
49 ;;
\e$BM>CL$@$,!"
\e(BX Window
\e$B$G;HMQ$5$l$k
\e(B `Widget'
\e$B$H$$$&8@MU$O!"
\e(B`window'+`gadget'
50 ;;
\e$B$+$i:n$i$l$?B$8l$i$7$$!#
\e(B
56 (require 'skk-foreword)
60 (defgroup skk-gadget nil "SKK gadget related customization."
64 (defcustom skk-date-ad nil
65 "*Non-nil
\e$B$G$"$l$P!"
\e(Bskk-today, skk-clock
\e$B$G@>NqI=<($9$k!#
\e(B
66 nil
\e$B$G$"$l$P!"859fI=<($9$k!#
\e(B"
70 (defcustom skk-number-style 1
71 "*skk-today, skk-clock
\e$B$GI=<($9$k?t;z$N7A<0$rJQ2=$5$;$k!#
\e(B
72 \e$BH>3QI=
\e(B: nil
\e$B$b$7$/$O
\e(B 0.
73 \e$BA43QI=<(
\e(B: t
\e$B$b$7$/$O!"
\e(B1.
74 \e$B4A?t;zI=
\e(B: t, 0, 1
\e$B0J30$N
\e(B non-nil
\e$BCM!#
\e(B"
75 :type '(choice (choice :tag "Hankaku" (const nil) (integer 0))
76 (choice :tag "Zenkaku" (const t) (integer 1))
77 (integer :tag "Kansuuji" 3) )
80 (defcustom skk-gadget-load-hook nil
81 "*skk-gadget.el
\e$B$r%m!<%I$7$?8e$K%3!<%k$5$l$k%U%C%/!#
\e(B"
85 ;; --internal variables
86 (defconst skk-week-alist
87 '(("Sun" . "
\e$BF|
\e(B") ("Mon" . "
\e$B7n
\e(B") ("Tue" . "
\e$B2P
\e(B") ("Wed" . "
\e$B?e
\e(B") ("Thu" . "
\e$BLZ
\e(B")
88 ("Fri" . "
\e$B6b
\e(B") ("Sat" . "
\e$BEZ
\e(B") )
89 "
\e$BMKF|L>$NO"A[%j%9%H!#
\e(B\(
\e$B1Q8lI=5-J8;zNs
\e(B .
\e$BF|K\8lI=5-J8;zNs
\e(B\)" )
93 (defun skk-current-date (&optional and-time)
94 ;;
\e$B8=:_$NF|;~$rF|K\8l$GJV$9!#
\e(Bskk-today
\e$B$H
\e(B skk-clock
\e$B$N%5%V%k!<%A%s!#
\e(B
95 ;;
\e$B%*%W%7%g%J%k0z?t$N
\e(B AND-TIME
\e$B$r;XDj$9$k$H!";~4V$bJV$9!#
\e(B
96 (let* ((str (current-time-string))
98 (skk-num (substring str 20 24))
99 (let ((y (- (string-to-number (substring str 20 24)) 1988)))
100 (if (= y 1) "
\e$B85
\e(B" (skk-num (number-to-string y))) )))
101 (month (skk-num (cdr (assoc (substring str 4 7) skk-month-alist))))
102 (day (substring str 8 10))
103 (day-of-week (cdr (assoc (substring str 0 3) skk-week-alist)))
105 (if (eq (aref day 0) ?\040) ; SPC
106 (setq day (substring day 1)) )
107 (setq day (skk-num day))
108 (concat (if skk-date-ad "" "
\e$BJ?@.
\e(B") year "
\e$BG/
\e(B"
109 month "
\e$B7n
\e(B" day "
\e$BF|
\e(B" "\(" day-of-week "\)"
112 (setq hour (skk-num (substring str 11 13))
113 minute (skk-num (substring str 14 16))
114 second (skk-num (substring str 17 19)) )
115 (concat " " hour "
\e$B;~
\e(B" minute "
\e$BJ,
\e(B" second "
\e$BIC
\e(B") ))) ))
118 (defun skk-today (&optional and-time)
119 "
\e$B8=:_$NF|;~$rF|K\8lI=5-$GJV$9!#
\e(B
120 \e$B%*%W%7%g%J%k0z?t$N
\e(B AND-TIME
\e$B$r;XDj$9$k$H!"F|IU$K;~4V$r2C$($k!#
\e(B
121 skk-date-ad
\e$B$H
\e(B skk-number-style
\e$B$K$h$C$FI=<(J}K!$N%+%9%?%^%$%:$,2DG=!#
\e(B"
124 (insert (skk-today and-time))
125 (skk-current-date and-time) ))
128 (defun skk-clock (&optional kakutei-when-quit time-signal)
129 "
\e$B%G%8%?%k;~7W$r%_%K%P%C%U%!$KI=<($9$k!#
\e(B
130 quit
\e$B$9$k$H$=$N;~E@$NF|;~$r8uJd$H$7$FA^F~$9$k!#
\e(B
131 quit
\e$B$7$?$H$-$K5/F0$7$F$+$i$N7P2a;~4V$r%_%K%P%C%U%!$KI=<($9$k!#
\e(B
132 interactive
\e$B$K5/F0$9$kB>!"
\e(B\"clock /(skk-clock)/\"
\e$B$J$I$N%(%s%H%j$r
\e(B SKK
\e$B$N<-=q
\e(B
133 \e$B$K2C$(!"
\e(B\"/clock\"+ SPC
\e$B$GJQ49$9$k$3$H$K$h$C$F$b5/F02D!#
\e(BC-g
\e$B$G;_$^$k!#
\e(B
134 \e$B<B9TJQ49$G5/F0$7$?>l9g$O!"
\e(BC-g
\e$B$7$?;~E@$N;~E@$NF|;~$rA^F~$9$k!#
\e(B
135 \e$B%*%W%7%g%J%k0z?t$N
\e(B KAKUTEI-WHEN-QUIT
\e$B$,
\e(B non-nil
\e$B$G$"$l$P
\e(B C-g
\e$B$7$?$H$-$K3N
\e(B
137 \e$B%*%W%7%g%J%k0z?t$N
\e(B TIME-SIGNAL
\e$B$,
\e(B non-nil
\e$B$G$"$l$P!"
\e(BNTT
\e$B$N;~JsIw$K
\e(B ding
\e$B$9$k!#
\e(B
138 \e$B$=$l$>$l!"
\e(B\"clock /(skk-clock nil t)/\"
\e$B$N$h$&$J%(%s%H%j$r<-=q$KA^F~$9$l$PNI$$!#
\e(B
139 skk-date-ad
\e$B$H
\e(B skk-number-style
\e$B$K$h$C$FI=<(J}K!$N%+%9%?%^%$%:$,2DG=!#
\e(B"
141 (let ((start (current-time))
142 end mes expr1 expr2 sec snd)
143 (cond ((or (not skk-number-style)
144 (eq skk-number-style 0))
145 (setq expr1 "[789]
\e$BIC
\e(B"
146 expr2 "0
\e$BIC
\e(B"))
147 ((or (eq skk-number-style t)
148 ;; skk-number-style
\e$B$K
\e(B
\e$B?t;z$H
\e(B t
\e$B0J30$N
\e(B non-nil
\e$BCM$rF~$l$F$$$k>l
\e(B
149 ;;
\e$B9g!"
\e(B=
\e$B$r;H$&$H
\e(B Wrong type argument: number-or-marker-p, xxxx
150 ;;
\e$B$K$J$C$F$7$^$&!#
\e(B
151 (eq skk-number-style 1))
152 (setq expr1 "[
\e$B#7#8#9
\e(B]
\e$BIC
\e(B"
153 expr2 "
\e$B#0IC
\e(B"))
155 (setq expr1 "[
\e$B<7H,6e
\e(B]
\e$BIC
\e(B"
156 expr2 "
\e$B!;IC
\e(B")))
158 (static-when (eq skk-emacs-type 'xemacs)
159 ;; XEmacs
\e$B$G
\e(B sound
\e$B$,%m!<%I$5$l$F$$$k$+$I$&$+!#
\e(B
160 (when (setq snd (and (boundp 'sound-alist)
167 (cadr (memq :sound list)))
171 (unless (assq 'clink sound-alist)
172 (load-sound-file "clink" 'clink))))
176 (let (case-fold-search
177 inhibit-quit visible-bell
178 skk-mode skk-latin-mode skk-j-mode skk-abbrev-mode
179 skk-jisx0208-latin-mode)
180 (while (not quit-flag)
181 (setq mes (skk-current-date t)
183 (message "%s Hit any key to quit" mes)
185 (if (string-match expr1 mes)
186 ;; [7890]
\e$B$N$h$&$K@55,I=8=$r;H$o$:!"
\e(B7
\e$B$@$1$GA4$F$N%^%7%s$,
\e(B
187 ;;
\e$BCe$$$F$f$1$PNI$$$N$@$,
\e(B...
\e$B!#CzEY$3$N4X?t<B9T;~$K
\e(B Garbage
188 ;; collection
\e$B$,8F$P$l$F$bI=<($5$l$k?t;z$,Ht$V>l9g$,$"$k!#
\e(B
189 (static-if (eq skk-emacs-type 'xemacs)
190 ;;
\e$B$$$$2;$,$J$$$J$!
\e(B...
193 (if (string-match expr2 mes)
194 ;; 0
\e$B$@$1!V%]!A%s!W$H$$$-$?$$$H$3$m$G$9$,!"%^%7%s$K$h$C
\e(B
195 ;;
\e$B$F:9$,$"$k!#
\e(B
196 ;; 386SX 25Mhz + Mule-2.x
\e$B$@$H!V%T%C!"%T%C!W$H$$$&46$8!#
\e(B
197 ;;
\e$BIU$$$F$f$/$N$,Hs>o$K?I$$!#
\e(B68LC040 33Mhz + NEmacs
\e$B$@$H
\e(B
198 ;;
\e$B!V%T%T%C!W$H$J$j!"2;$N%?%$%_%s%0$ONI$$$N$@$,!"$H$-
\e(B
199 ;;
\e$B$I$-
\e(B 1
\e$BICJ,$D$$$F$$$1$J$/$J$k!#
\e(BPentium 90Mhz +
200 ;; Mule-2.x
\e$B$@$H!V%T%C!W$H$$$&C12;$K$J$C$F$7$^$&
\e(B... (;_;)
\e$B!#
\e(B
202 ((eq skk-emacs-type 'xemacs)
204 ;;
\e$B$A$g$C$H$b$?$D$/
\e(B ?
207 (unless (sit-for (setq sec
209 (/ (float 1) (float 6))))
214 ((featurep 'lisp-float-type)
216 (unless (sit-for (setq sec
218 (/ (float 1) (float 6))))
229 ((memq skk-emacs-type '(nemacs mule1 xemacs))
230 (sit-for (- 1 sec) 'nodisplay))
232 (sit-for (- 1 sec) nil 'nodisplay)))
234 (signal 'quit nil))))
237 (setq end (current-time))
239 (if kakutei-when-quit
240 (setq skk-kakutei-flag t))
241 (message "
\e$B7P2a;~4V
\e(B: %s
\e$BIC
\e(B" (skk-time-difference start end))))))))
244 (defun skk-ad-to-gengo (&optional fstr lstr)
245 ;;
\e$B@>Nq$r859f$KJQ49$9$k!#%*%W%7%g%s0z?t$N
\e(B fstr
\e$B$,;XDj$5$l$F$$$l$P!"G/9f$H
\e(B
246 ;;
\e$B?t;z$N4V$K!"
\e(Blstr
\e$B$,;XDj$5$l$F$$$l$P!"?t;z$NKvHx$K!"$=$l$>$l$NJ8;zNs$rO"7k
\e(B
248 ;;
\e$B<-=q8+=P$7Nc
\e(B;
249 ;;
\e$B$;$$$l$-
\e(B#
\e$B$M$s
\e(B /(skk-ad-to-gengo nil "
\e$BG/
\e(B")/(skk-ad-to-gengo " " "
\e$BG/
\e(B")/
250 (let ((ad (string-to-number (car skk-num-list))))
251 (concat (cond ((>= 1866 ad)
252 (skk-error "
\e$BJ,$j$^$;$s
\e(B" "Unkown year") )
254 (concat "
\e$BL@<#
\e(B" fstr (number-to-string (- ad 1867))) )
256 (concat "
\e$BBg@5
\e(B" fstr (number-to-string (- ad 1911))) )
258 (concat "
\e$B><OB
\e(B" fstr (number-to-string (- ad 1925))) )
259 (t (concat "
\e$BJ?@.
\e(B" fstr (number-to-string (- ad 1988)))) )
263 (defun skk-gengo-to-ad (&optional string)
264 ;;
\e$B859f$r@>Nq$KJQ49$9$k!#%*%W%7%g%s0z?t$N
\e(B string
\e$B$,;XDj$5$l$F$$$l$P!"
\e(B
265 ;;
\e$B$=$NJ8;zNs$rKvHx$KO"7k$9$k!#
\e(B
266 ;;
\e$B<-=q8+=P$7Nc
\e(B;
267 ;;
\e$B$7$g$&$o
\e(B#
\e$B$M$s
\e(B /(skk-gengo-to-ad "
\e$BG/
\e(B")/(skk-gengo-to-ad "
\e$BG/
\e(B")/
269 (let ((num (car skk-num-list))
271 (string-match num skk-henkan-key)
272 (setq gengo (substring skk-henkan-key 0 (match-beginning 0))
273 num (string-to-number num) )
274 (concat (number-to-string
277 (skk-error "0
\e$BG/$O$"$jF@$J$$
\e(B"
278 "Cannot convert 0 year" ))
279 ((string= gengo "
\e$B$X$$$;$$
\e(B") 1988)
280 ((string= gengo "
\e$B$7$g$&$o
\e(B")
283 (skk-error "
\e$B><OB$O
\e(B 63
\e$BG/$^$G$G$9
\e(B"
284 "The last year of Showa is 63" )))
285 ((string= gengo "
\e$B$?$$$7$g$&
\e(B")
288 (skk-error "
\e$BBg@5$O!"
\e(B14
\e$BG/$^$G$G$9
\e(B"
289 "The last year of Taisyo is 14" )))
290 ((string= gengo "
\e$B$a$$$8
\e(B")
293 (skk-error "
\e$BL@<#$O!"
\e(B44
\e$BG/$^$G$G$9
\e(B"
294 "The last year of Meiji is 44" )))
295 (t (skk-error "
\e$BH=JLITG=$J859f$G$9!*
\e(B"
296 "Unknown Gengo!" )))))
299 ;(defun skk-calc (operator)
300 ; ;; 2
\e$B$D$N0z?t$r<h$C$F
\e(B operator
\e$B$N7W;;$r$9$k!#
\e(B
301 ; ;;
\e$BCm0U
\e(B: '/
\e$B$O0z?t$H$7$FEO$;$J$$$N$G
\e(B (defalias 'div '/)
\e$B$J$I$H$7!"JL$N7A$G
\e(B
302 ; ;; skk-calc
\e$B$KEO$9!#
\e(B
303 ; ;;
\e$B<-=q8+=P$7Nc
\e(B; #*# /(skk-calc '*)/
305 ; (funcall operator (string-to-number (car skk-num-list))
306 ; (string-to-number (nth 1 skk-num-list)) )))
309 (defun skk-calc (operator)
310 ;; 2
\e$B$D$N0z?t$r<h$C$F
\e(B operator
\e$B$N7W;;$r$9$k!#
\e(B
311 ;;
\e$BCm0U
\e(B: '/
\e$B$O0z?t$H$7$FEO$;$J$$$N$G
\e(B (defalias 'div '/)
\e$B$J$I$H$7!"JL$N7A$G
\e(B
312 ;; skk-calc
\e$B$KEO$9!#
\e(B
313 ;;
\e$B<-=q8+=P$7Nc
\e(B; #*# /(skk-calc '*)/
314 (number-to-string (apply operator (mapcar 'string-to-number skk-num-list))) )
318 ;;
\e$B<-=q8+=P$7Nc
\e(B; #+#+# /(skk-plus)/
320 (apply '+ (mapcar 'string-to-number skk-num-list))))
325 (apply '- (mapcar 'string-to-number skk-num-list))))
330 (apply '* (mapcar 'string-to-number skk-num-list))))
333 (defun skk-ignore-dic-word (&rest no-show-list)
334 ;;
\e$B6&MQ<-=q$KEPO?$5$l$F$$$k!"0c$C$F$$$k
\e(B/
\e$B5$$KF~$i$J$$JQ49$r=P$5$J$$$h$&$K$9
\e(B
336 ;;
\e$B<-=q8+=P$7Nc
\e(B;
337 ;;
\e$B$k$9$P$s
\e(B /
\e$BN1<iHV
\e(B/(skk-ignore-dic-word "
\e$BN1<iEE
\e(B")/
338 ;;
\e$B$+$/$F$$
\e(B /(skk-ignore-dic-word "
\e$B3NDj
\e(B")/
339 (let (new-word save-okurigana)
340 ;; skk-ignore-dic-word
\e$B<+?H$N%(%s%H%j$r>C$9!#>C$9$Y$-8uJd$O
\e(B
341 ;; skk-henkan-list
\e$B$+$iD>@\Cj=P$7$F$$$k$N$G
\e(B delete
\e$B$G$O$J$/
\e(B delq
\e$B$G==J,!#
\e(B
342 (setq skk-henkan-list (delq (nth skk-henkan-count skk-henkan-list)
344 ;;
\e$BA48uJd$r
\e(B skk-henkan-list
\e$B$KF~$l$k!#
\e(B
345 (while skk-current-search-prog-list
346 (setq skk-henkan-list (skk-nunion skk-henkan-list (skk-search))) )
347 ;;
\e$BITMW$J8uJd$r<N$F$k!#
\e(B
349 (setq skk-henkan-list (delete (car no-show-list) skk-henkan-list)
350 no-show-list (cdr no-show-list) ))
351 ;;
\e$B%+%l%s%H$N8uJd
\e(B (skk-ignore-dic-word
\e$B<+?H$N%(%s%H%j
\e(B)
\e$B$r>C$7$?$N$G!"
\e(B
352 ;; skk-henkan-count
\e$B$O<!$N8uJd$r;X$7$F$$$k!#
\e(B
353 (setq new-word (or (nth skk-henkan-count skk-henkan-list)
354 (progn (setq save-okurigana skk-okuri-char)
355 (skk-henkan-in-minibuff) )))
356 ;;
\e$B8uJd$,$J$$$H$-!#
\e(B
358 ;;
\e$B6uJ8;zNs$,EPO?$5$l$?$i<-=qEPO?$NA0$N>uBV$KLa$9!#
\e(B
359 ;; (nth -1 '(A B C))
\e$B$O!"
\e(BA
\e$B$rJV$9$N$G!"
\e(Bn
\e$B$,Ii$N?t$G$J$$$3$H$r%A%'%C%/
\e(B
360 ;;
\e$B$7$F$*$/I,MW$,$"$k!#
\e(B
361 (if (> skk-henkan-count 0)
362 (setq skk-henkan-count (- skk-henkan-count 1)
363 new-word (nth skk-henkan-count skk-henkan-list) )
364 ;; (1- skk-henkan-count) == -1
\e$B$K$J$k!#"&%b!<%I$KLa$9!#
\e(B
365 (setq new-word (if save-okurigana
366 (substring skk-henkan-key 0
367 (1- (length skk-henkan-key)) )
370 ;;
\e$B2<5-$NJQ?t$O!"
\e(Bskk-henkan-in-minibuff
\e$B$NCf$GD4@0$5$l$k!#
\e(B
371 ;; skk-henkan-active nil
372 ;; skk-okuri-char nil
373 ;; skk-henkan-okurigana nil
376 (setq skk-insert-new-word-function
377 'skk-henkan-face-off-and-remove-itself ))))
381 (defun skk-henkan-face-off-and-remove-itself ()
382 ;; skk-insert-new-word-function
\e$B$K%;%C%H$9$k$?$a$N4X?t!#%+%l%s%H%P%C%U%!$N
\e(B
383 ;;
\e$BJQ49ItJ,$,
\e(B Overlay
\e$B$N
\e(B face
\e$BB0@-$K$h$C$FI=<($,JQ99$5$l$F$$$k$N$rLa$7!"$=$N
\e(B
384 ;;
\e$B8e<+J,<+?H$r
\e(B skk-insert-new-word-function
\e$B$+$i<h$j=|$/<+Gz4X?t!#
\e(B
385 (skk-henkan-face-off)
386 (setq skk-insert-new-word-function nil) )
388 (run-hooks 'skk-gadget-load-hook)
390 (provide 'skk-gadget)
391 ;;; skk-gadget.el ends here