smzht / fakeymacs

Emacs-like key bindings for Keyhac
MIT License
111 stars 49 forks source link

+STARTUP: showall indent

Fakeymacs は、Windows の操作を Emacs のキーバインドで行えるようにするための Keyhac の設定です。

Keyhac for Windows ver 1.82 以上のバージョンでご利用ください。

manual は次のリンクを参照してください。

  1. [[fakeymacs_manuals/configuration_parameters.org][Configuration parameters]]
  2. [[fakeymacs_manuals/key_bindings.org][Key bindings]]
  3. [[fakeymacs_manuals/extensions.org][Extensions]]
  4. [[fakeymacs_manuals/functions.org][Functions]]

次のページにも関連の情報があります。

** 本設定のキーバインドがサポートする機能

本設定のキーバインドでは、次の機能をサポートしています。

また、関連して次の機能もサポートしています。

[1] IME が ON の時に文字(英数字か、スペースを除く特殊文字)を入力すると起動するモードです。 (モードに入ると、▲のマークが表示されます。) Emacs 日本語入力モードになると Emacs キーバインド として利用できるキーが限定され、その他のキーは Windows にそのまま渡されるようになるため、 IME のショートカットキーが利用できるようになります。 また、このモードでは IME のショートカットキーを置き換える機能もサポートしており、初期値では 「ことえり」のキーバインドを利用できるようにしています。 詳しくは、次のページの「■ 「Emacs 日本語入力モード」のキーバインド」の項を参照してください。

** キーマップのレイヤー構成

本設定で利用している主なキーマップのレイヤー構成は次の図のとおりです。 入力したキーはキーマップの上位のレイヤーからサーチされ、キーがマッチすれば、そのキーに 定義されたコマンドを実行し、サーチを終了します。

[[/fakeymacs_manuals/keymap_layer/keymap_layer.png]]

※ keymap_remote レイヤーは、capslock_key Extension を有効にしたときに機能するレイヤーです。

※ keymap_vscode レイヤーは、vscode_key Extension を有効にしたときに機能するレイヤーです。

※ keymap_ei レイヤーは、fc.use_emacs_ime_mode 変数が True の時に機能するレイヤーです。

** 使い方

*** 1) キーボード配列の調整を行う

A キーの左横が CapsLock のキーボードを使っている場合は、右 Control キーに置き換える ことをお勧めします。

CapsLock のキーの置き換えは Keyhac ではできませんので、KeySwap や Change Key という ツールで対応ください。CapsLock の変更だけであれば、KeySwap の利用をお勧めします。

変更後、Windows の再ログインを行ってください。

なお、管理権限を持たない PC を利用している場合は、Fakeymacs の機能で CapsLock キーを Control キーとして利用することができます。詳しくは、以降にある「CapsLock キーを Ctrl キーとして使う機能について」の項を参照してください。

*** 2) IMEを切り替えるショートカットキーを無効化する

Alt+Shift や Ctrl+Shift のキー操作により IME の切り替えが行われる場合には、 次のページの内容を参照し、それらのキー(ショートカットキー)の無効化を行ってください。

※ この無効化の設定を行わないと、リージョンの選択が正しく機能しません。

*** 3) Keyhac をインストールする

次のサイトから Keyhac をインストールしてください。

起動時に dll load エラーが発生する場合は、「Microsoft Visual C++ 再頒布可能パッケージ」を インストールする必要があります。上記のサイトにリンクしてあるものは少し古いバージョンですので、 次のサイトから最新の「Visual Studio 2015、2017、2019、および2022の Microsoft Visual C++ 再頒布可能パッケージ」をダウンロードし、インストールしてください。

※ Windows OS が x64版 でも、「Microsoft Visual C++ 再頒布可能パッケージ」は x86版 を インストールする必要があります。

※ dll load エラーが発生しない場合でも、「Microsoft Visual C++ 再頒布可能パッケージ」の 最新版をインストールすることは意味のあることかもしれません。

※ 上記でインストールされる C:\Windows\SysWOW64\msvcp140.dll を keyhac.exe と同じフォルダに 置けば、再頒布可能パッケージをインストールしていない PC でも Keyhac を動かすことができる ようになります。

*** 4) Keyhac を自動起動するようにする

Win+R で開く画面に shell:startup と入力して Startup フォルダを開き、インストールした Keyhac フォルダ配下にある keyhac.exe のショートカットを Startup フォルダに配置してください。

*** 5) Fakeymacs をダウンロードする

本サイトの Code のボタン(緑色のボタン)から、Download ZIP を選択し、Fakeymacs 一式を ダウンロードしてください。(可能であれば、Git を使ってダウンロードすることをお勧めします。 Git を使うと、今後の Fakeymacs のバージョンアップに容易に対応できます。)

*** 6) 必要なファイルを Keyhac のフォルダに複写する

ダウンロードした Fakeymacs の ZIPファイルから、必要なファイルを Keyhac のフォルダに複写 します。次の中から必要なファイルを複写してください。(フォルダ配下にあるファイルは、 フォルダ階層を維持して複写するようにしてください。)

|------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Filename | Description | |------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | config.py | Fakeymacs の本体です。このファイルは必ず必要です。 | | _config_personal.py | fakeymacs で利用頻度が高いと思われるコンフィグレーションパラメータをまとめた個人設定ファイルです。config_personal.py という名称に変更することで機能するようになります。 | | _config_parameter.py | fakeymacs で設定可能な全てのコンフィグレーションパラメータをまとめたファイルです。config_personal.py 作成時の参考用として作成したものですが、config_personal.py に名称変更して個人設定ファイルとして利用することもできます。 | | fakeymacs_extensions/* | 機能拡張ファイルです。config_personal.py の中で有効/無効を切り替えることができます。 | |------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|

*** 7) コンフィグレーションパラメータをカスタマイズする

_config_personal.py ファイルを config_personal.pyという名称に変更し、変更したいコンフィグレーション パラメータをカスタマイズします。

次は、修正する必要性が高いと思われるコンフィグレーションパラメータです。

|----------------------------+----------------------------------------------------------------------------------| | Configuration Parameter | Description | |----------------------------+----------------------------------------------------------------------------------| | fc.ime | 利用している IME を指定する | | fc.transparent_target | すべてのキーマップを透過(スルー)するアプリケーションソフトを指定する | | fc.not_emacs_target | Emacs のキーバインドに“したくない”アプリケーションソフトを指定する | | fc.ime_target | IME の切り替え“のみをしたい”アプリケーションソフトを指定する | | fc.side_of_ctrl_key | 左右どちらの Ctrl キーを使うかを指定する | | fc.use_esc_as_meta | Esc キーを Meta キーとして使うかどうかを指定する | | fc.use_emacs_ime_mode | Emacs 日本語入力モードを使うかどうかを指定する | | fc.toggle_input_method_key | IME をトグルで切り替えるキーを指定する | | fc.set_input_method_key | IME を切り替えるキーの組み合わせ(disable、enable の順)を指定する | | fc.game_app_list | ゲームなど、キーバインドの設定を極力行いたくないアプリケーションソフトを指定する | |----------------------------+----------------------------------------------------------------------------------|

※ 1) で CapsLock に右 Control キーを割り当てた場合には、fc.side_of_ctrl_key 変数を "R" に 変更する必要があります。この場合、左 Control キーは従来どおり Windows ショートカット用 のキーとして利用できます。

※ コンフィグレーションパラメータの設定例にある次の行を有効にすると、alt-ime-ahk と同等の機能が 働くようになります。

+BEGIN_EXAMPLE

fc.set_input_method_key += [["O-LAlt", "O-RAlt"]]

+END_EXAMPLE

*** 8) 拡張機能の設定を行う

config_personal.py には、Fakeymacs の拡張機能を有効化/無効化するための設定も含まれています。

次のページを参照して、使いたい拡張機能があればその設定を行ってください。 (拡張機能を有効化する場合には、if 0: を if 1: にしてください。 また、必要であれば、コンフィグレーションパラメータの設定も行ってください。)

VSCode を利用する場合には、次の vscode_key Extension 用のコンフィグレーションパラメータの設定は 確認してください。

|----------------------------------------+------------------------------------------------------------------------------------------------------------------| | Configuration Parameter | Description | |----------------------------------------+------------------------------------------------------------------------------------------------------------------| | fc.vscode_target | VSCode 用のキーバインドを利用するアプリケーションソフトを指定する | | fc.use_direct_input_in_vscode_terminal | VSCode の Terminal内 で 4つのキー(Ctrl+k、Ctrl+r、Ctrl+s、Ctrl+y)のダイレクト入力機能を使うかどうかを指定する | |----------------------------------------+------------------------------------------------------------------------------------------------------------------|

*** 9) 日本語キーボードの設定がされている OS で英語キーボードを使えるようにする設定を行う(オプション)

Fakeymacs は、日本語キーボードの設定がされている OS で英語キーボードを使えるようにする機能 (ULE4JIS と同等の機能)を有しています。 英語キーボードを接続していなくても、日本語キーボードを英語配列キーボードとして使うこともできます。 (<変換>、<無変換> キーが使える英語配列キーボードとして使えます。) A-l で開くランチャーメニューの Other メニュー(C-f で移動して一番最後にあるメニュー)で、 キーボードレイアウトの切り替えが可能です。

この機能を利用して、Keyhac 起動時すぐにキーボードを英語配列で使いたい場合には、 fc.use_usjis_keyboard_conversion 変数を True に設定してください。

また、英語配列で日本語キーボードを利用する場合には、次の拡張機能を有効にすることで、 <]> キーを Enter キーとして、 <\> キーを Shift キーとして利用することができるようになります。 英語配列では使わないキーを英語キーボードのキー配置にあるキーに再割当てすることで、 日本語キーボードを英語キーボードのキー配置により近い形で利用することが可能となります。

*** 10) テキスト カーソル インジケーターの設定を行う(オプション)

IME の状態をテキスト カーソル インジケーターの色で表現する機能を利用する場合、次のページを参考とし、 テキスト カーソル インジケーターを有効にしてください。

また、config_personal.py 内の fc.use_ime_status_cursor_color 変数を True にしてください。

*** 11) keyhac.exe を起動する

keyhac.exe を起動すると、タスクバー(^アイコンの中)に Keyhac のアイコンが表示されます。 必要に応じて、通知領域に表示するようにしてください。 このアイコンを左クリックするとコンソールが表示され、右クリックすると機能の一覧が表示されます。

** 個人設定ファイル(config_personal.py)

_config_personal.py というファイルを config_personal.py というファイル名にすることで個人設定ファイル として機能します。本ファイルの設定には [ ] で括られたセクション名が定義されており、その単位で config.py の中に設定が取り込まれ、exec 関数により実行されます。

config.py のコンフィグレーションパラメータ等の設定を変更したい内容は、config_personal.py に記載して 管理することで、config.py のバージョンアップに容易に対応できるようになります。

何のセクションがどこで読み込まれるかについては、config.py ファイル内の exec 関数をコールしている ところを検索して確認してください。

** クロージャについて

Fakeymacs では、Python のクロージャの機能を多用しています。次のページを読むと、クロージャの理解が 深まり、Fakeymacs の設定も読みやすくなると思います。

** ウィンドウ操作の機能強化について

ウィンドウ操作については、次の拡張機能により、機能強化を図っています。

|------------------+----------------------------------| | Extension name | Description | |------------------+----------------------------------| | [[/fakeymacs_extensions/window_operation][window_operation]] | ウィンドウ操作のための設定を行う | |------------------+----------------------------------|

** VSCode の機能強化について

VSCode については、次の2つの拡張機能により、機能強化を図っています。

|-------------------+---------------------------------------| | Extension name | Description | |-------------------+---------------------------------------| | [[/fakeymacs_extensions/vscode_key][vscode_key]] | VSCode 用のキーの設定を行う | | [[/fakeymacs_extensions/vscode_extensions][vscode_extensions]] | VSCode Extension 用のキーの設定を行う | |-------------------+---------------------------------------|

VSCode の Emacs Keymap Extension と比較した本機能の特徴は、次のページの <2021/02/23 追記> の箇所に記載しています。参考としてください。

** SpaceFN のサポートについて

Fakeymacs は、次の拡張機能で SpaceFN の機能もサポートしています。

|----------------+------------------------------| | Extension name | Description | |----------------+------------------------------| | [[/fakeymacs_extensions/space_fn][space_fn]] | SpaceFN を実現する設定を行う | |----------------+------------------------------|

本拡張機能の SpaceFN は、Space を Fn キーとして利用する際に発生する日本語入力時の変換漏れの問題や、 Ctrl+Space(set-mark-command)を入力する際に Space が Fn キーとして認識されてしまう問題を、 Fakeymacs 独自の方法で解決しています。 Emacs のキーバインドとも十分に共存が可能なものとなっていますので、一度お試しいただければと思います。

** CapsLock キーを Ctrl キーとして使う機能について

管理権限を持たない PC を利用している場合でレジストリによるキーの置き換えができない場合に CapsLock キーを Ctrl キーとして使うための設定を行う機能を有しています。

|----------------+-----------------------------------------------------| | Extension name | Description | |----------------+-----------------------------------------------------| | [[/fakeymacs_extensions/capslock_key][capslock_key]] | CapsLock キーを Ctrl キーとして使うための設定を行う | |----------------+-----------------------------------------------------|

** HHKB Studio のキーマップ設定例について

HHKB Studio で Fakeymacs を使う際の、キーマップの設定例について紹介します。

HHKB Studio は Fakeymacs と相性の良いキーボードなので、キーボードをお持ちの方は参考にして いただければと思います。

** 留意事項

● Microsoft Excel や Word などの Office系アプリを使ってコピー&ペーストをした際、「Ctrl」と表示 される「貼り付けオプション」ボタンが表示される場合があります。 この「貼り付けオプション」ボタンは、fc.side_of_ctrl_key 変数で指定している側の Ctrl キーではオープン しないように対策していますので、「貼り付けオプション」ボタンを操作する場合は、fc.side_of_ctrl_key 変数で指定している側でない Ctrl キーを単押しするか、マウスを使って操作するようにしてください。 また、「貼り付けオプション」ボタンが不要な場合には、次のページの記載に従い、ボタンを表示しない設定 としてご利用ください。

● Keyhac のクリップボードリスト画面で migemo 検索を可能とするためには、辞書ファイルを登録する必要 があります。次のページに分かりやすく説明がされていますので、参考としてください。 (dictフォルダの中をすべてコピーするのではなく、dict/utf-8 の中のファイルをコピーするところが ポイントです。また、migemo 検索するには、検索文字列の一文字目を大文字で指定する必要があります。)

● Logicool のマウス で SetPoint アプリによりキーストロークの割当を行った場合、Keyhac のフックを OFF にしてから割当をしないと正常に動作しませんでした。他のキーストロークを設定するソフトの場合 にも同様の問題が発生する可能性があると思いますので、ご留意ください。

● Windows 11 にしたら、Keyhac のコンソールに「Time stamp inversion happened.」と表示される頻度が 高くなりました。これは、レジストリ HKEY_CURRENT_USER\Control Panel\Desktop\LowLevelHooksTimeout を DWORD 形式で作成し、そこに ms の値(10進数で 3000 などの数値)を設定して再起動することで、 ある程度の回避ができるようです。また、この設定は、文字が二重に出力される場合にも効果があるようです。 ただし、この設定により生ずる影響は分かっていませんので、試す場合は各自の責任でお願いします。