コンテンツにスキップ

キーバインド

Kanaemi のキーは、すべて設定で変えられます。修飾キーの単独押しも含めて、どのキーの割り当ても同じように外したり、別の機能に付け替えたりできます。

設定ファイル の [keys.<場面>] に、"押したキー" = "@機能" と書きます。書いた割り当ては既定の割り当てに足され、同じキーなら置き換わります。"@none" は割り当てを外します。

[keys.reading]
"ctrl+space" = "@next" # 足す
"shift+space" = "@none" # 外す
場面 いつ
reading 読みを打っているとき
completion 読みの 補完 の一覧が出ているとき。ここにないキーは reading のとおりに働く
candidates 候補を選んでいるとき
registration 語を登録しているとき(登録する文字列を打っているとき)
registration.kana-mode・registration.abc-mode 語を登録しているときのうち、かなモード・ABC モードで打っているとき(下を見る)
kana かなモードで、何も打っていないとき
abc ABC モードで、何も打っていないとき
application ふだん。何も打っていないときに、押したキーを別のキーに置き換えて送る(下を見る)
application.macos・application.windows・application.linux ふだんの置き換えのうち、その OS でだけ働くもの(下を見る)

場面に合わない機能は書けません。どの場面でどの機能が使えるかは 機能 にあります。

  • 1 文字のキー:"a"・"0"・";"
  • 名前のあるキー:space・tab・enter・esc・backspace・delete・left・right・up・down・home・end・page-up・page-down・f1〜f12・eisu(英数)・kana(かな)・henkan(変換)・muhenkan(無変換)・zenkaku-hankaku(半角/全角)・caps-lock
  • 修飾キーとの組み合わせ:+ でつなぐ。修飾キーは ctrl・cmd・alt・shift("ctrl+h"・"shift+space")
  • 左右の修飾キーそのもの:left-shift・right-shift・left-ctrl・right-ctrl・left-cmd・right-cmd・left-alt・right-alt

cmd は Windows と Linux では Win キー、alt は macOS では Option です。

caps-lock に機能を割り当てても、OS の Caps Lock はそのまま切り替わります。Windows の日本語キーボードでは Caps Lock を Shift+英数 で押すので、"shift+caps-lock" と書きます。

Shift・Ctrl・Cmd(Win)・Option(Alt)は、左右それぞれに、押したときと単独押しとで別々に機能を割り当てられます。

  • left-shift のように書くと、押したときに働きます。
  • left-shift#tap のように #tap を付けると、単独押しで働きます。単独押しは、ほかの修飾キーを押さえずに押し、ほかのキーを押さずに離したときです。
  • 押してから離すまでが tap_timeout_ms(既定は 300 ミリ秒)を超えたら、単独押しになりません。
  • どちらの割り当てが働いても、キー自体はアプリにも渡ります。

既定では、左の Shift の単独押しが ABC モード、右の Shift の単独押しがかなモードです。

文字を打つキー(Space を含む)は、押さえたままにも機能を割り当てられます。SandS(Space を押さえている間は Shift、単独で押すと Space)のようなもので、Shift の代わりに、割り当てた機能が働きます。#hold を付けて書きます。

  • 押さえたまま文字を打つと、その機能を働かせてから文字を打ちます。
  • 単独で押すと、そのキーのふだんの割り当てのまま働きます。ただし、押したときではなく離したときに働きます。
  • 速く打ってキーが重なったときは、文字のキーを先に離せば押さえたまま、押さえたキーを先に離せば単独で押してから文字を打ったものとします。ほぼ同時に離したときは、文字のキーを先に離したもの(押さえたまま)とします。
  • tap_timeout_ms より長く押さえて、何も打たずに離したときは、何もしません。
  • 押さえている間にモードが切り替わると、そのキーは離したものとします。押さえたまま打って待っていた文字は、単独で押したものとして先に打ちます。
  • 押さえたままか単独で押したのかが決まるまで、未確定文字列の末尾に 押さえたままの印 を出します。既定の印は空です。
  • ローマ字の打ちかけの続きとして表の規則を作るキーは、押さえたままの割り当てを働かせず、表を通します。

macOS では、キーを離したことを知るのに「入力監視」の許可が要ります。許可がないあいだ、押さえたままに割り当てたキーは、いつも単独で押したものとして働きます(macOS の許可)。

SKK で SandS を使ってきた人は、Space を押さえたまま打つことで、; の代わりに読みや送り仮名を始められます。Shift で読みを示していた指の動きが、そのまま使えます。

Space を押さえたまま k を押してから anji と打つと読み「›かんじ」になり、ka と打ってから Space を押さえたまま k を押して u と打つと「»書く」に変換する。Space を単独で押せば、いつもどおり変換や空白になるSpace を押さえたまま k を押してから anji と打つと読み「›かんじ」になり、ka と打ってから Space を押さえたまま k を押して u と打つと「»書く」に変換する。Space を単独で押せば、いつもどおり変換や空白になる
打つキー 結果 ; で打つなら
Space を押さえたまま k、離して anji ›かんじ ;kanji
ka、Space を押さえたまま k、離して u »書く ;ka;ku
候補を選んでいるときに Space を押さえたまま k … 候補を確定して、次の読みを始める »漢字;k …

Space を押さえたまま続けて打っても、読みの始めのローマ字の打ちかけ(nyu の yu)や、送り仮名を始めたあとの打ちかけの続き(ka のあと押さえたまま tta の ta)では、読みや送り仮名を始め直しません。読みのかなの後ろに打ちかけがあれば、先にかなにしてから送り仮名を始めます(kan のあと押さえたまま ji で、送り仮名は「じ」)。

既定では割り当てていないので、使うときは足してください。

  • 設定アプリ:キーバインドの「読みを始める」に「Space を押さえたまま」を足します。読みを始める機能が働くすべての場面に、まとめて割り当てます。
  • 設定ファイル:場面ごとに "space#hold" = "@begin" を書きます。
[keys.kana]
"space#hold" = "@begin"
[keys.reading]
"space#hold" = "@begin"
[keys.candidates]
"space#hold" = "@begin"
[keys.registration]
"space#hold" = "@begin"

Space を単独で押したときは、これまでどおり変換・次の候補・空白として働きます。ただし、押したときではなく離したときに働くようになります。; の割り当てはそのまま残るので、両方を使い分けられます。

  • 文字のキーは、その文字を打ちます。候補を選んでいるときは、選んでいる候補を確定してから打ちます。
  • かなモードの Space は、ローマ字の表 に空白を入力に含む規則があれば、文字のキーと同じに表を通します。
  • Space・Enter・矢印などは、読み・候補・登録する文字列があるあいだは何もしません。
  • Ctrl・Cmd(Win)・Option(Alt)付きのキーは、入力中は何もしません。[keys] pass_while_composing に書いた修飾キー("cmd"・"ctrl"・"alt")付きのキーは、確定してからアプリに渡します。
  • ほかのキー(割り当てのない Tab など)は、未確定文字列をそのままにしてアプリに渡します。
[keys]
pass_while_composing = ["cmd"] # 入力中に Cmd+S を押しても、確定してから保存される

何も打っていないときは、押したキーを別のキーに置き換えてアプリに送れます。どの OS のどのアプリでも、同じキー(Emacs のキーなど)で操作できるようにするためです。ここだけは機能ではなく、送るキーの名前を書きます。

[keys.application]
"ctrl+h" = "backspace"
"ctrl+n" = "down"
"ctrl+p" = "up"

置き換えの対象は、文字のキーや F キーを除いた、名前のあるキーだけです。置き換えのないキーと、キーを送れないときは、押したキーをそのままアプリに渡します。

  • macOS では、キーを送るのにアクセシビリティの許可が要ります(macOS の許可)。
  • Linux の Fcitx5 で、Sway のような Wayland の入力メソッドのプロトコルの第 2 版を使うデスクトップでは、送るキーに押している修飾キーが付いてしまうため、置き換えません。

置き換えは、OS ごとにも決められます。[keys.application] はどの OS にも働き、[keys.application.macos]・[keys.application.windows]・[keys.application.linux] は、その OS で動いているときだけ上に重なります。同じキーなら OS の表が勝ち、"@none" でその OS でだけ置き換えを外せます。

[keys.application]
"ctrl+m" = "enter"
[keys.application.macos]
"ctrl+m" = "@none" # macOS では置き換えない
[keys.application.windows]
"ctrl+h" = "backspace"

既定では次のとおりです(既定のキー)。

OS 既定の置き換え
どの OS でも Ctrl+M を Enter に
macOS Ctrl+Backspace・Ctrl+Delete を、語ごとに消す Option+Backspace・Option+Delete に。Ctrl+H などは、macOS の入力欄がもともと扱うので置き換えない
Windows・Linux Emacs 風の Ctrl+H・D・B・F・A・E・N・P を、Backspace・Delete・矢印・Home・End に

ほかの OS の表に書き間違いがあっても、ログと設定アプリで知らせます。設定ファイルを OS の違うマシンに持っていっても、そのまま使えます。

ターミナルや Emacs のように、Ctrl+H などを自分で扱うアプリでは、置き換えないほうが都合のよいことがあります。[keys] send_except に並べたアプリでは、置き換えのあるキーも、置き換えのないキーと同じにそのままアプリに渡します。

[keys]
send_except = ["com.apple.Terminal", "org.gnu.Emacs"]

アプリは、OS がアプリを見分ける名前で書きます。大文字と小文字は区別しません。

OS 書くもの 例
macOS バンドル ID com.apple.Terminal
Windows 実行ファイル名 WindowsTerminal.exe
Linux GTK のプログラム名 gnome-terminal-server

Linux では、プログラム名を伝えないアプリ(XIM を通るものなど)は見分けられず、いつも置き換えます。

設定アプリ では、アプリを名前とアイコンで選んで足せます。

「キーバインド」の画面の「キーを置き換えないアプリ」。並べたアプリでは、ふだんのキーの置き換えをしない。下に「アプリを足す…」のボタンがある「キーバインド」の画面の「キーを置き換えないアプリ」。並べたアプリでは、ふだんのキーの置き換えをしない。下に「アプリを足す…」のボタンがある

用意されたローマ字の表 azik は、; で「っ」を打ちます。AZIK を使うときは、; を @begin から外し、読みを始めるキーを別に割り当ててください。

[romaji]
tables = ["full-width", "hepburn", "kunrei", "input-aids", "z-symbols", "azik"]
[keys.kana]
";" = "@none"
"right-alt#tap" = "@begin"
[keys.reading]
";" = "@none"
"right-alt#tap" = "@begin"
[keys.candidates]
";" = "@none"
"right-alt#tap" = "@begin"
[keys.registration]
";" = "@none"
"right-alt#tap" = "@begin"

この例では、右の Option(Alt)の単独押しで読みを始めます。

登録の場面をモードごとに分ける

Section titled “登録の場面をモードごとに分ける”

語を登録しているときの割り当ては、かなモードで打っているときと ABC モードで打っているときとで分けられます。[keys.registration] はどちらのモードにも働き、[keys.registration.kana-mode]・[keys.registration.abc-mode] は、そのモードで打っているときだけ上に重なります。同じキーならモードの表が勝ち、"@none" でそのモードでだけ割り当てを外せます。

# 英字で登録する文字列を打っているときは、; を読みの始まりにせず、そのまま打つ
[keys.registration.abc-mode]
";" = "@none"

既定では、どちらのモードの表も空です。登録の場面の中で読み・候補の場面に入っているあいだは、その場面の割り当てが働きます。