(eval-when-compile (require 'cl)) (defvar its-current-language "Japanese") (defvar its-zhuyin nil) (make-variable-buffer-local 'its-zhuyin) (defun its-make-select-func (key1 key2 name file map &optional lang zhuyin) (setq name (intern (concat "its-select-" (symbol-name name))) file (intern (concat "its/" (symbol-name file))) map (intern (concat "its-" (symbol-name map) "-map")) lang (symbol-name lang)) (cons `(defun ,name (&optional mode-line-unchange) (interactive) (cond ((its-in-fence-p) (its-input-end) (its-put-cursor t)) ((egg-get-bunsetsu-info (point)) (egg-exit-conversion))) ,(if lang `(egg-check-language ,lang)) (require ',file) (setq its-current-map ,map) ,(if lang `(setq its-current-language ,lang)) ,(if zhuyin `(setq its-zhuyin ,(eq zhuyin 'T))) (if (null mode-line-unchange) (egg-set-mode-line-title))) `(define-key map (if fence ,(concat "\e" (vector key2)) ,(concat "\C-x\C-m" (vector key1))) ',name))) (defmacro its-do-list-make-select-func (list) (eval-when (eval compile) (let (funcs keydefs pair) (while list (setq pair (apply 'its-make-select-func (car list))) (setq funcs (cons (car pair) funcs) keydefs (cons (cdr pair) keydefs)) (setq list (cdr list))) `(progn ,@funcs (defun its-define-select-keys (map &optional fence) ,@keydefs))))) (its-do-list-make-select-func ((?Q ?Q upcase ascii up) (?q ?q downcase ascii down) (?h ?\C-h hiragana hira hira Japanese) (?k ?\C-k katakana kata kata Japanese) (?x ?\C-x hankaku-katakana hankata han-kata Japanese) (?Z ?Z zenkaku-upcase zenkaku zenkaku-up Japanese) (?z ?z zenkaku-downcase zenkaku zenkaku-down Japanese) (?\C-e ?\C-e erpin-cn erpin erpin-cn Chinese-GB NIL) (?\C-p ?\C-p pinyin-cn pinyin pinyin-cn Chinese-GB NIL) (?\C-z ?\C-z zhuyin-cn zhuyin zhuyin-cn Chinese-GB T) (?\C-u ?\C-u quanjiao-upcase-cn quanjiao quanjiao-up-cn Chinese-GB) (?\C-d ?\C-d quanjiao-downcase-cn quanjiao quanjiao-down-cn Chinese-GB) (?E ?E erpin-tw erpin erpin-tw Chinese-CNS NIL) (?P ?P pinyin-tw pinyin pinyin-tw Chinese-CNS NIL) (?Z ?Z zhuyin-tw zhuyin zhuyin-tw Chinese-CNS T) (?U ?U quanjiao-upcase-tw quanjiao quanjiao-up-tw Chinese-CNS) (?C ?C quanjiao-downcase-tw quanjiao quanjiao-down-tw Chinese-CNS) (?H ?H hangul hangul hangul Korean) (?J ?J jeonkak-upcase jeonkak jeonkak-up Korean) (?j ?j jeonkak-downcase jeonkak jeonkak-down Korean))) (provide 'its-keydef)