Fakeymacs は、Windows の操作を Emacs のキーバインドで行えるようにするための Keyhac の設定です。
Keyhac for Windows v1.82 以上のバージョンでご利用ください(最新版は v1.83 です)。
manual は次のリンクを参照してください。
次のページにも関連の情報があります。
本設定のキーバインドでは、次の機能をサポートしています。
- Emacs 標準キーバインド
- Emacs 日本語入力モード [1]
- other_window(一番最近までフォーカスがあったウィンドウに移動する機能)
- shell_command(コマンドコンソールを起動する機能)
- クリップボードリスト
- ランチャーリスト
- 拡張機能(Extensions)で実現している機能
また、関連して次の機能もサポートしています。
- 日本語キーボード設定されている OS で英語キーボードを使うための機能
- IME の状態をテキスト カーソル インジケーターの色で表現する機能
[1] IME が ON の時に文字(英数字か、スペースを除く特殊文字)を入力すると起動するモードです。 (モードに入ると、▲のマークが表示されます。) Emacs 日本語入力モードになると Emacs キーバインド として利用できるキーが限定され、その他のキーは Windows にそのまま渡されるようになるため、 IME のショートカットキーが利用できるようになります。 また、このモードでは IME のショートカットキーを置き換える機能もサポートしており、初期値では 「ことえり」のキーバインドを利用できるようにしています。 詳しくは、次のページの「■ 「Emacs 日本語入力モード」のキーバインド」の項を参照してください。
本設定で利用している主なキーマップのレイヤー構成は次の図のとおりです。 入力したキーはキーマップの上位のレイヤーからサーチされ、キーがマッチすれば、そのキーに 定義されたコマンドを実行し、サーチを終了します。
※ keymap_remote レイヤーは、capslock_key Extension を有効にしたときに機能するレイヤーです。
※ keymap_vscode レイヤー、keymap_cursor レイヤー、keymap_windsurf レイヤーは、 vscode_key Extension を有効にしたときに機能するレイヤーです。
※ keymap_ei レイヤーは、fc.use_emacs_ime_mode 変数が True の時に機能するレイヤーです。
A キーの左横が CapsLock のキーボードを使っている場合は、右 Control キーに置き換える ことをお勧めします。
CapsLock のキーの置き換えは Keyhac ではできませんので、キーボードの機能で置き換えを 行うか、KeySwap や Change Key というツールでレジストリを設定して対応してください。
レジストリでの設定を行う場合、CapsLock の変更だけであれば、KeySwap の利用をお勧めします。
レジストリの設定を行った場合は、Windows の再サインインを行ってください。
なお、管理権限を持たない PC を利用している場合は、Fakeymacs の機能で CapsLock キーを Control キーとして利用することができます。詳しくは、以降にある「CapsLock キーを Ctrl キーとして使う機能について」の項を参照してください。
Alt+Shift や Ctrl+Shift のキー操作により IME の切り替えが行われる場合には、 次のページの内容を参照し、それらのキー(ショートカットキー)の無効化を行ってください。
- (Windows 10) https://jill-tone.com/win10ime_ctrlshift_invalidation/
- (Windows 11) https://softantenna.com/blog/windows-11-disable-ime-change-shortcuts/
※ この無効化の設定を行わないと、リージョンの選択が正しく機能しません。
次のサイトから Keyhac をインストールしてください。
起動時に dll load エラーが発生する場合は、「Microsoft Visual C++ 再頒布可能パッケージ」を インストールする必要があります。 次のサイトから最新の「Visual Studio 2015、2017、2019、および2022の Microsoft Visual C++ 再頒布可能パッケージ」をダウンロードし、インストールしてください。
※ Keyhac for Windows v1.82(旧版)を利用する場合は、x86版 をインストールする必要があります。 Keyhac for Windows v1.83(最新版)を利用する場合は、x64版 をインストールする必要があると 思われます(未確認)。
本サイトの Code のボタン(緑色のボタン)から、Download ZIP を選択し、Fakeymacs 一式を ダウンロードしてください。(可能であれば、Git を使ってダウンロードすることをお勧めします。 Git を使うと、今後の Fakeymacs のバージョンアップに容易に対応できます。)
ダウンロードした Fakeymacs の ZIPファイルから、必要なファイルを Keyhac のフォルダに複写 します。次の中から必要なファイルを複写してください。(フォルダ配下にあるファイルは、 フォルダ階層を維持して複写するようにしてください。)
Filename | Description |
---|---|
keyhac.bat | keyhac.exe をプロセス優先度「HIGH」で起動するためのバッチファイルです。 |
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 の中で有効/無効を切り替えることができます。 |
_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 と同等の機能が 働くようになります。
# fc.set_input_method_key += [["O-LAlt", "O-RAlt"]]
config_personal.py には、Fakeymacs の拡張機能を有効化/無効化するための設定も含まれています。
次のページを参照して、使いたい拡張機能があればその設定を行ってください。 (拡張機能を有効化する場合には、if 0: を if 1: に変更してください。 また、必要であれば、コンフィグレーションパラメータの設定も行ってください。)
Fakeymacs は、日本語キーボードの設定がされている OS で英語キーボードを使えるようにする機能 (ULE4JIS と同等の機能)を有しています。 英語キーボードを接続していなくても、日本語キーボードを英語配列キーボードとして使うこともできます。 (<変換>、<無変換> キーが使える英語配列キーボードとして使えます。) A-l で開くランチャーメニューの Other メニュー(C-f で移動して一番最後にあるメニュー)で、 キーボードレイアウトの切り替えが可能です。
この機能を利用して、Keyhac 起動時すぐにキーボードを英語配列で使いたい場合には、 fc.use_usjis_keyboard_conversion 変数を True に設定してください。
また、英語配列で日本語キーボードを利用する場合には、次の拡張機能を有効にすることで、 <]> キーを Enter キーとして、 <\> キーを Shift キーとして利用することができるようになります。 英語配列では使わないキーを英語キーボードのキー配置にあるキーに再割当てすることで、 日本語キーボードを英語キーボードのキー配置により近い形で利用することが可能となります。
IME の状態をテキスト カーソル インジケーターの色で表現する機能を利用する場合、次のページを参考とし、 テキスト カーソル インジケーターを有効にしてください。
また、config_personal.py 内の fc.use_ime_status_cursor_color 変数を True にしてください。
keyhac.exe か keyhac.bat をダブルクリックすることで Keyhac を起動させてください。 keyhac.bat は keyhac.exe をプロセス優先度「HIGH」で起動させるためのバッチファイルです。 お好みにより、ご利用ください。また、Windows のスタートアップフォルダにショートカットファイルを 格納することで、PC 起動時に Keyhac を自動起動することができます。
keyhac.exe を起動すると、タスクバー(^アイコンの中)に Keyhac のアイコンが表示されます。 必要に応じて、通知領域に表示するように調整してください。 このアイコンを左クリックするとコンソールが表示され、右クリックすると機能の一覧が表示されます。
Fakeymacs を利用して、文字が二重に入力されたり、Keyhac のコンソールに「Time stamp inversion happened.」 と何度も表示される場合には、レジストリ HKEY_CURRENT_USER\Control Panel\Desktop\LowLevelHooksTimeout をDWORD形式で作成し、そこに 10進数で 1000(ms の値)を設定して PC を再起動してください。 (fakeymacs_tools フォルダ配下にある、LowLevelHooksTimeout.reg を実行することでも設定することが できます。Windows 11 の場合、この設定は必須ようにに思われます。)
この対応で状況はかなり改善すると思われますが、この設定により生ずる影響は分かっていませんので、 設定を行う場合は各自の責任でお願いします。(私はこの設定をしてかなりの期間利用していますが、 今のところ問題となるような事象は発生しておりません。)
- https://apollo440.hatenablog.com/entries/2010/12/21
- https://nazochu.blogspot.com/2011/08/windows7.html
- https://blogs.msdn.microsoft.com/alejacma/2010/10/14/globa 8000 l-hooks-getting-lost-on-windows-7/
- https://learn.microsoft.com/ja-jp/windows/win32/winmsg/lowlevelkeyboardproc
_config_personal.py というファイルを config_personal.py というファイル名にすることで個人設定ファイル として機能します。本ファイルの設定には [ ] で括られたセクション名が定義されており、その単位で config.py の中に設定が取り込まれ、exec 関数により実行されます。 (何のセクションがどこで読み込まれるかについては、config.py ファイル内の exec 関数をコールしている ところを検索して確認してください。)
config.py のコンフィグレーションパラメータ等の設定を変更したい内容は、config_personal.py に記載して 管理することで、config.py のバージョンアップに容易に対応できるようになります。 拡張機能も config_personal.py の中で有効化/無効化する設定を行う仕組みとしていますので、有効化する 場合は config_personal.py の設定を変更してください。 (config_personal.py の後半に拡張機能を設定する箇所があるので、有効化する場合には、if 0: を if 1: に 変更してください。)
Fakeymacs では、Python のクロージャの機能を多用しています。次のページを読むと、クロージャの理解が 深まり、Fakeymacs の設定も読みやすくなると思います。
Windows Terminal では、複数の種類のターミナルをタブで個別に開くことができます。Fakeymacs では、 ウィンドウタイトルが変更されたイベントをキャッチすることにより、タブ毎に異なるキーバインドの 設定を実現しています。
なお、Windows Terminal で Ubuntu 等の Linux を利用する際は、設定 -> 二番目にある操作 メニューより、 「貼り付け」の Ctrl+v は削除しておかないと、Emacs や 以降で紹介する Midnight Commander での スクロールアップが正常に動作しません。Ctrl+v を削除した場合でも、Ctrl+Shift+v が Windows の クリップボードからの「貼り付け」として機能しますので、あまり困ることはないと思います。
Fakeymacs は Microsoft Edit に対応しています。Microsoft Edit は、ターミナルで起動すると、その ターミナルのタイトルを「ファイル名 - edit」に置き換える機能をもっています。この機能により、 Fakeymacs がターミナルで Edit を起動中であることを認識することができます。これは、Windows 版の Edit でも Linux 版の Edit でも同様に機能し、さらには ssh で接続した先で Edit を起動した場合でも 同様に機能します。
Linux 版の Edit は、次からダウンロードすることができます。一つのバイナリファイルとなって いますので、これを edit や msedit というファイル名に置き換え、~/bin などのパスの通った ディレクトリに格納すると、vim のようなエディタとして使うことができるようになります。
なお、Microsoft Edit を Windows Terminal を利用する場合は、設定 -> 操作 メニューより、 「貼り付けるときに末尾の空白を削除する」をオフに設定してください。 Microsoft Edit を使う際に改行を含む行のコピペが正しく機能するようになります。
Midnight Commander は、Linux、Windows どちらでも動く、テキストベースのファイルマネージャ です。Emacs like のキーバインドを持ち、ウィンドウタイトルを変更する機能ももっているので、 Windows Terminal などのターミナル上で Fakeymacs と共存して利用可能です。
Ubuntu で動かす場合は、sudo apt install mc でインストールが可能です。 Windows 版は以下からダウンロード可能です。
次のページに書かれている方法で、利用するエディタを先に紹介したMicrosoft Edit にすると、 シームレスに Emacs キーバインドの環境を利用することができます。
Midnight Commander の使い方は次のページに紹介されていますので、是非一度お試しください。
なお、ファンクションキーの無い 60% キーボードなどをお使いの場合は、以降に紹介している space_fn 拡張機能を利用すると、Space+<数字キー> でファンクションキーが利用できるように なるなど、操作性が良くなると思います。
また、config_personal.py の [section-base-2] セクションに次の設定をすると、プレフィックス キーの Esc や C-x を使う際に、IME を OFF にする機能が働き、使い勝手が良くなると思います。
# キーを入力した後に、IME を OFF にする設定 define_key(keymap_base, "Esc", self_insert_command3("Esc")) define_key(keymap_base, "C-[", self_insert_command3("C-[")) define_key(keymap_base, "C-x", self_insert_command3("C-x"))
ウィンドウ操作については、次の拡張機能により、機能強化を図っています。
Extension name | Description |
---|---|
window_operation | ウィンドウ操作のための設定を行う |
VSCode については、次の拡張機能により、機能強化を図っています。
Extension name | Description |
---|---|
vscode_key | VSCode 用のキーの設定を行う |
VSCode の Emacs Keymap Extension と比較した本機能の特徴は、次のページの <2021/02/23 追記> の箇所に記載しています。参考としてください。
Fakeymacs は、次の拡張機能で SpaceFN の機能もサポートしています。
Extension name | Description |
---|---|
space_fn | SpaceFN を実現する設定を行う |
本拡張機能の SpaceFN は、Space を Fn キーとして利用する際に発生する日本語入力時の変換漏れの問題や、 Ctrl+Space(set-mark-command)を入力する際に Space が Fn キーとして認識されてしまう問題を、 Fakeymacs 独自の方法で解決しています。 Emacs のキーバインドとも十分に共存が可能なものとなっていますので、一度お試しいただければと思います。
管理権限を持たない PC を利用している場合でレジストリによるキーの置き換えができない場合のために、 CapsLock キーを Ctrl キーとして使うための機能を提供しています。
Extension name | Description |
---|---|
capslock_key | CapsLock キーを Ctrl キーとして使うための設定を行う |
使い方 1) の設定ができない場合の次善の策として、利用を検討ください。
HHKB Studio で Fakeymacs を使う際の、キーマップの設定例について紹介しています。
HHKB Studio は Fakeymacs と相性の良いキーボードなので、キーボードをお持ちの方は参考にして いただければと思います。
● Mouse without Borders というアプリを利用している場合、Ctrl+Shift+S というショートカットキーが 設定されています。このショートカットキーは、一般的な Windows アプリの「名前を付けて保存」機能の ショートカットキーを上書きしてしまいます。Mouse without Borders アプリを利用している場合は、 アプリ側でこのショートカットキーを変更するか、無効にするなどの対策をお願いします。
また、現在このアプリは PowerToys というアプリの「境界線のないマウス」という機能に統合されている ようです。こちらの機能ではショートカットキーの見直しがされていますので、PowerToys への切り替えも ご検討ください。
● 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 にしてから割当をしないと正常に動作しませんでした。他のキーストロークを設定するソフトの場合 にも同様の問題が発生する可能性があると思いますので、ご留意ください。