WSLのEmacsで、SKKの設定を見直す

SKKの設定を見直した話

以前、日本語入力をSKKに変えた話を書いた。 そのときはSKKになじめるかなと心配だったけれど、なんだかんだいって、慣れてきた。

僕の環境は、メイン環境がWindows、サブ環境がMac、開発環境がwsl上のEmacsだ。 MacでもEmacsを使っている。 それぞれの環境で快適に環境を構築するのにてまどっているうちに、使いにくいながらも慣れてきた。

でもやはり、ちゃんと環境をつくっておいたほうが、いろいろとストレスもなさそうなので、この際、wslのEmacsの環境を整備した。

ストレス

  • C-x C-jでの日本語入力オンができない
  • 変換、無変換で日本語入力をオンオフしたい
  • ミニバッファで、日本語入力が自動でオフにならない。
  • 変換、無変換、半角/全角を押すと画面の一部がフラッシュする

日本語入力のオンオフ

一般には、以下でskk-modeが開始する。

(global-set-key "\C-x\C-j" 'skk-mode)

だが、これはskk-modeのトグルであって、「日本語入力の開始」ではない。 つまり、lで英字入力のモードに入っているときに、\C-x\C-jすると、skkが終了してしまう。

僕は、あるキーを押せば、必ず日本語入力を開始したい。

ミニバッファでの日本語入力の自動オフ

こちらは、このあたりに設定があったと思う。 とりあえず、これで大丈夫なようだ。

(add-hook 'minibuffer-setup-hook
          (lambda ()
            (deactivate-input-method)))
  (add-hook 'helm-minibuffer-setup-hook
          (lambda ()
            (deactivate-input-method)))
  (add-hook 'helm-minibuffer-set-up-hook
          'helm-hide-minibuffer-maybe)

ミニバッファ関係は、もう少し設定をきちんとできる気がする。 でも、だいたいこれで使えるので、よしとしよう。

変換フラッシュ

WSL版限定かもしれないが、変換キーを押すと、モードラインが点滅する。C-gで止まるものの少し邪魔だ。 こういうのって、例えば変換キーにさわらなければ問題ないから、触らないように努力するでもいい。 でも、ちょっとずつストレスがたまって、長時間作業していると、いらいらしてくる。 そして、一番忙しいときに、設定をいじりはじめてしまったりする。

設定は余裕があるときに、きちんとしておくべきだ。

今はコロナの影響でこどもたちが家にいて、集中して仕事できない。 この時間をせめて有効活用して、Emacsのストレス解消とlispの勉強をしようと思いたった。

調査

設定を変えるといっても、すでに対処方法が公開されていれば難しいことはない。公開されている情報をいただいてくるだけである。

例えば、最後の画面の一部がフラッシュする問題は、「全角/半角」キーリピート問題としてしられていて、解決策があった。 画面フラッシュの問題は、この解決策で簡単に解決した。

とはいえ、この問題はずっとストレスだった。けれども、今まで対策が打てなかったのは、本腰を入れて対策しようとしていなかったからだ。 なんとなくがまんできたということと、軽く検索しても、回答を得られなかったためである。

ネット上にはさまざまな解決策が散りばめられているけれども、意外とどういうキーワードで検索したらいいのかわからない、という部分がある。 ふとしたときに、ずっと気になっていたことの回答を発見することもよくある。

その他の問題も似たような対策がまとめられている。先人の知恵はとても助かる。

なお、keyhacを使う方法もあるが、今回のように、emacsの日本語入力状態が必要なばあいには、不適かなと思って外した。 左altを単独で打鍵したときには、無変換の役割をさせるようなケースでは必須なので、英字キーボードを使うばあいにはまた使う予定である。

余談だけど、クラウドファンディングで英字キーボードを注文している。が、コロナの影響で物流が滞っているそうで、まだ届いていない。

方針

自分のストレスと現状調査をおこなった結果、以下のような対策をとることにした。

まず、日本語入力のはじまりは、変換キーで日本語入力をオンにする。 日本語入力時に無変換を押すと、英字入力に切り換わる。日本語入力をしていなときには、なにも起きない。

日本語入力のトグルは、\C-oや半角/全角キーで行う。

コード

とりあえず、日本語入力をオンにする関数とオフにする関数をつくってみた。 もしかすると、skk-mode固有のキーバインドをつくってしまえばいいのかもしれないけれど、とりあえず、これで動く。

日本語入力のオンは、skkが起動していない状態では、skk-modeでskkを起動する。skkがすでに起動している状態で、英字入力モードのときには、skk-kakuteiを呼び、 ひらがなモードにする。

英字入力は、skkが起動していない状態ではなにもしないようにした。skkが起動していないときに、(skk-latin-mode-on)とすると、エラーが出てしまう。 ここは、(deactivate-input-method)でもよい気がするのだが、うまく動かなかった。 なぜかは分からないけど、気にしないことにする。僕のやりたいことは、英字モードへの切りかえであって、skkのオフではないということも放置している一因である。

(defun skk-my-activate ()
  (interactive)
  (if skk-mode
      (skk-kakutei)
    (skk-mode)
    ))
(defun skk-my-deactivate ()
  (interactive)
  (if skk-mode
      (skk-latin-mode-on)
    ))
(global-set-key "\C-xj" 'skk-my-activate)
(global-set-key (kbd "<henkan>") 'skk-my-activate)
(global-set-key (kbd "<muhenkan>") 'skk-my-deactivate)

以上で、当初の目的が達成できた。 以前と比べて、かなりストレスが減った。

emacsの設定は楽しくて、やりはじめると、どんどん難しいところに足を踏みいれていく。 もうちょっとあれができないか、これができないかとぜいたくになっていく。

今までがまんしていた問題を解決できる可能性が見えてくるのだ。 もちろん、コマンド一発でできることではなく、ちょっとロジックを考えてプログラムを書かなければいけない。 それを考えるためには、基本的なコードの書きかたや関数をいくつか知っている必要がある。

だから、lispを少し勉強するために、新しい世界が広がり、できることが増えていくわけである。

例えば、今は日本語の校正はしていなけれど、校正システムを組みこむこともできる。 組みこむこと自体は簡単なのだけれど、それが便利かというと、そうでもない。 以前やってみたときには細かい設定方法が分からなくて、めんどうな指摘ばかり出てきて、オフにしてしまった。

今なら、ちょっとましに取りくめる気がするので、次はここに取りくんでみたい。

Hugo で構築されています。
テーマ StackJimmy によって設計されています。