学ぶ、考える、書き出す。

WindowsでもmacOSのようなキー操作を実現する

前から macOS のように Windows でも Ctrl キーを使ったカーソル移動をおこないたいと思っていました。
また macOS のショートカットは Command キーを使うことが多いため、Windows でも各種ショートカットに Windows キーを使うようにしたいと思っていました。

今回これらを実現するべく、レジストリエディターとAutoHotkeyを使って、キーボードショートカットを望む形にしました。

レジストリエディターを使って、左の Windows キーを F13 キーに変更する

Push To Talk Fix - Remapping keys to F13内にある「Remap Left Windows Key to F13」を適用します。
次のレジストリ情報を任意の場所に .reg 形式で保存して実行したあと、PC を再起動すれば左の Windows キーが F13 キーに変わります。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,64,00,5b,e0,00,00,00,00

AutoHotkey を使ってキーボードショートカットを実装する

キーボードショートカットの設定は次の通りになりました。

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
#UseHook, On
#SingleInstance, force
; F13 & Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

; macOS like keymap
F13 & /::^/
F13 & ,::^,
F13 & 1::^1
F13 & 2::^2
F13 & 3::^3
F13 & 4::^4
F13 & 5::^5
F13 & 6::^6
F13 & 7::^7
F13 & 8::^8
F13 & 9::^9
F13 & 0::^0
F13 & a::^a
F13 & b::^b
F13 & c::^c
F13 & f::^f
F13 & h::^h
F13 & i::^i
F13 & k::^k
F13 & l::^l
F13 & n::^n
F13 & p::^p
F13 & q::!F4
F13 & r::^r
F13 & s::^s
F13 & t::^t
F13 & v::^v
F13 & w::^w
F13 & x::^x
F13 & z::^z
F13 & Enter::^Enter
F13 & Space::#s
; https://superuser.com/questions/1246946/autohotkey-remapping-altshifttab-to-lwinshifttab
F13 & Tab::
    AltTabMenu := true
    If GetKeyState("Shift","P")
        Send {Alt Down}{Shift Down}{Tab}
    else
        Send {Alt Down}{Tab}
return

#If (AltTabMenu)
    ~*F13 Up::
        Send {Shift Up}{Alt Up}
        AltTabMenu := false
    return
#If

; Windows keymap
F13 & e::#e
F13 & Up::#Up
F13 & Right::#Right
F13 & Down::#Down
F13 & Left::#Left
#IfWinNotActive, ahk_exe WindowsTerminal.exe
Return
#IfWinNotActive

; Emacs like keymap
#IfWinNotActive, ahk_exe WindowsTerminal.exe
^p::Send,  {Up}
^f::Send,  {Right}
^n::Send,  {Down}
^b::Send,  {Left}
^+p::Send, {Shift}+{Up}
^+f::Send, {Shift}+{Right}
^+n::Send, {Shift}+{Down}
^+b::Send, {Shift}+{Left}
^a::Send,  {Home}
^e::Send,  {End}
^d::Send,  {Delete}
^h::Send,  {BackSpace}
^m::Send,  {Enter}
^k::Send,  {Shift}+{End}{BackSpace}
Return
#IfWinNotActive

先ほど左の Windows キーをリマップして作り出した F13 キーをふんだんに使って、Windows の Control キーを使ったキーボードショートカットを F13 キーを使うように変更しています。
Control キーについては Emacs っぽくカーソル移動のショートカットに割り当てています。
Windows Terminal を使っているときはショートカットを無効化したかったため、[AutoHotKey]#IfWinActive で対象ウインドウを指定する | Output 0.1を参考にしてショートカットを無効化しています。

まとめ

Windows をメインで使い始めてだいぶ経ちますが、ようやく思い通りの操作ができるようになって嬉しいです。