0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Emacsを使っているとき、IMEを切り替え忘れて、C-x C-o をしたいのに、C-x C-おと入力することがある。
この問題を解決するために、Emacs 内部で動作する DDSKK を導入した。

この記事では、macOS を前提に、DDSKK の設定と OS の IME との共存環境を構築する方法を紹介する。

DDSKKとは

Emacs の内部で動作するマイナーモードだ。Emacs はまずキーバインドの解決を行い、マッチしなかった入力だけがテキスト挿入として処理される。DDSKK が変換を行うのはこのテキスト挿入の段階だけだ。
つまり、DDSKK が日本語モードであっても、C-x C-oC-x C-f はそのまま Emacs のコマンドとして動作する。

セットアップ

まずは DDSKK のパッケージをインストールする。

(use-package ddskk
  :ensure t
  :bind ("C-x C-j" . skk-mode))

サンプルコードでは、C-x C-j で SKK が起動する。

辞書の準備

DDSKK は辞書がないとほぼ機能しない。標準辞書である L 辞書(SKK-JISYO.L)を skk-dev/dict から取得し、Emacs から参照する場所(例: ~/.emacs.d/dict/)に置く。

mkdir -p ~/.emacs.d/dict
curl -o ~/.emacs.d/dict/SKK-JISYO.L \
  https://raw.githubusercontent.com/skk-dev/dict/master/SKK-JISYO.L

置いたパスは、次の設定で skk-large-jisyo に指定する。

設定

先ほど use-package ddskk した箇所に、L 辞書のパスを追記する。
サンプルコードでは、あわせて他の設定も追記している。

(use-package ddskk
  :ensure t
  :bind ("C-x C-j" . skk-mode)
  :custom
  ;; L辞書のパス
  (skk-large-jisyo "~/.emacs.d/dict/SKK-JISYO.L")

  ;; StickyShift を ; に設定
  (skk-sticky-key ";")

  ;; 変換候補をカーソル位置にインライン表示
  (skk-show-inline t)

  ;; 入力中に過去の変換履歴から候補を先読み表示
  (skk-dcomp-activate t)

  ;; Enterで確定と改行を同時に行う
  (skk-egg-like-newline t)

  ;; isearch中もSKKを使えるようにする
  (skk-isearch-mode-enable 'always))

各設定の補足:

  • skk-sticky-key : ; を StickyShift キーにする。;a▽あ になる。セミコロン自体は ;; で入力できる。Shift の多用で指に負担がかかるキーボードと相性が良い
  • skk-show-inline : 変換候補がカーソル直後にオーバーレイ表示される。ミニバッファに視線を移す必要がなくなる
  • skk-dcomp-activate : ▽ モードで入力中に候補を灰色で先読み表示する。TAB で補完を受け入れられる
  • skk-egg-like-newline : デフォルトでは ▼ 変換中に Enter を押すと確定だけされ改行されない。この設定で確定と改行が同時に行われる
  • skk-isearch-mode-enable : C-s の isearch 中でも日本語検索ができるようになる。OS の IME では不安定になりがちな箇所だ

補足:MELPA 経由でインストールした場合の isearch 設定

use-package ... :ensure t(MELPA インストール)では、make でインストールしたときに付属する skk-setup.el が読み込まれない。このため skk-isearch-mode-enable を設定するだけでは、isearch 中の日本語検索が有効にならないことがある。その場合は次のフックを追加する。

(add-hook 'isearch-mode-hook #'skk-isearch-setup-maybe)
(add-hook 'isearch-mode-end-hook #'skk-isearch-cleanup-maybe)

OS の IME との共存

Emacs 内で DDSKK を使う場合、OS の IME が同時に動くと変換が二重にかかってしまう。
そのため、Emacs にフォーカスが移ったときに、im-select を使って IME の入力ソースを強制的に英数にすることで解決した。
以下は macOS を前提としたコードだ。

(defun my/force-ascii-input-source ()
  (start-process "input-source" nil
                 "/opt/homebrew/bin/im-select"
                 "com.apple.keylayout.ABC"))

(defun my/after-focus-change ()
  (when (frame-focus-state)
    (my/force-ascii-input-source)))

(add-function :after after-focus-change-function #'my/after-focus-change)

これにより、Emacs にウィンドウをフォーカスするたびに、OS の入力ソースが英数に切り替わる。

基本操作

OS の IME と操作体系は同じだ。StickyShift を ; に設定している前提で記載する。

モード切り替え

キー 動作
C-x C-j SKK モードのオン/オフ
C-j かなモードに戻る
q かな ⇄ カナを切り替え
l ASCII モードに切り替え
;l 全角英数モードに切り替え

漢字変換

「漢字」と入力する場合:

;kanji → ▽かんじ → SPC → ▼漢字 → C-j(確定)
  1. ;k で変換開始点をマーク。 が表示される
  2. anji で残りのよみを入力。▽かんじ になる
  3. SPC で変換実行。▼漢字 になる
  4. 目的の候補でなければ SPC で次候補へ
  5. C-j で確定。次の入力を始めれば自動確定もされる

送りがなのある変換

「動く」と入力する場合:

;ugo;ku → ▼動く
  1. ;u で変換開始
  2. go で語幹を入力
  3. ;k で送りがなの開始点をマーク
  4. u で送りがなを入力。自動的に変換が走る

カタカナ入力

2つの方法がある。

モード切り替え方式: q でカナモードに入り、入力後に q で戻る。

変換中に変換する方式: モードで q を押すと、入力中のひらがなをカタカナに変換して確定する。一時的なカタカナ入力にはこちらが便利だ。

;katakana → ▽かたかな → q → カタカナ

英単語の挿入

かなモードのまま / を押すとアスキーモードに入る。英字を入力して Enter で確定するとかなモードに戻る。

/Emacs<Enter> → Emacs がバッファに挿入される

操作一覧

やりたいこと 操作
漢字変換 ; + よみ + SPC
送りがな付き変換 ; + 語幹 + ; + 送りがな
カタカナに変換 モードで q
英単語を挿入 / + 英字 + Enter
変換キャンセル C-g
確定 C-j または次の入力開始

コードを書くときの使い方

SKK は起動したまま、内部モードの切り替えだけで運用する。

  • l で ASCII モードに入ればそのまま普通にコードが書ける
  • コメントや文字列で日本語が必要になったら C-j でかなモードに戻る
  • C-x C-j で SKK 自体をオフにする必要はない

ASCII モードと SKK オフの違い に注意したい。l の ASCII モードは SKK が起動したまま英字入力になるだけで、C-j ですぐかなモードに戻れる。C-x C-j は SKK 自体を無効にするので、再度 C-x C-j しないと日本語入力に戻れない。日常的には lC-j の切り替えだけで十分だ。

まとめ

DDSKK を導入することで得られるもの:

  • キーバインドが壊れない — 日本語モード中でも C-x C-o のような Emacs コマンドがそのまま動く
  • isearch で日本語検索C-s で日本語をそのまま検索できる
  • 先読み補完が効くskk-dcomp で入力中に変換候補が先読み表示される
  • OS の IME と同じ操作体系 — 学習コストがほぼゼロ

自分の設定は以下のPR:

DDSKK はいいぞ!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?