Keyhacでキーバインドをカスタマイズ

in tools
  1. 環境
  2. CapsLockキーと右Windowsキーをそれぞれ変更
  3. Windowsキー + L (コンピューターをロック)を無効にする
  4. 設定補足
  5. 設定ファイル
  6. 追記

Keyhacは、Pythonを使用した、キーボード操作やキーバインドなどを変更、設定できるソフトです。
Pythonを使用すると高度なカスタマイズも出来るようです。自分は出来ませんが。
簡単なキーバインドならば、初期設定を見ながらなんとなく設定できると思います。

以前から、Windowsキーを殆ど使わないので勿体無いなーと思っていたので、他の用途に使えるように設定しました。
ソフトによっては、うまく動かなかったり、一部だけ動いたりするので注意です。

環境

基本的に、Windosキーは、親指で押しています。

CapsLockキーと右Windowsキーをそれぞれ変更

CapsLockキーのCtrl変更は、KeySwap for XPで、レジストリ変更して適用しています。レジストリ変更が無難です。
CapsLockをLCtrlへ。RWinをRCtrlに代えます。RCtrlに変更するのはKeyhacでもいいです。

RWinは使っていないので、RCtrlにすると使える用途があると思います。
また、RCtrlは下記設定の一部しか重複しないので、他で使える場面が出てくるかなと思います。

Windowsキー + L (コンピューターをロック)を無効にする

KeyhacでWin-Lを上書きし切れなく、設定されたものが実行された後に、コンピューターがロックされます。
非常に不便で、暴発すると困るので無効化します。

ブログのヒント: ワークステーションをロックする機能を有効/無効にすると(Windows + L)
regファイルも配布されていますので、保存しておくと便利だと思います。

設定補足

テキストエディタやフォントなどの設定は、自分の環境に合わせて下さい。
それなりにキーバインドを追加しているので、長いと思います。

クリップボード履歴機能の無効

初期状態で有効になっていますが、クリップボード管理は、Cliborを使用しているので無効に。
クリップボード履歴の最大数を0にすることで、一応無効になります。

右Altをアプリケーションキーに

使用していないので、アプリケーションキー(右クリックメニュー)に変更しています。付いていないので。
ファイラなどでキーボードのみで操作中に、ウィルススキャンやプロパティ表示などをしたい時があり、その都度、マウスに持ち替えるのが面倒なのと、時間も勿体無いなと思うので。

左Windowsキー離した時にスタートメニュー非表示

コマンドラインランチャーの、ZiiLauncherを使っているので、スタートメニューを殆ど使っていません。
また、LWinを使った設定を追加するので、暴発を防ぐ為にも無効化しています。

非表示にしたけど、スタートメニュー使いたい > Ctrl-Esc

左Windowsキー/右Ctrl を押した時にIME off/on、他のキーと押した時は元のキー

keyhacで[半角/全角]キーの1回・2回押しでIME OFF・ONを切り替える - Koonies/こりゃいいな!
Windowsでemacsキーバインド+IME操作 » RainbowDevilsLand
参考に変更します。

Google 日本語入力を使用していて、デフォルトでバルーン表示(Aorあ)で動作が被るので、この部分を削除。
IMEがどちらの状態か、常に覚えている方は殆ど居ないと思うので、慣れると便利だと思います。覚えているときは、いつも通りの切り替え方法と使い分けしています。
ちなみに、Google 日本語入力で切り替えするときはCtrl-Space使っていましたが、殆ど使わなくなりました。

前は、RWinを 1/2 回押して、IME off/on を使っていましが、こちらの方が楽です。
ただし、設定したLW~キーバインドなどを使おうとして辞めて、LW離した時のIME変換に注意。

LW- H/L/J/K : Left/Right/Down/Up

H/L/J/K でカーソル移動がしたかった。
ボタン2個押すよりも1個の方が楽…そう思っていた時代が僕にもありました。
状況しだいでは、2個の方が速いかなと。

LW- A/E : Home/End

片手で打てるのが利点。

LW- N/P : Next Tab / Previous Tab

次のタブに移動するCtrl-Tabは比較的押しやすいんですが、前のタブに戻るCtrl-Shift-Tabが押しづらいので。
片手では押せないですが。

LW- D/LS-D : Delete/Back

片手で削除出来るのは便利。

LW-: : Esc

よく使うので、押しやすい位置へ。
USキーボードなので;に設定したいですが、:にしないと;で動かない。

LW- 1~0 : F1~F10 / LW- -/= : F11/F12

F1~F12は、指をえぃ!という感じで伸ばして押さないといけないので、少しは楽になるかなと。
後、F1~F12キーは、見ながら打たないと押し間違えている自分がいますが、数字キーなら慣れれば見なくても押せるっぽい?

LW-LS-3 : 逆順に検索

ソフトにもよりますが、F3で順に検索出来る場合は、Shiftを付けると逆順に検索します。
押すボタンは増えますが押しやすいかなと。

LW- Space/LS-Space : PageDown/PageUp

Spaceでブラウザみたいに移動したかった為で、両手でキーボード使っているときは打ちやすいです。

LW- O/I : 戻る/進む

個人的に使う機会が殆どないですが、一応設定しています。

LW- S/LS-S : Switch to the next/previous window

ウィンドウが少ないなら、Alt-TabよりもAlt-Escの方が切り替え速いが押しづらい為。最小化は対象外。
使わなくなったウィンドウはAlt-Space,Cで閉じている事が多いので、便利です。

LW- B/W 関連 : 一単語ごとに 移動/選択/削除

割と便利ですが、日本語だと上手くいかない事が多いので気を付けて下さい。

LW- LC/LS - H/L/J/K/A/E の組み合わせ

H/L/J/K などでカーソル移動出来るようにしたので、文字列選択なども出来るようにしています。押しづらいのもありますが、カーソル6回分のは便利だと思います。
最後のは片手だけだと押しづらいので、RShiftでも出来るようにしています。

初期状態のを少し変えたもの

最後以外は、矢印キーを使っています。キーバインドが厳しいので。
ウィンドウ移動は便利だと思います。疑似マウスの方は使用頻度はかなり低めなので、削除でも問題ないかと。

設定ファイル

config.py

import sys
import os
import datetime

import pyauto
from keyhac import *

def configure(keymap):

    # --------------------------------------------------------------------
    # config.py編集用のテキストエディタの設定

    # プログラムのファイルパスを設定 (単純な使用方法)
    if 1:
        keymap.editor = "C:\\tools\\Sublime-Text\\sublime_text.exe"

    # --------------------------------------------------------------------
    # 表示のカスタマイズ

    # フォントの設定
    keymap.setFont( "Ricty", 16 )

    # テーマの設定
    keymap.setTheme("black")

    # --------------------------------------------------------------------
    # クリップボード履歴の最大数 (デフォルト:1000)
    keymap.clipboard_history.maxnum = 0


    # キーの単純な置き換え
    keymap.replaceKey( "RAlt", "Apps" )


    ## IME切り替え
    #
    #  @param flag      切り替えフラグ(True:IME ON / False:IME OFF)
    #
    def switch_ime(flag):

        # if not flag:
        if flag:
            ime_status = 1
        else:
            ime_status = 0

        # IMEのON/OFFをセット
        keymap.wnd.setImeStatus(ime_status)

    def ime_on():
        switch_ime(True)

    def ime_off():
        switch_ime(False)

    # --------------------------------------------------------------------
    # どのウインドウにフォーカスがあっても効くキーマップ
    if 1:
        keymap_global = keymap.defineWindowKeymap()

        # U-LW : LW離した時にスタートメニュー非表示
        # スタートメニュー使いたい > C-Esc
        keymap_global[ "U-LWin" ] = "LW-RShift"

        # O- LW/RCtrl : LW/RC 押した時にIME off/on
        # 他のキーと押した時は、元のキー扱い
        keymap_global["O-LWin" ] = ime_off
        keymap_global["O-RCtrl"] = ime_on

        # LW- H/L/J/K : Left/Right/Down/Up
        keymap_global[ "LW-H" ] = "Left"
        keymap_global[ "LW-L" ] = "Right"
        keymap_global[ "LW-J" ] = "Down"
        keymap_global[ "LW-K" ] = "Up"

        # LW- A/E : Home/End
        keymap_global[ "LW-A" ] = "Home"
        keymap_global[ "LW-E" ] = "End"

        # LW- N/P : Next/Previous Tab
        keymap_global[ "LW-N" ] = "C-Tab"
        keymap_global[ "LW-P" ] = "C-S-Tab"

        # LW- D/LS-D : Delete/Back
        keymap_global[ "LW-D"    ] = "Delete"
        keymap_global[ "LW-LS-D" ] = "Back"

        # LW-: : Esc : ;に割り当てたいが:に設定しないと;で動かない
        keymap_global[ "LW-Colon" ] = "Esc"

        # LW- 1~0 : F1~F10  LW- -/= : F11/F12
        keymap_global[ "LW-1"     ] = "F1"
        keymap_global[ "LW-2"     ] = "F2"
        keymap_global[ "LW-3"     ] = "F3"
        keymap_global[ "LW-4"     ] = "F4"
        keymap_global[ "LW-5"     ] = "F5"
        keymap_global[ "LW-6"     ] = "F6"
        keymap_global[ "LW-7"     ] = "F7"
        keymap_global[ "LW-8"     ] = "F8"
        keymap_global[ "LW-9"     ] = "F9"
        keymap_global[ "LW-0"     ] = "F10"
        keymap_global[ "LW-Minus" ] = "F11"
        keymap_global[ "LW-Plus"  ] = "F12"

        # LW- Space/S-Space : PageDown/PageUp
        keymap_global[ "LW-Space"    ] = "PageDown"
        keymap_global[ "LW-S-Space" ] = "PageUp"

        # LW- O/I : 戻る/進む
        keymap_global[ "LW-O" ] = "LA-Left"
        keymap_global[ "LW-I" ] = "LA-Right"

        # LW- S/LS-S : Switch to the previous/next window
        keymap_global[ "LW-S"    ] = "LA-Esc"
        keymap_global[ "LW-LS-S" ] = "LA-LS-Esc"

        # LW- B/W : 一単語ごとにカーソル移動
        keymap_global[ "LW-B" ] = "LC-Left"
        keymap_global[ "LW-W" ] = "LC-Right"

        # LW-LS- B/W : 一単語ごとに文字列選択
        keymap_global[ "LW-LS-B" ] = "LC-LS-Left"
        keymap_global[ "LW-LS-W" ] = "LC-LS-Right"

        # LW-LC- B/W : 一単語ごとに Back/Delete
        keymap_global[ "LW-LC-B" ] = "LC-Back"
        keymap_global[ "LW-LC-W" ] = "LC-Delete"

        # LW-LS- H/L/J/K : カーソル位置から移動したところまでの文字列選択
        keymap_global[ "LW-LS-H" ] = "LS-Left"
        keymap_global[ "LW-LS-L" ] = "LS-Right"
        keymap_global[ "LW-LS-J" ] = "LS-Down"
        keymap_global[ "LW-LS-K" ] = "LS-Up"

        # LW-LC- H/L/J/K : カーソル位置からカーソル6回分移動
        keymap_global[ "LW-LC-H" ] = "Left","Left","Left","Left","Left","Left"
        keymap_global[ "LW-LC-L" ] = "Right","Right","Right","Right","Right","Right"
        keymap_global[ "LW-LC-J" ] = "Down","Down","Down","Down","Down","Down"
        keymap_global[ "LW-LC-K" ] = "Up","Up","Up","Up","Up","Up"

        # LW-LC-LS- H/L/J/K : カーソル位置からカーソル6回分の文字列選択
        keymap_global[ "LW-LC-LS-H" ] = "LS-Left","LS-Left","LS-Left","LS-Left","LS-Left","LS-Left"
        keymap_global[ "LW-LC-LS-L" ] = "LS-Right","LS-Right","LS-Right","LS-Right","LS-Right","LS-Right"L
        keymap_global[ "LW-LC-LS-J" ] = "LS-Down","LS-Down","LS-Down","LS-Down","LS-Down","LS-Down"
        keymap_global[ "LW-LC-LS-K" ] = "LS-Up","LS-Up","LS-Up","LS-Up","LS-Up","LS-Up"

        # LW-LS- A/E : カーソル位置から 行頭/行末 まで文字列選択
        keymap_global[ "LW-LS-A" ] = "LS-Home"
        keymap_global[ "LW-LS-E" ] = "LS-End"

        # LW-LC- A/E : 文章の 最初/最後 へ移動
        keymap_global[ "LW-LC-A" ] = "LC-Home"
        keymap_global[ "LW-LC-E" ] = "LC-End"

        # LW-LC-S- A/E : カーソル位置から文章の 最初/最後 まで文字列選択
        keymap_global[ "LW-LC-S-A" ] = "LC-LS-Home"
        keymap_global[ "LW-LC-S-E" ] = "LC-LS-End"


        # LW- Left/Right/Down/Up : 40pixel単位のウインドウ移動
        keymap_global[ "LW-Left"  ] = keymap.command_MoveWindow( -40, 0 )
        keymap_global[ "LW-Right" ] = keymap.command_MoveWindow( +40, 0 )
        keymap_global[ "LW-Down"  ] = keymap.command_MoveWindow( 0, +40 )
        keymap_global[ "LW-Up"    ] = keymap.command_MoveWindow( 0, -40 )

        # LW-LA- Left/Right/Down/Up : 400pixel単位のウインドウ移動
        keymap_global[ "LW-LA-Left"  ] = keymap.command_MoveWindow( -400, 0 )
        keymap_global[ "LW-LA-Right" ] = keymap.command_MoveWindow( +400, 0 )
        keymap_global[ "LW-LA-Down"  ] = keymap.command_MoveWindow( 0, +400 )
        keymap_global[ "LW-LA-Up"    ] = keymap.command_MoveWindow( 0, -400 )

        # LW-LS- Left/Right/Down/Up : 画面端までウィンドウ移動
        keymap_global[ "LW-LS-Left"  ] = keymap.command_MoveWindow_MonitorEdge(0)
        keymap_global[ "LW-LS-Right" ] = keymap.command_MoveWindow_MonitorEdge(2)
        keymap_global[ "LW-LS-Down"  ] = keymap.command_MoveWindow_MonitorEdge(3)
        keymap_global[ "LW-LS-Up"    ] = keymap.command_MoveWindow_MonitorEdge(1)

        # LW-LC- Left/Right/Down/Up : キーボードで擬似マウス 40pixel単位のカーソル移動
        keymap_global[ "LW-LC-Left"  ] = keymap.command_MouseMove(-40,0)
        keymap_global[ "LW-LC-Right" ] = keymap.command_MouseMove(40,0)
        keymap_global[ "LW-LC-Down"  ] = keymap.command_MouseMove(0,40)
        keymap_global[ "LW-LC-Up"    ] = keymap.command_MouseMove(0,-40)

        # LW-LA-LC- Left/Right/Down/Up : キーボードで擬似マウス 400pixel単位のカーソル移動
        keymap_global[ "LW-LA-LC-Left"  ] = keymap.command_MouseMove(-400,0)
        keymap_global[ "LW-LA-LC-Right" ] = keymap.command_MouseMove(400,0)
        keymap_global[ "LW-LA-LC-Down"  ] = keymap.command_MouseMove(0,400)
        keymap_global[ "LW-LA-LC-Up"    ] = keymap.command_MouseMove(0,-400)

        # LW-LA-Space : キーボードで擬似マウス 左クリック
        keymap_global[ "D-LW-LA-Space" ] = keymap.command_MouseButtonDown('left')
        keymap_global[ "U-LW-LA-Space" ] = keymap.command_MouseButtonUp('left')

追記

15-02-08

15-02-28

15-04-15

15-04-27

15-09-25

15-11-25

15-12-11

16-01-16

17-12-28