Skip to content

Instantly share code, notes, and snippets.

@k-iino
Last active Apr 10, 2017
Embed
What would you like to do?
config.py -- Keyhac Configuration
#
# config.py -- Configuration file for Keyhac
#
# Author: Kyota Iino <k.iino@outlook.com>
#
import sys
import os
import datetime
import pyauto
from keyhac import *
def configure(keymap):
# Keyhac が認識する Emacs クラス名
emacs_classes = "Emacs"
# Emacs キーバインディングを反映しないクラス名
not_emacs_binding_exe = ("cmd.exe")
# フォーカス先が Emacs か
def is_emacs(window):
# Emacs バインディング適用外の EXE なら適用しない
if window.getClassName() in emacs_classes:
return True
return False
# ファーカス先が Emacs キーバインディング適用外のクラスか
def is_excluded_from_emacs_bindings(window):
if window.getProcessName() in not_emacs_binding_exe:
return True
return False
#
# Emacs Like Key Bindings 対象外かの判定
#
def is_emacs_bindings(window):
return not is_emacs(window) \
and not is_excluded_from_emacs_bindings(window)
#
# Replace
#
# 「変換」キーを仮想モディファイアに変更
keymap.replaceKey( 28, 999 )
keymap.defineModifier( 999, "User0" )
# 「無変換」キーを Alt キーに変更
keymap.replaceKey( 29, "LAlt" )
# 矢印キーを Shift に変換
#keymap.replaceKey( "Up", "RShift" )
#keymap.replaceKey( "Left", "RShift" )
#keymap.replaceKey( "Down", "RShift" )
# JIS配列準拠の日本語配列のみ
keymap.replaceKey( "BackSlash", "RShift")
#
# Global Keymap
#
keymap_global = keymap.defineWindowKeymap()
# 上段のキーバインディング
keymap_global[ "U0-Q" ] = "ESC"
keymap_global[ "U0-I" ] = "OpenBracket"
keymap_global[ "U0-O" ] = "CloseBracket"
keymap_global[ "U0-P" ] = "BackSlash"
keymap_global[ "U0-Shift-I" ] = "Shift-OpenBracket"
keymap_global[ "U0-Shift-O" ] = "Shift-CloseBracket"
keymap_global[ "U0-Shift-P" ] = "Shift-Yen"
keymap_global[ "U0-Atmark" ] = "Shift-Underscore" # HHKB JP だとこれでアンスコになる。
# 中央段のキーバインディング
keymap_global[ "U0-A" ] = "1"
keymap_global[ "U0-S" ] = "2"
keymap_global[ "U0-D" ] = "3"
keymap_global[ "U0-F" ] = "4"
keymap_global[ "U0-G" ] = "5"
keymap_global[ "U0-H" ] = "6"
keymap_global[ "U0-J" ] = "7"
keymap_global[ "U0-K" ] = "8"
keymap_global[ "U0-L" ] = "9"
keymap_global[ "U0-Semicolon" ] = "0"
keymap_global[ "U0-Colon" ] = "Minus"
keymap_global[ "U0-CloseBracket" ] = "Caret"
keymap_global[ "U0-Shift-A" ] = "Shift-1"
keymap_global[ "U0-Shift-S" ] = "Shift-2"
keymap_global[ "U0-Shift-D" ] = "Shift-3"
keymap_global[ "U0-Shift-F" ] = "Shift-4"
keymap_global[ "U0-Shift-G" ] = "Shift-5"
keymap_global[ "U0-Shift-H" ] = "Shift-6"
keymap_global[ "U0-Shift-J" ] = "Shift-7"
keymap_global[ "U0-Shift-K" ] = "Shift-8"
keymap_global[ "U0-Shift-L" ] = "Shift-9"
keymap_global[ "U0-Shift-Semicolon" ] = "Shift-0"
keymap_global[ "U0-Shift-Colon" ] = "Shift-Minus"
keymap_global[ "U0-Shift-CloseBracket" ] = "Shift-Caret"
# 下段のキーバインディグ
# Emacs で IME 変換確定時の挙動変更のため
keymap_global[ "Ctrl-M" ] = "Return"
#
# Emacs Like Binding Keymap
#
keymap_not_emacs = keymap.defineWindowKeymap( check_func = is_emacs_bindings )
keymap_not_emacs[ "Ctrl-H" ] = "Back"
keymap_not_emacs[ "Ctrl-D" ] = "Delete"
keymap_not_emacs[ "Ctrl-M" ] = "Return"
keymap_not_emacs[ "Ctrl-P" ] = "Up"
keymap_not_emacs[ "Ctrl-N" ] = "Down"
keymap_not_emacs[ "Ctrl-B" ] = "Left"
keymap_not_emacs[ "Ctrl-F" ] = "Right"
keymap_not_emacs[ "Ctrl-M" ] = "Return"
keymap_not_emacs[ "Ctrl-O" ] = "Return", "Left"
keymap_not_emacs[ "Ctrl-E" ] = "End"
keymap_not_emacs[ "Ctrl-A" ] = "Home"
keymap_not_emacs[ "Ctrl-K" ] = "D-Shift", "End", "C-x", "U-Shift"
keymap_not_emacs[ "Ctrl-Y" ] = "C-v"
keymap_not_emacs[ "Ctrl-T" ] = "D-Shift", "Right", "C-x", "U-Shift", "Left", "C-v"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment