4 (defvar its-current-language "Japanese")
6 (defvar its-zhuyin nil)
7 (make-variable-buffer-local 'its-zhuyin)
9 (defun its-make-select-func (key name file map &optional lang zhuyin)
10 (setq name (intern (concat "its-select-" (symbol-name name)))
11 file (intern (concat "its/" (symbol-name file)))
12 map (intern (concat "its-" (symbol-name map) "-map"))
13 lang (symbol-name lang))
15 `(defun ,name (&optional mode-line-unchange)
21 ((egg-get-bunsetsu-info (point))
22 (egg-exit-conversion)))
23 ,(if lang `(egg-check-language ,lang))
25 (setq its-current-map ,map)
26 ,(if lang `(setq its-current-language ,lang))
27 ,(if zhuyin `(setq its-zhuyin ,(eq zhuyin 'T)))
28 (if (null mode-line-unchange)
29 (egg-set-mode-line-title)))
30 `(define-key map ,(concat "\C-x\C-m" key) ',name)))
32 (defmacro its-do-list-make-select-func (list)
33 (eval-when (eval compile)
34 (let (funcs keydefs pair)
36 (setq pair (apply 'its-make-select-func (car list)))
37 (setq funcs (cons (car pair) funcs)
38 keydefs (cons (cdr pair) keydefs))
39 (setq list (cdr list)))
42 (defun its-define-select-keys (map)
45 (its-do-list-make-select-func
46 (("Q" upcase ascii up)
47 ("q" downcase ascii down)
48 ("h" hiragana hira hira Japanese)
49 ("K" katakana kata kata Japanese)
50 ("x" hankaku-katakana hankata han-kata Japanese)
51 ("Z" zenkaku-upcase zenkaku zenkaku-up Japanese)
52 ("z" zenkaku-downcase zenkaku zenkaku-down Japanese)
53 ("\C-e" erpin-cn erpin erpin-cn Chinese-GB NIL)
54 ("\C-p" pinyin-cn pinyin pinyin-cn Chinese-GB NIL)
55 ("\C-z" zhuyin-cn zhuyin zhuyin-cn Chinese-GB T)
56 ("\C-u" quanjiao-upcase-cn quanjiao quanjiao-up-cn Chinese-GB)
57 ("\C-d" quanjiao-downcase-cn quanjiao quanjiao-down-cn Chinese-GB)
58 ("E" erpin-tw erpin erpin-tw Chinese-CNS NIL)
59 ("P" pinyin-tw pinyin pinyin-tw Chinese-CNS NIL)
60 ("Z" zhuyin-tw zhuyin zhuyin-tw Chinese-CNS T)
61 ("U" quanjiao-upcase-tw quanjiao quanjiao-up-tw Chinese-CNS)
62 ("C" quanjiao-downcase-tw quanjiao quanjiao-down-tw Chinese-CNS)
63 ("H" hangul hangul hangul Korean)
64 ("J" jeonkak-upcase jeonkak jeonkak-up Korean)
65 ("j" jeonkak-downcase jeonkak jeonkak-down Korean)))