shirobunのプログラミング雑記

プログラミングについて学んだことを書いていきます

Windowsのキーバインドをmacっぽくする(JIS前提)

やること

  • WindowsのJIS配列キーボードを変更する
    • caps lock 無変換左Ctrl 右Ctrl
    • 右Ctrl(無変換) 変換 を単押し → IMEオフ、オン
    • 左Ctrl + アルファベット → macのカーソル移動っぽく

つかうアプリ

手順

  1. Change Keyは管理者権限で実行すればキー配列を変更できる

    • caps lock左Ctrl
    • 無変換右Ctrl
  2. Keyhac の設定ファイルを変更する(デフォルトのファイルをまるっと上書き)

    • C:¥Users¥[name]¥AppData¥Roaming¥Keyhac¥config.py
    • 上書き後、WindowsタスクバーのKeyhacアイコンを右クリックして、設定のリロードする
import sys
import os
import datetime

import pyauto
from keyhac import *


def configure(keymap):

    # --------------------------------------------------------------------
    # Text editer setting for editting config.py file

    # Setting with program file path (Simple usage)
    if 1:
        keymap.editor = "notepad.exe"
        
    # Setting with callable object (Advanced usage)
    if 0:
        def editor(path):
            shellExecute( None, "notepad.exe", '"%s"'% path, "" )
        keymap.editor = editor

    # --------------------------------------------------------------------
    # Customizing the display

    # Font
    keymap.setFont( "MS Gothic", 12 )

    # Theme
    keymap.setTheme("black")

    # --------------------------------------------------------------------

    # Global keymap which affects any windows
    if 1:

        keymap_global = keymap.defineWindowKeymap()

        keymap_global[ "LCtrl-M" ] = "Enter"
        keymap_global[ "LCtrl-I" ] = "Tab"

        keymap_global[ "LCtrl-A" ] = "Home"
        keymap_global[ "LCtrl-E" ] = "End"

        keymap_global[ "LCtrl-N" ] = "Down"
        keymap_global[ "LCtrl-P" ] = "Up"
        keymap_global[ "LCtrl-F" ] = "Right"
        keymap_global[ "LCtrl-B" ] = "Left"

        keymap_global[ "LCtrl-Shift-A" ] = "Shift-Home"
        keymap_global[ "LCtrl-Shift-E" ] = "Shift-End"

        keymap_global[ "LCtrl-Shift-N" ] = "Shift-Down"
        keymap_global[ "LCtrl-Shift-P" ] = "Shift-Up"
        keymap_global[ "LCtrl-Shift-F" ] = "Shift-Right"
        keymap_global[ "LCtrl-Shift-B" ] = "Shift-Left"

        keymap_global[ "LCtrl-K" ] = "S-End","Delete"

        keymap_global[ "LCtrl-G" ] = "Escape"
        keymap_global[ "LCtrl-H" ] = "Back"
        keymap_global[ "LCtrl-A-F" ] = "A-Right"  # ブラウザで進む
        keymap_global[ "LCtrl-A-B" ] = "A-Left"  # ブラウザで戻る
        keymap_global[ "LCtrl-RCtrl-M" ] = "C-Enter"  # ブラウザでリンクを新しいタブで開く

        # 無変換キーを空打ちするとime_off
        keymap_global["O-RCtrl"] = lambda: switch_ime(False)

        # 変換キーを空打ちするとime_on
        keymap_global["(28)"] = lambda: switch_ime(True)

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

        # バルーンヘルプを表示する時間(ミリ秒)
        BALLOON_TIMEOUT_MSEC = 500

        # if not flag:
        if flag:
            ime_status = 1
            message = u"[あ]"
        else:
            ime_status = 0
            message = u"[_A]"

        # IMEのON/OFFをセット
        keymap.wnd.setImeStatus(ime_status)
        # IMEの状態をバルーンヘルプで表示
        keymap.popBalloon("ime_status", message, BALLOON_TIMEOUT_MSEC)

以上。