Shugo Maeda
shugo****@ruby-*****
2004年 7月 7日 (水) 14:05:52 JST
前田です。 Shugo Maeda wrote: > Katoさんに教えていただいたuim-skk用のコードを参考にControl-[でも同じ挙動 > にして、uim-appletのモード表示も更新されるようにしてみました。 調子にのって、viでiなどのコマンドでinsert modeに戻った時に、前にinsert modeで使っていたuim-primeのモードに戻すようにしてみました。 # つまり、日本語だけを入力する間はShift+Spaceを押す必要をなくしたという # ことです。 (define prime-suspended-mode -1) (define prime-in-vi-c-command #f) (define prime-context-set-mode-orig! prime-context-set-mode!) (set! prime-context-set-mode! (lambda (ac mode) (set! prime-suspended-mode -1) (set! prime-in-vi-c-command #f) (prime-context-set-mode-orig! ac mode))) (define prime-push-key-orig prime-push-key) (set! prime-push-key (lambda (c key key-state) (let* ((sc (context-data c)) (mode (prime-context-mode sc))) (prime-push-key-orig c key key-state) (cond ((and (not (= mode prime-mode-latin)) (or (= key 'escape) (and (= key 91) ;; [ (= key-state 2)))) ;; control (prime-context-set-mode-orig! sc prime-mode-latin) (prime-update-mode (context-id c) sc) (set! prime-suspended-mode mode) (set! prime-in-vi-c-command #f)) ((and (= mode prime-mode-latin) (>= prime-suspended-mode 0)) (cond ((or (= key 105) ;; i (= key 73) ;; I (= key 97) ;; a (= key 65) ;; A (= key 111) ;; o (= key 79) ;; O (= key 67) ;; C (= key 115) ;; s (= key 83) ;; S (and prime-in-vi-c-command (or (= key ) (= key 108) ;; l (= key 119) ;; w (= key 101) ;; e (= key 99) ;; c (= key 71)))) ;; G (prime-context-set-mode-orig! sc prime-suspended-mode) (prime-update-mode (context-id c) sc) (set! prime-suspended-mode -1) (set! prime-in-vi-c-command #f)) ((= key 99) ;; c (set! prime-in-vi-c-command #t)) ((or (= key 58) ;; : (= key 47) ;; / (= key 63) ;; ? (= key 33) ;; ! (= key 'escape)) (set! prime-suspended-mode -1) (set! prime-in-vi-c-command #f)))))))) ほんとはvi上でだけ上記の挙動にしたいところですが、viを使っている時以外に 非英数モードでesacpeを押すことがあまりないので、とくに支障なく使えていま す。 # きっとこれからいろいろ問題が出てくるんでしょうけど。 -- 前田 修吾