お久しぶりです、masm11 です。
前回は、WSL2 に ArchLinux を入れる記事を書きました。
今回は、その Emacs で日本語入力します。
Emacs pgtk での日本語入力
pgtk で日本語入力するには、大きく2つのやり方があります。
input method framework を使う方法
デフォルトではこちらになっています。Fcitx5 (または IBus 等) が必要になります。
input method framework を使わない方法
mozc.el という emacs lisp が mozc_emacs_helper を経由して Mozc を使います。Fcitx5 等は使いません。
今回は、後者の方法を使います。前者は既に世の中に記事がたくさんありますので、参考にしてみてください。
私は、mode-line に [Mozc]
と表示される、後者の方が好きです。
ArchLinux のインストール
ArchLinux のインストール・設定までは、前回の記事を参考にしてください。 リンクを再掲しておきます。
ただ、いくつか不足している点がありますので、補足しておきます。
- wheel に自分を追加
vi /etc/group
これで、wheel グループに自分自身を追加します。これがないと sudo が使えません。
なお、wsl コマンドに -u root
を指定すると、root 権限のシェルを起動できます。
- ホームディレクトリを作成
sudo mkdir /home/masm
sudo chown masm:masm /home/masm
では進めましょう。
Mozc のインストール
Mozc のインストールには、mozc-with-jp-dict という AUR パッケージをインストールします。
とりあえず wget をインストールします。
sudo pacman -S wget
mozc-with-jp-dict パッケージをダウンロード、展開します。
wget https://aur.archlinux.org/cgit/aur.git/snapshot/mozc-with-jp-dict.tar.gz
tar zxf mozc-with-jp-dict.tar.gz
cd mozc-with-jp-dict
私の環境では、少し手を加える必要がありました。
vi PKGBUILD
で、2行ある bazel build ...
を両方とも bazel build --jobs 1 ...
に書き換えます (--jobs 1
を追加します)。
こうしないと、bazel が Connection reset by peer を吐いて、ビルドが中断してしまいました。 並列ビルドに何か問題がありそうですね。まぁ単純にメモリ不足の可能性もありますが。
では、ビルドしていきます。
makepkg -s
かなり時間がかかります。
終わったら、*.pkg.tar.zst
ファイルがいくつか生成されていますので、インストールします。
sudo pacman -U fcitx5-mozc-with-jp-dict-2.29.5374.102-1-x86_64.pkg.tar.zst emacs-mozc-with-jp-dict-2.29.5374.102-1-x86_64.pkg.tar.zst
fcitx5 が付いたものは、fcitx5 に対応しています。今後、気が変わって fcitx5 を使うかもしれませんので、これを使うと良いでしょう。 emacs が付いたものは、mozc.el と mozc_emacs_helper が含まれています。
Windows に PowerToys をインストール・設定する
ここまでで、たぶん、C-\
(Ctrl+\
) で日本語入力がトグルできるのでは、と思います。
が、ここで色気を出します。 右 Windows キーでトグルするようにしたいと思います。 あなたのキーボードを見ても、右 Windows キーなんてたぶんないですよね。 私の HHKB では右◇キーが右 Windows キーになっているのです。 このキー単体でトグルしたい、というわけです。
- まず Windows に PowerToys をインストールします
- PowerToys のダッシュボードで、Keyboard Manager が無効なモジュールになっていますので、ON にします
- そして PowerToys の Keyboard Manager に以下のように設定します
- キーの再マップ
- Win(Right) → Alt(Left) + IME Kanji
- OK をクリックすると警告が出ますが、「それでも続行する」で設定できます
- ショートカット
- Alt(Left) + IME Kanji → F12
- アプリは msrdc.exe
- キーの再マップ
こう設定することで、右 Windows キーを押すと、Alt(Left) + IME Kanji に変換され、 通常の Windows アプリではこれで日本語入力ができます (原神の場合を含みますが、あのゲームは管理者権限で動いていますので、 PowerToys も管理者権限で動かす必要があります)。 そして、WSL2 の場合は、実体は msrdc.exe だそうですので、更にショートカットが機能し、 F12 になります。
どうも、Keyboard Manager と WSLg の組み合わせだと、Alt キーがうまく機能しないみたいで、 かと言って再マップに半角全角キーを単体で設定すると、キーボード配列を 101/102 にした時に 反応しなくなります。また、ショートカットの変換元は修飾キーが必須です。 こういういろいろな条件をくぐり抜ける設定を模索した結果、こうなりなした。
ちなみに、WSLg というのは、WSL2 で GUI アプリを使えるようにするものです。WSL2 を起動すると
自動で起動します。これも Linux ですので、中身に興味があるなら wsl --system
でそっちのシェルが起動します。
Emacs を設定する
~/.emacs に以下のように設定します。
(let ((key "<f12>")) (require 'mozc) (global-set-key (kbd key) 'toggle-input-method) (define-key mozc-mode-map (kbd key) 'toggle-input-method)) (setq pgtk-use-im-context-on-new-connection nil) (setq default-input-method 'japanese-mozc)
これで F12 でトグルします。
最後から2行目の setq は、fcitx5 を使わない設定です。 デフォルトでは使う設定になっていますので、使わないように設定しています。
まとめ
以上で、HHKB 右◇で Windows アプリと WSL2 内 Emacs pgtk の日本語入力がトグルできました。
おまけ
日本語入力とは直接関係ありませんが、コピー/ペーストについての設定を紹介します。 私は、コピー/ペーストは ~/.emacs に以下のように設定して使っています。
(defun masm11:paste (p) (interactive "P") (let* ((sel (if p 'PRIMARY 'CLIPBOARD)) (types '(UTF8_STRING COMPOUND_TEXT text/plain\;charset=utf-8 STRING)) str) (while (and (null str) types) (setq str (gui-get-selection sel (car types))) (setq types (cdr types))) (if (not str) (message "Nothing pasted.") (insert str) (message "Pasted.")) )) (defun masm11:copy (start end) (interactive "r") (let ((str (buffer-substring-no-properties start end))) (gui-set-selection 'CLIPBOARD str) ;;(gui-set-selection 'PRIMARY str) (setq deactivate-mark t) (message "Copied.") )) (global-set-key "\M-c" 'masm11:copy) (global-set-key "\M-v" 'masm11:paste) (setq select-enable-clipboard nil)
Emacs は通常、kill ring と clipboard を統合した動きになりますが、私はそれが嫌いなので、
両者を切り離し、clipboard を使う時には Alt+c
/Alt+v
でコピー/ペーストしています。
Windows の clipboard とやりとりする際には mime type? が text/plain;charset=utf-8
になるようなので、
その設定をしてあります。この辺は、WSL2 内で wl-paste コマンドを使うとわかります。
ではまた!