[Anthy-dev 905] Re: uimでのescapeによるIMの無効化

Back to archive index

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を押すことがあまりないので、とくに支障なく使えていま
す。
# きっとこれからいろいろ問題が出てくるんでしょうけど。

-- 
前田 修吾



Anthy-dev メーリングリストの案内
Back to archive index