SKK + azikでsticky keyを使う方法を考える

割と前から、Emacsアンチエイリアスフォントを利用することに(多少の)憧れをもっていまして、特にRictyがでてきてからは、真面目にフォントの変更方法を調べたり設定したりしていました。

しかし私の環境がおかしいのかそれとも作る過程でなにかおかしいのか、Rictyフォントがどうしてもデレてくれず、一部の英数字が全角の半分の幅ではない状態が長くつづき、結局Inconsolata + M+フォントという、なんか劣化したRictyを設定して使っていました。

ま、以前にくらべればきれいなフォントでしたので、「まぁいっか」と放置していましたが、最近になって一つの事象に気付きました。正確に言えば気付いていましたが、気のせいだとして無視していました(ぉ

それは何かというと、「重い」ということです。感覚レベルじゃなく体感として重いです。どれくらい重いのかというと、mewのsummaryでメールを選んだ瞬間に固まってから、本文が表示されるレベルです。以前はこんなことはなく、原因を想像してみると、そういえばxftは重いとか聞いたことあるなー、ということに思いいたり、ためしに以前から使っていた ぱうフォントに久々にもどしてみると、まぁとってもサクサクじゃありませんかorz

メール開く度とか、org-modeで見出しを移動するときとかに一々引っ掛るのがいい加減ストレスになってきていたので、また ぱうフォントに戻してしまいました。まぁこのフォントも十分に見易いのでいいんですが。

本題

さて、題とまったく関係ない話から始まってしまいましたが、本題です。

色々なキーボード配列があるなかで、azikというキーボード配列をご存知の方も多いかと思います。ご存知でない方は私の拙い説明よりかはググっていただいた方が早いので割愛しますが、通常のローマ字入力と互換性を持たせたまま、より快適に日本語入力ができるように考慮された配列、というのが簡単な説明です。

一度、最近の流行にのってibus-mozcを利用していましたが、結局どうにも慣れきることができませんでした。なんと言えばいいかよくわかりませんが、しっくりこなかったというのが一番の理由になるでしょうか。

SKKを以前利用していたとき、sticky keyとしてセミコロンを利用していました。qwerty配列ではこれは理にかなっていましたが、azikではここに「っ」が配置されてしまうため、基本的には利用できません。SKK+azikを利用している方で、sticky keyを利用しているという話はついぞ聞いたことがないため、もしかしたらあまり利用されていないのかもしれません。

しかし一回qwerty配列でこれの恩恵にあずかってしまった私はどうにもこれが忘れがたく、なんとかできないかと試行錯誤してみました。

キーの入れ替えを試す

SKK上のazikは、skk-azik.elとして提供されています。しかし、SKKの上にazikの配列を単純に構築してしまうと、色々と困ったことになるため、キーバインド?が多少変更されています。

  • lが英数への切り替えとして利用されるため、la,liなどは xxa,xxiとされています
  • Qが「ん」として利用されるため、SKK本来のQの役割が@にバインドされています

まぁこれは些細なことですので、慣れるのも早いと思います。xxaとかまだ慣れず、そのたびにlを押下して軽くイラッとすることも度々ありますが。

azikの配列は基本部分はqwertyと同一です。上でも一部挙げていますが、単一キーに割り振られている符号として、以下の点がqwertyと異なっています。

これが単一キーというだけで、確かに大分違うのですが、sticky key として黄金の位置にあったセミコロンがskk-azik.elで潰されてしまっているため、中々どうしようもありません。また、これを変更しようにも、他に利用できるキーがそうあるわけでもなく、うーんと悩んでしまいました。

こういうときは自分が基本的に利用しない機能に割り当てられている機能のキーを潰す、というのが常套手段ですが、困ったことになかなかありません。試しに、あまり利用しない「/」を「っ」として利用するようにしてみましたが、これも中々しっくりきません。なにより、SKK本体の仕組みをよく知らないので、簡単にキーの機能を入れ替えられるかというとそうでもありません。

実際には結構シンプルな仕組みみたいなのですが、どうにも変換まわりが上手
くいきません。実際に色々ためしてみて、現在は以下のような設定で落ち着き
ました。

(setq skk-sticky-key ";")
(when (and skk-use-azik (equal skk-azik-keyboard-type 'jp106))
  (add-hook 'skk-azik-load-hook
            '(lambda ()
               (let ((unnessesary-list '("x;" ";"))
                     (nessesary-list '(("/" nil ("ッ" . "っ"))
                                       ("x/" nil "/"))))

                 (setq skk-downcase-alist
                       (append '((?\? . ?\;)) skk-downcase-alist))
                 (setq skk-downcase-alist
                       (append '((?+ . ?\/)) skk-downcase-alist))
                 (dolist (rule unnessesary-list)
                   (setq skk-rom-kana-rule-list
                         (skk-del-alist rule skk-rom-kana-rule-list)))
                 (dolist (rule nessesary-list)
                   (setq skk-rom-kana-rule-list
                         (add-to-list 'skk-rom-kana-rule-list rule)))))))

とりあえず上の方法で、セミコロンをsticky key として利用しつつ、「っ」
をワンキーで入力できるような状態にもっていっていますが、見た通り本来
"/" に割り当てられている機能が利用できなくなっています。あまり利用しな
いのですが、ぶっちゃけ "\" に割り当たっている機能の方が使わないので、
なんとかこっちと入れ替えできねーかなぁ、と思っている次第です。

それと上の方法で最大の欠点は、「変換時に "っ" をshiftで入力できない」
という点です。これのせいで使い勝手が非常に悪いものとなってしまっていま
す。これだけでも直れば、個人的には十分だとは思っているのですが。

締めに

SKK でsticky keyを使っている人が、SKK + azik で sticky key を使おうと
したときのもやもやと、その解決案を書いてみました。が、結局半端にしか解
決できていないため、何だかなぁ、というものになってしまいました。

ちなみに、JISキーボードとかなら、変換キーとかをsticky key にすることで
解決できたりします(前やったことあります)が、自分の環境がJISキーボード
英語キーボードが混在していたりするため、できるだけそういうキーを使わ
ないような設定にしています。

何か他にいい案がありましたら、教えていただければ幸いです。