【お知らせ】


<2019/09/19 追記>
Windows 10 1903 にアップデートしたところ、キー入力の際に呼ばれる関数の処理が複雑なもの(kill_line、reset_region、mark_whole_buffer など)が実行された場合、正常に動作しない症状が発生しました。ただし、症状が発生した PC に Windows Update を適用し、再起動したら現象は発生しなくなりましたので、Keyhac + Fakeymac の問題ではないと判断しました。

<2019/07/24 追記>
Windows 10 1903 にバージョンアップしたらウィンドウのリストアが最小化した順番の逆順にならなくなったので、コードを見直しました。

<2019/07/21 追記>
Emacs日本語入力モードを使っている場合に発生する、ウインドウ切り替わり直後の日本語入力時で文字が二重に入力されることがある問題の対策を行いました。この問題は、Windows 10 1903 から顕著に発生するようになったものです。

<2019/07/17 追記>
keyboard_quit 関数で Esc を発行するアプリの見直し等を行いました。

<2019/07/17 追記>
reset_region 関数の見直しを行いました。対策の理由は以下のコミットログを確認してください。

<2019/07/10 追記>
F2(編集モードに移行)を割り当てる方法を汎用化し、explorer.exe を追加しました。

<2019/07/06 追記>
checkWindow 関数のチェック方法を正規表現からワイルドカードに変更しました。keymap.defineWindowKeymap 関数と同じ指定方法に変更したものです。

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



<2018/11/17 追記>
REALFORCE R2 の PFU 限定モデル が発売されています。ほしいですが、高いですね。

<2018/04/17 追記>
本設定は python のクロージャの仕組みを利用しています。以下のページが参考となります。

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


Fakeymacs_お知らせ ← 上記以外の【お知らせ】をこちらにまとめました。Fakeymacs を使う上で大切な内容が書かれていますので、併せて参照してください!!

【本題】


Windows の操作を Emacs のキーバインドで行うための設定(Keyhac版)です。以下の URL から config ファイルをダウンロードしてお使いください。

Keyhac for Windows ver 1.75 以上で動作する設定となっています。最新の Keyhac のバージョンでの利用を推奨します。

Keyhac を起動後、タスクトレイのアイコンを右クリックし、「設定の編集」で config.py もしくは config_light.py の内容をコピペした後「設定のリロード」を行ってください。



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

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

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

2) Emacsシフトモード (利用するかは use_emacs_shift_mode 変数で設定。初期値:False(使わない))

本設定のキーバインドと IME のショートカットキーが被って設定されている場合、日本語入力中にそのキーを Shiftキーと一緒に押すことで IME のショートカットキーを利用できるようになるモードです。このモードを Windows 8 以降の OS で利用する場合には、次の設定を行う必要があるようです。

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



認識はしているのですが対策できていない課題 として以下のものがあります。
  • 仮想デスクトップでの利用を踏まえ、ウィンドウの最小化は現在のデスクトップ内に表示しているウィンドウに対してのみ行われるようにしているが、最小化しているウィンドウのリストアは複数のデスクトップに亘って行われてしまう。
  • TeraPad の行末削除ができない。(対策は不可能と思われますので、C-d をお使いください。)
  • 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 で試したところ、この問題は改善されたようです。
  • キーボードマクロで日本語を入力した場合の再生再現性が完全でない。(Keyhac コンソールにエラーが表示され、Keyhac の挙動がおかしくなる。)



本設定は「Google 日本語入力」と一緒に利用するのがお勧めです。詳しくは、「Fakeymacs_お知らせ」の <2016/10/12 追記> の内容を参照してください。

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



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

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

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



IME の状態(ON か OFF か)を確認するソフトウェアとして、akinosign というものがあります。Windows 7 ではクリップボードリストとの相性問題が発生していたため紹介を取りやめていましたが、Windows 10 ではこの問題が発生しないようですので再度紹介します。よければお試しください。


<変更履歴>
  • 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 ウィンドウのリストアが最小化した順番の逆順にならなくなっていたのを対策した。