Carpe Diem

備忘録

Windows11 に Emacs や macOS に近いキーバインドを設定する

概要

Windows機の開発環境を整える一環でEmacsキーバインドの設定を行います。

環境

  • Windows 11
  • Ctrl2Cap v2.0
  • keyhac 1.82
  • AutoHotKey 2.0

方法

1. Ctrl-Capsの入れ替え

Microsoftが提供しているctrl2capsのインストールします。

ダウンロードしたファイルを展開後、管理者権限でターミナルを起動し、展開したフォルダに移動して

./ctrl2cap /install

を実行します。

完了したらPCを再起動します。

2. Emacsキーバインド設定(keyhac)

keyhacを使ったEmacsキーバインド設定です。

keyhacのダウンロード

keyhac の最新版を https://sites.google.com/site/craftware/keyhac-ja からダウンロードします。

注意点としてhttpなためかChromeだとダウンロード禁止されます。なので直接リンクをURLで貼ると警告出た後にダウンロードできます。

Fakeymacsのpython config入れる

次にFakeymacsというEmacsキーバインドを実現できる設定を使います。 zipファイルなどでダウンロードし、含まれている

  • config.py
    • 通常の設定。GitHubのアップデートを適用していく
  • config_personal.py
    • 個人の設定。

を、keyhacと同じディレクトリにコピーします。

config_personal.pyの編集

僕の場合macOSに近い操作感になるよう、AltキーがmacOSのCmdキーのように動くよう config_personal.py に以下の設定を追記しています。

# スクロールに使うキーの組み合わせ(Up、Down の順)を指定する
# fc.scroll_key = None # PageUp、PageDown キーのみを利用する
# fc.scroll_key = ["M-v", "C-v"]
fc.scroll_key = [None, "C-v"]
fc.emacs_exclusion_key  = {"chrome.exe"       : ["C-l", "C-t"],
                           "Obsidian.exe"     : ["C-l", "C-t"],
                           "Arc.exe"          : ["C-l", "C-t"],
                           "msedge.exe"       : ["C-l", "C-t"],
                           "firefox.exe"      : ["C-l", "C-t"],
                           "Code.exe"         : ["C-S-b", "C-S-f", "C-S-p", "C-S-n", "C-S-a", "C-S-e"],
                           }
# 表示しているウィンドウの中で、一番最近までフォーカスがあったウィンドウに移動するキーを指定する
# fc.other_window_key = "A-o"
fc.other_window_key = ""
# [section-base-2] ---------------------------------------------------------------------------------

# Grave Escape をエミュレーションする設定
# (https://github.com/qmk/qmk_firmware/blob/master/docs/feature_grave_esc.md)
# define_key(keymap_base, "S-Esc", self_insert_command("~"))
# define_key(keymap_base, "W-Esc", self_insert_command("`"))

# A-Tab で起動するタスク切り替え画面で、Alt+j,l,i,k のキーを使ってタスクを移動するための設定
# define_key(keymap_tsw, "A-j", self_insert_command("A-Left"))
# define_key(keymap_tsw, "A-l", self_insert_command("A-Right"))
# define_key(keymap_tsw, "A-i", self_insert_command("A-Up"))
# define_key(keymap_tsw, "A-k", self_insert_command("A-Down"))
define_key(keymap_emacs, "A-w", self_insert_command("C-w"))
def is_chrome(window):
    return window.getProcessName() == "chrome.exe"
keymap_chrome = keymap.defineWindowKeymap( check_func=is_chrome ) 
define_key(keymap_chrome, "A-r", self_insert_command("C-r"))

ドキュメントフォルダにコピー

インストール型ではなく、ダウンロードしたファイルをそのまま使うのでドキュメントフォルダ等へ置いておきます。

人によってはProgram Filesに置きたい方もいると思いますが、Program Filesはファイルの編集に管理者権限が必要になるので、ドキュメントフォルダ等が良さそうです。

自動起動

Windows起動時にこのスクリプトが起動するよう、スタートアップフォルダにこのファイルのショートカットを置きます。
手順は以下です。

  1. Win + R キーを押して「ファイル名を指定して実行」ダイアログを開く
  2. shell:startup と入力し OK をクリック
  3. すると、スタートアップ用のフォルダが開く
  4. 上記で開いたフォルダに、実行したいファイルのショートカットを コピー&ペースト

3. AutoHotkey

次にAutoHotkeyというツールを使ってよりAltキーを活用します。

左のバージョン2の方を使います。バージョン1とは設定ファイルの記法が違うので注意してください。

AutoHotkeyの設定

以下のファイルを用意します。 アプリケーションの紐付けができるようconfig.ahkのような名前にします。

; Alt + t で新規タブを開く(Ctrl + t)
!t:: {
    Send "^t"  ; Ctrl+t
    Return
}

; Alt + c でコピー
!c:: {
    Send "^c"  ; Ctrl+c
    Return
}

; Alt + v でペースト
!v:: {
    Send "^y"  ; Ctrl+y
    Return
}

; Alt + x でカット
!x:: {
    Send "^w"  ; Ctrl+w
    Return
}

; Alt + z でundo
!z:: {
    Send "^z"  ; Ctrl+z
    Return
}

; Alt + a で Ctrl + x, h (全選択)
!a:: {
    Send "^x"  ; Ctrl + x を送信
    Sleep 50  ; 少し待ってから次のキーを送信
    Send "h"  ; h を送信
    Return
}

; Alt + [ でブラウザバック(Alt + ←)
![:: {
    Send "!{Left}"
    Return
}

; Alt + ] でブラウザフォワード(Alt + →)
!]:: {
    Send "!{Right}"
    Return
}

自動起動

こちらは先ほどと同様にconfig.ahkファイルのショートカットキーを置きます。

まとめ

Windowsで Emacs や macOS に近いキーバインドを設定する方法を紹介しました。

参考