Skip to main content

Espanso の force_clipboard について

· 4 min read
mebiusbox
engineer

Espanso というテキスト入力支援ソフトで置換文字が改行を含んでいる場合に起こる問題とその対応方法についてまとめました.

Espanso とは

Espanso はテキスト入力支援ソフトです.WindowsやMacOSでも使えます.あらかじめトリガー文字と置換文字を指定しておくと、トリガー文字が入力されると同時に置換文字に置き換わります.Espanso では置換文字にクリップボードの内容やスクリプトの実行結果など様々な機能が利用できます.テキスト入力支援ソフトは他にも様々なものがあります.例えば、aText があります.また、keyhac を使って同様のことも出来るでしょう.

改行を含んでいる場合の問題となるケース

Espanso には文字を置換するときに2つのバックエンドを使い分けて処理します.InjectClipboardです.

Injectはキー入力をシミュレートし、Clipboardはクリップボードを経由して置換します.このバックエンドは設定で切り替えることが出来ます.標準で Auto となっており、トリガー時に自動で切り替わります.

問題となるのは Enterキー が改行ではなくショートカットなどに割り当てられている場合です.その場合 Inject だと適切に処理されません. ではどうするかというとバックエンドにClipboardを指定すればいいことになります.

バックエンドに Clipboard を使う方法

3つの方法があります.

すべてに Clipboard バックエンドを使う

設定ファイルで次のように設定します.

default.yml
backend: clipboard

clipboard_threshold を設定する

Clipboard バックエンドを使用する閾値を設定します.標準で 100 に設定されています.この閾値を超えると Clipboard バックエンドが利用されます. これは backendAuto のとき(標準)に機能します.

default.yml
clipboard_threshold: 20

force_clipboard を設定する

上記2つの方法はすべてのトリガーに適用されるのですが、 force_clipboard を使ってトリガーごとに Clipboardバックエンドを使うかどうか設定することができます. 次のように指定します.

- trigger: "Hello"
replace: "Hello, World"
force_clipboard: true

この force_clipboard は公式ドキュメントには見当たらず、ソースコードを見るか、Issues で見つけることができます. もしかすると将来的に無くなるかもしれません.

また、force_mode でも指定することができます.これはドキュメントにも記載があるのでこちらを使った方がいいかもしれません.force_mode で指定する場合は clipboard または keys を指定します.

- trigger: "Hello"
replace: "Hello, World"
force_mode: clipboard

さいごに

結局、Clipboard バックエンドを常に使うようにしておくのもありですし、環境によって適切な設定をすればいいと思います. 以上です.