skk-azikで「っ」が誤爆しやすい問題


skk48に名乗りを上げたとおり、普段は skk を使っているのだけれども、 私は単なるskkではなく、 azik を使っている。

azikは簡単に言うと、日本語ローマ字入力(qwertyを想定)に特化したskkの拡張で、 以下のような便利なマッピングになっている。

  • 長音(ー)は小指が遠いので「:」で入力できる
  • 促音も二回重ねるのが面倒なので「;」で入力できる
  • 日本語は「子音+an(晩餐はb + an, s + anとか)」、「子音+in(新品はs + in, p + in)」のように 子音 + 母音 + n からなる語が多く含まれるので、「子音 + zで子音+az」「子音 + kで子音+in」といった感じに、少ないキータイプで入力することが可能になる。(なので、 az ikazik )
  • さらに拡張で「 dsです 」「 msます 」のように、さらに簡易にするマッピングもされている(自分はあまりこれは使ってない)

詳細については、公式サイトを見てほしい。 http://hp.vector.co.jp/authors/VA002116/azik/azikinfo.html

ところで、われらがemacsの ddskk にもazik用の設定が搭載されているのだが、 なぜかそのマッピングの中に tU が、 にわりあてられている。 そのため、よく入力中に、意図せず が入力されてしまう問題が発生していた。

例えば「疲れた」や「積む」のような「つ」から始まる感じを入力しようとして、「▽っかれた」のように頭が ではなく になってしまう人がいたら同じ症状だと思う。おそらく意識せず Tu と打とうとして、 TU とか tU と入力しているはず。

いろいろ試して以下の設定で改善することが確認できた。 私も長年、そもそも何がおきているかわからずに困っていたのだけれど、もし同様に困っている人いたら参考になれば幸いである。

(leaf ddskk
  :straight t
  :bind
  (("C-x C-j" . skk-mode)
   ("C-x j"   . skk-mode))
  :init
  (defvar dired-bind-jump nil)  ; dired-xがC-xC-jを奪うので対処しておく
  :custom
  (skk-use-azik . t)                     ; AZIKを使用する
  (skk-azik-keyboard-type . 'jp106)      ;
  :hook
  (skk-azik-load-hook . my/skk-azik-disable-tU)
  :preface
  (defun my/skk-azik-disable-tU ()
    "ddskkのazikモードが`tU'を`つ'として扱うのを抑制する."
    (setq skk-rule-tree (skk-compile-rule-list
                         skk-rom-kana-base-rule-list
                         (skk-del-alist "tU" skk-rom-kana-rule-list)))))

内容の解説

基本的にドキュメントを読む限り、 skk-rom-kana-rule-list にユーザ独自の設定は入れるので、 そこから消せばよいはずなのだが、再コンパイルしないとだめだったのでそのようにしている。 ちなみに、 skk-del-alistskk-rom-kana-rule-list から不要なのを削除するための便利な関数である。追加したい場合は普通に append すればよい。

参考: http://mail.ring.gr.jp/skk/200106/msg00009.html

また、普通なら leaf なり use-package なりの :config ブロックに設定すればよいのだけど、 ロード後の処理の影響からかazikの設定に上書きされてしまっているように見えたので、 skk-azikの中で最後に呼ばれる skk-azik-load-hook を使って、自前のルール修正関数を呼ぶようにしている。

printデバッグしてみたら、 :config がそもそも呼ばれてなかったようにも見えたので もうすこし上手いやりかたがあるのかもしれない。


See also

comments powered by Disqus