【お知らせ】が長くなってきているので、設定ファイルのあるリポジトリの URL を最初に掲示しておきます。

【お知らせ】

Fakeymacs_お知らせ ← 以前に掲示した【お知らせ】をこちらにまとめています。Fakeymacs を使う上で大切な内容も書かれていますので、併せて確認ください!!


<2016/10/28 追記>
本設定を公開して4年が経過しようとしています。その間改善を続け、“Keyhac の config で XKeymacs の代わりになるものを実現する”という当初の目標は概ね達成できたのではないかと思っています。そこで、本設定にニックネームを付けることとしました。
nickname: Fakeymacs
今後も末永くご利用いただければと思います。



<2023/08/27 追記>
Fakeymacs には概ね次の機能が取り込まれています。

<2023/06/29 追記>
Emacs キーバインドを利用しないアプリで、メニューの操作用の Emacs キーバインドを設定する拡張機能を作成しました。Tera Term などのメニューを持ったアプリで利用することを想定しています。

<2022/12/03 追記>
日本語キーボードと英語キーボードの共存(Windows)

<2022/08/01 追記>
github1s.com の Fakeymacs フルサポートを止めました。代わりに、github.dev をご利用ください。

<2022/06/23 追記>
日本語キーボードの設定がされている OS で、英語キーボードを使えるようにするための機能を追加しました。fc.use_usjis_keyboard_conversion 変数により、Fakeymacs 起動時にこの機能を有効にするかを指定できます。ランチャーメニューの一番最後に表示されるメニューから、手動で切り替えることもできます。お試しください。

<2022/06/02 追記>
Fakeymac で複数のウィンドウを行き来して利用する場合は、次のような操作で行うと便利です。
  • 使わないウィンドウは閉じる(C-x C-c)
  • 直ぐに使わないウィンドウは最小化(A-m)する
  • 開いているウィンドウの切り替えは、ウィンドウめくり(A-n、A-p)か other_window(A-o)で行う(A-Esc と異なり、A-n、A-p は最小化しているウィンドウをめくりの対象外とする)
  • other_window で切り替えの対象として使いたいウィンドウは、ウィンドウリスト(A-l)で選択する
  • ウィンドウめくりの切り替え対象に加えたいウィンドウは、ウィンドウリスト(A-l)の m マークの行から選択する
  • ブラウザに移動して検索したい場合には、browser_key Extension を利用する(C-A-l でブラウザが開いて、アドレスバーに移動する)
以上は複数の仮想デスクトップを跨いで機能します。

<2022/05/17 追記>
Fakeymacs では仮想デスクトップの機能を強化する SylphyHorn というソフトウェアと連携可能としています。このソフトウェアは Windows 11 では動作しませんが、Windows 11 でも動作可能にした SylphyHornPlus という Fork が有りましたので紹介しておきます。

<2022/05/05 追記>
IME の状態をテキスト カーソル インジケーターの色で表現する機能を追加しました。次のページを参考にしてテキスト カーソル インジケーターを有効にし、fc.use_ime_status_cursor_color 変数を True にしてご利用ください。

<2021/02/23 追記>
VSCode で Emacs キーバインドを利用するにあたり、VSCode の Emacs Keymap Extension よりも Fakeymacs の方が便利だと思う点を挙げてみました。
  • VSCode のいたるところで Emacs キーバインドが使える(検索条件入力フィールド内で Ctrl+y(ヤンク)が使えたり、Side Bar に Ctrl+0 で移動して Ctrl+n で移動ができたりするなど、エディタ部以外でも Emacs キーバインドが使えます)
  • Ctrl+q を先行入力する方法や、fc.side_of_ctrl_key 変数/fc.side_of_alt_key 変数で設定した側でない Ctrlキーや Altキーと組み合わせたキーを入力する方法により、VSCode デフォルトのショートカットキーも利用できる
  • 日本語入力モードで Ctrl+x プレフィックスキーを利用したキー入力を行った場合の誤動作が発生しない(Ctrl+x o と入力すると「o」が「お」と漢字で入力されるなどが発生しません)
  • 普段 Fakeymacs を使っていれば、そこで慣れたキー操作が VSCode でもほぼそのまま利用できる(A-k が使えるなど)
  • redo が使える(C-/ で undo しているときに C-g を入力すると redo となります。これは Emacs の作法に則った機能です)
  • キーボードマクロが使える(VSCode はマルチカーソルが使えるので、あまり活躍する場面は無いような気はします。また、VSCode には Keyboard Macro Beta という Extension もあります)
  • 日本語入力時に、Emacs のキーバインドをベースとしている「ことえり」-like のキーバインドが使える(Fakeymacs では IME のキーバインドをカスタマイズすることもできます)
  • マルチカーソルの機能が矩形選択の機能とシームレスに動作する(専用のキーバインドを割り当てることで実現しています)
  • クリップボードリスト(A-y)、ランチャーリスト(A-l)の機能が使える
  • 拡張機能 shell_command_on_region を有効にすることで、Emacs のコマンドの shell-command-on-region と同等の機能が使える(VSCode には shell-command-on-region と同等の機能を持つ、Filter Text という Extension もあります)
  • vscode.dev(https://vscode.dev)、github.dev(https://github.dev)でも、Fakeymacs 側の設定のみで Emacs キーバインドが動作する
  • 機能の拡張が容易にできる(Python でのコーディングとなります。Extension 構築時のパッケージングの作業が不要で、拡張した機能をすぐ試すことができます)
一方、Fakeymacs の方が劣っていると思う点としては次のようなものがあると思います。
  • VSCode の Emacs Keymap Extension でサポートしているが、Fakeymacs ではサポートしていない機能がある(paragraph や sexp の単位の移動など)
  • Fakeymacs は VSCode の When を認識できないので、細かい制御ができない(Terminal の中だけで機能するショートカットキーが定義できないなど。ただし、Fakeymacs では fc.use_direct_input_in_vscode_terminal 変数を有効にすることでこの制約の回避策が機能するようにしています)
  • 一部のキーに割り当てている機能を Command Palette 経由で実行しているため、多少動作が遅い機能がある(逆に言うと、Fakeymacs では Command Palette 経由で実行できることはなんでもキーに割当てができます)
  • Windows でしか動かない(Mac 用の Keyhac もあるのである程度の機能の移植は可能と思います。ただし、私が Mac の環境を持っていないので対応できません)



<2022/03/14 追記>
Fakeymacsにウィンドウめくりの機能を追加しました。仮想デスクトップを跨ぎ、最小化されていないウィンドウを順に切り替えます。初期設定のキーバインドは、A-p と A-n です。

<2022/01/05 追記>
Fakeymacs に shell-command-on-region Extension を構築していますが、VSCode のみであれば以下の VSCode Extension の Filter Text が利用可能なようです。お試しください。

<2021/12/29 追記>
次のページのコメントにも記載されている Microsoft Word のテキストボックスで発生する問題(Ctrl の押下によりレイアウトオプションのサブウィンドウが表示し、そこにカーソルが移動してしまう)について、Fakeymacs でも対策してみました。お試しください。

<2021/11/12 更新>
ブラウザで vscode.dev を指定した際に開く VSCode の画面では、Ctl-x b で発行している C-Tab がブラウザ側でキャッチされ、ブラウザのタブを切り替えてしまいます。 このため、fc.vscode_target 変数に指定したブラウザで vscode.dev を開き、Ctl-x b を実行した 場合には、コマンドパレットで Quick Open Privious Recently Used Editor in Group を実行する ようにし、VSCode の機能が働くようにしています。 C-Tab は 従来どおりブラウザで機能しますので、vscode.dev を利用する場合には、C-Tab と Ctl-x b を使い分けるようにしてください。 (この対応により、ブラウザで vscode.dev を開いていない場合に Ctl-x b を発行すると、 おかしな動き(F1 の実行により、ヘルプの画面が表示される)となります。ご留意ください。)

<2021/11/12 更新>
ブラウザで vscode.dev を指定した際に開く VSCode の画面では、M-k や Ctl-x k で 発行している C-F4 がブラウザ側でキャッチされ、ブラウザのタブを閉じようとしてしまいます。 このため、fc.vscode_target 変数に指定したブラウザで vscode.dev を開き、Ctl-x k を実行した 場合には、コマンドパレットで Close Editor を実行するようにし、VSCode の機能が働くように しています。 M-k は 従来どおり C-F4 を発行するのみの機能としていますので、vscode.dev を利用する場合 には、M-k と Ctl-x k を使い分けるようにしてください。 (この対応により、ブラウザで vscode.dev を開いていない場合に Ctl-x k を発行すると、 おかしな動き(F1 の実行により、ヘルプの画面が表示される)となります。ご留意ください。)

<2021/10/21 追記>
全ての機能は確認していませんが、Fakeymacs は https://vscode.dev/ でも動きます。VSCode 用に拡張したキーバインドを使うためには、fc.vscode_target 変数に利用するブラウザを設定する必要があります。

<2021/09/24 追記>
半角と全角の入力を間違えた際、入力モードの切り替えと入力文字の変換を行う zenkaku_hankaku Extension を追加しました。

<2021/09/10 追記>
change_keyboard Extension の見直しを行いました。

<2021/09/06 追記>
60% US キーボードのキー不足(Delete キー、Backquote キー不足)の対策を行う compact_keybord Extension を追加しました。

<2021/08/19 追記>
GitHub のリポジトリ画面で「.」(ドットキー)を押すとVisual Studio Codeが起動するそうです。

<2021/08/18 追記>
Chromium 系ブラウザのバージョン 92 では、アドレスバーにカーソルを移動した際、強制的に ASCII入力モードに移行する不具合?が発生します。
さらに Google日本語入力を利用している場合、keymap.getWindow().getImeStatus() の値が正しく返されないため、Emacs日本語入力モードの挙動がおかしくなります。この問題の対策を行いました。

(2021/09/17 追記)バージョン 93 で対策されました。再発する可能性もあるため、対策コードは残しておくこととしました。(有効の有無を切り替えるパラメータの追加で対応しました。)

<2021/08/09 追記>
Windows 11 でも動作することを確認しました(Windows Insider Program beta channel の Windows 11 で確認)。一部、config.py の見直しをしましたが、基本機能に問題はありませんでした。

<2022/06/23 追記>
QMK で Emacs キーバインドを実現した方が居ます。プロセスによって有効無効を切り分けることはできませんが、キーボードだけで Emacs キーバインドを実現できていることは興味深い試みと思います。

<2021/05/08 追記>
VSCode の機能に性能向上対策を行いました。また、VSCode の機能の説明文の集約・整理を行いました。

<2021/05/05 追記>
goto-line と VSCode の goto-error のサポートを行いました。

<2021/04/23 追記>
Google 日本語入力を選択している状態で、クリップボードリストからの文字列の選択を行うと、その文字列がテキスト入力エリアに反映されない場合があるようです。文字列が反映されない場合でも選択したその文字列がクリップボードに格納はされるので、yank(C-y)すると反映されます。この現象は、MS-IME を選択しているときには発生しないようです。また、Fakeymacs の設定によるものでないことは確認しています。

<2021/04/19 追記>
fc.not_clipboard_target_class 変数で、clipboard 監視の対象外とするウィンドウのクラスネームを指定できるようにしました。WPF アプリが clipboard 監視と相性が悪いため、HwndWrapper で始まるクラスネームを持つ WPF アプリを指定できるようにする対策です。

<2021/04/11 追記>
ウイルス対策ソフト Avast Free antivirus を利用していて keyhac.exe がウイルスとして検知される場合には、以下のページの内容に従い確認ください。
ウイルスかどうかの判定は、次のサイトも利用できます。

<2021/01/14 追記>
指定したキーを押下したときに IME の状態を表示する拡張機能を追加しました。

<2021/01/14 追記>
ウィンドウフォーカス変更時にIMEの状態を表示する機能を追加しました。

<2021/01/05 追記>
次の拡張機能をお試しください。一度利用し始めると、離れられなくなる拡張機能になると思います。

<2020/12/13 追記>
次のページの内容で、¥キーと変換キーへのスキャンコードの割当て方法を見直しました。
関連して、次の設定も見直ししています。

<2020/11/02 追記>
Emacs のコマンド shell-command-on-region を実現する拡張機能 shell_command_on_region をリリースしました。詳細は次のページを参照してください。

<2020/09/06 追記>
ショートカットキーが何のアプリで使われているかを調べられるサイトを見つけましたので紹介します。

<2020/08/06 追記>
お薦めの設定を最初に紹介しておきます。
  • HHKB の英語キーボードの場合、DIP スイッチで ◇ キーに Win キーを割り当てて ◇ キーと Alt キーを入れ替える設定(Pro2/HYBRID-US の場合、SW1:ON、SW2:OFF、SW4:OFF、SW5:ON)をし、KeySwap というソフトで RWin キー(キーの位置は、DIP スイッチの設定で右の Alt キーとなっている)に RCtrl キーを割り当てる。(LWin キーに RCtrl キーを割り当てる方法もあるので、お好みでどうぞ。その場合、config.py の fc.side_of_win_key 変数に "R" を設定する必要があります。)
  • HHKB 以外のキーボードの場合、KeySwap というソフトで CapsLock キーに RCtrl キーを割り当て、config.py で fc.side_of_ctrl_key 変数に "R" を設定する。(LCtrl キーは Windows ショートカット用のキーとして利用できる。)
その他は、config.py の最初の方にある変数設定の説明を読んで、適宜設定の調整をしてください。

<2020/05/17 追記>
IME の再変換を行う機能を追加しました。
  • キー設定の初期値は C-t としています。
  • 日本語入力確定後に C-t を押すと、「確定取り消し」として機能します。(Windows 10 May 2020 Update の新しい Microsoft IME では「確定取り消し」のキー設定が見つからないので、「再変換」が機能するようにしています。)
  • 文字列の選択(リージョンの設定)をして C-t を押すと、「再変換」が機能します。
  • 文字列が選択されているか(リージョンが設定されているか)は fakeymacs.forward_direction が設定されているかで判断しているため、マウスではなくキーボードによる選択が必要です。
  • Microsoft IME の場合、文字列を選択せずに C-t を押すと、カーソル位置近くの文節で「再変換」が機能します。
  • Emacs日本語入力モードを有効にしている場合、「確定取り消し」や「再変換」の状態になると、Emacs日本語入力モードが機能するようにしています。
  • この機能の追加に合わせ、 fc.emacs_ime_mode_key 変数(Emacs日本語入力モードを利用する際に、IME のショートカットを置き換えるための変数)を「ことえり」のキーバインドで機能するように設定を有効化しています。
(2020/10/10 追記)VSCode では、IME の再変換の機能がうまく動かないようです。

<2020/05/03 追記>
次のページを作成しました。

<2020/04/28 追記>
レジストリを用いたキーを置き換えるソフトには、KeySwap や Change Key というものがあります。KeySwap は US キーボード表記に対応している、Change Key はキーボード上に存在しないキーの設定ができるなど、一長一短がある状況です。私は KeySwap をメインとして利用し、数値でのスキャンコードの指定が必要な場合は Change Key を利用しています。Change Key で設定した内容は KeySwap でも参照できますので、相互利用する上での問題はありません。詳しくは次のページを参照してください。

<2020/04/26 追記>
Fakeymacs は、カーソルキーの無い HHKB US版 を有効に利用するために作成しました。私も HHKB を使っており、キーボードの背面スイッチと KeySwap や Keyhac の設定により、次のとおりのキーの割り当てにして使っています。
  • 左 ◇ キーに LAlt キーを割り当てる
  • LAlt キーに LWin キーを割り当てる
  • 右 ◇ キーに RAlt キーを割り当てる(Windows ショートカットキーを入力するために利用できます。Windows ショートカットキーを入力するためには、LCtrl+q + Alt キーを使う方法もあります。)
  • RAlt キーに RCtrl キーを割り当てる(Windows ショートカットキーを入力するために利用できます。Windows ショートカットキーを入力するためには、LCtrl+q + Ctrl キーを使う方法もあります。)
(使っている方は少ないと思いますが..)初代 HHKB で ◇ キーに Alt を割り当てるには、以下の方法が利用できます。
  • 1) HHKB の Mode SW を 3 に設定する(HHKB 背面スイッチの説明:https://www.pfu.fujitsu.com/hhkeyboard/leaflet/hhkb_backview.html
  • 2) KeySwap を管理者権限で起動する
  • 3) キーボード種別を一旦「日本語」にし、画面に表示されるキーボードを利用して 無変換キーを 左 Alt キーに、変換キーを 右 Alt キーに置き換える
  • 4) キーボード種別を「英語」に戻し、左 Alt キーを 左 Win キーに、右 Alt キーを 右 Ctrl キーに置き換える
  • 5) 一応ファイルに保存し、KeySwap を終了する
  • 6) Windows をログインし直す
なお、次のサイトに HHKB 誕生の経緯が書かれています。HHKB に Meta(◇)キーがある理由や HHKB が emacs での利用を想定して作られたキーボードであることなどが書かれてありますので、興味のある方は一読ください。

<2020/04/25 追記>
次のページにも書かれていますが、JetBrains 製の IDE で Alt のワンショットモディファイアの機能を使って IME の切替えをする場合には、ツールボタンをオンにして利用する必要があるようです。
設定は、View -> Appearance -> Tool Window Bars を有効にしてください。

<2016/09/15 追記>
ESC を素の ESC として使いたい場合は、fc.use_esc_as_meta 変数を False に設定してください。⇒(2020/10/16 追記)現在の初期値は False となっています。
C-v をペーストとして使いたい場合は、fc.scroll_key 変数を None に設定してください。
その他のカスタマイズ設定については、configure 関数の初めの方でカスタマイズ用の変数の設定をしていますので、そのコメントを参照してください。

【本題】


Windows の操作を Emacs のキーバインドで行うための設定(Keyhac版)です。次のリポジトリから必要なファイルをダウンロードしてお使いください。

使い方は上記ページの README に記載しています。



Keyhac は XKeymacs と異なり、IME による日本語入力中であることを判定することができません。このため、日本語入力中に IME の変換操作を行う方法として、以下の2つの方法を提供しています。

1) Emacs日本語入力モード (利用するかは fc.use_emacs_ime_mode 変数で設定。初期値:True(使う))

IME が ON の時に文字(英数字か、スペースを除く特殊文字)を入力すると起動するモードです。(モードに入ると、▲のマークが表示されます。) Emacs日本語入力モードになると Emacsキーバインドとして利用できるキーが限定され、その他のキーは Windows にそのまま渡されるようになるため、IME のショートカットキーを利用できるようになります。詳しい仕様は、「Fakeymacs_お知らせ」の <2020/04/23 更新> の内容を参照ください。

2) その他の方法 (本設定の仕様としてデフォルトで利用可能)
  • 本設定で置き換えしていないキーを入力する。(但し、Ctrl とアルファベットを組み合わせたキーは、ほぼ全て置き換えがされています。)
  • fc.side_of_ctrl_key 変数や fc.side_of_alt_key 変数で設定した側でない Ctrlキーや Altキーと組み合わせたキーを使う。
  • 入力するキーに先行して C-q を入力する。(Emacs日本語入力モードを使っていない場合に有効な方法です。)



認識はしているのですが対策できていない課題 として以下のものがあります。
  • powershell.exe では起動直後に C-w や C-k で切り取りをした際や、通常の利用時でも行の最終カラムで C-k を入力した際などにエラーとなる。これは既知の問題のようでもあり対策できていない。(Keyhac を利用していない状態でも、未入力の状態で C-a -> C-x を入力すると発生します。)
  ⇒ (2019/04/01 追記)Windows 10 1809 で試したところ、この問題は改善されたようです。
  • コマンドプロンプトで漢字を入力した際、行末までの削除(C-k)の挙動がおかしくなる。漢字を含む行で End キーが正常に動作しない問題によるもの(コマンドプロンプトのバグ?)なので、対策は難しい状況である。
  ⇒ (2019/07/18 追記)Windows 10 1903 で試したところ、この問題は改善されたようです。
  • Microsoft Edge で C-v が正常に機能しない。(C-v で PageDown キーを発行するようにしているが、これが C-PageDown と認識されているような気がします。)
  ⇒ (2020/01/16 追記)2020/01/15 にリリースされた Chromium版 Edge では、この問題が発生しないことを確認しました。
  • 仮想デスクトップでの利用を踏まえ、ウィンドウの最小化は現在のデスクトップ内に表示しているウィンドウに対してのみ行われるようにしているが、最小化しているウィンドウのリストアは複数のデスクトップに渡って行われてしまう。
  • TeraPad で C-k による行末削除ができない。(対策は不可能と思われますので、C-d をお使いください。)



Windows 7 から Windows 10 へアップデート後、Edge やコルタナなどで Google 日本語入力が利用できない場合は、次のページを参照してください。



CapsLockキー への Ctrlキー の割当ては、次のページにある KeySwap というソフトが便利です。

fc.side_of_ctrl_key 変数を "R"(右)とし、CapsLockキーに RCtrlキーを割り当てることで、LCtrlキーで利用可能な Windowsショートカットキーとの共存が容易になると思います。(RCtrlキーも Windowsショートカット用のキーとして使いたい場合は、RCtrlキーに LCtrlキーを割り当てる必要があります。)

また、Altキーは親指で操作できる場所のキーに割り当てると使い勝手が良いように思います。


<変更履歴>
  • Fakeymacs_変更履歴 ← 2017年以前の変更履歴をこちらにまとめました。
  • 2018/02/23 clipboard 監視の対象外とするアプリケーションソフトで copy / cut した場合でも、クリップボードの内容をクリップボードリストに登録するように対策した。
  • 2018/04/10 以前に行った clipboard 監視の対象外とするアプリのコピペ対策が Excel で正常に動作しない状況があったので、その改善を行った。
  • 2018/06/01 kill-buffer に Ctl-x k とは別に M-k も割り当てた。
  • 2019/03/27 キーボードマクロ記録と再生の開始時に IME を強制的に OFF にするようにした。
  • 2019/03/27 数引数を指定してキーボードマクロを再生した際の再生再現性を高めた。
  • 2019/07/06 checkWindow 関数のチェック方法を正規表現からワイルドカードに変更した。
  • 2019/07/10 ウインドウが切り替わった後に最初に入力した文字が二回入力される現象の対策を行った。
  • 2019/07/10 F2(編集モードに移行)を割り当てる方法を汎用化し、explorer.exe を追加した。
  • 2019/07/17 reset_region 関数の見直しを行った。
  • 2019/07/17 keyboard_quit 関数で Esc を発行するアプリの見直し等を行った。
  • 2019/07/21 2019/07/10 に実施した文字が二回入力される対応の改善を行った。
  • 2019/07/24 ウィンドウのリストアが最小化した順番の逆順にならなくなっていたのを対策した。
  • 2019/11/20 Emacsシフトモードを利用していない場合、シフトキー+移動キーでリージョンの設定ができる機能をサポートした。
  • 2020/01/07 設定の除外ターゲットにリモートデスクトップを追加した。
  • 2020/03/13 Microsoft Excel 2019 のセル内の文字列の改行対策を行った。
  • 2020/03/16 Microsoft PowerPoint でも Word と同様の改行対策を行った。
  • 2020/03/13 「IME を無効にするキー」と「IME を有効にするキー」を設定できるように fc.set_input_method_key 変数を追加した。
  • 2020/04/23 ワンショットモディファイアの機能を利用し、左右の Alt キーで IME を切替えられるようにする機能を追加した
  • 2020/04/26 数引数の指定に Ctrl + 数字キーを使うかどうかを指定する変数を追加した。
  • 2020/04/26 Alt + 数字キー列や Alt + Shift + 数字キー列によるファンクションキー入力機能を追加した。


最終更新:2023年08月31日 06:56