keyhacによるキーカスタマイズ

enthumbleというキーカスタマイズを使っていたが、これはShiftの位置を変えることができないので結局遠い所に手を伸ばさないといけないのでいやだった。keyhacというpythonで書かれたキーカスタマイズソフトがあったのでこれでShiftの位置を変えれた。ただ、enthumbleのEnterの入力方式になれたので少々違和感がある。書いたconfig.pyを掲載する。ここに書くとインデントが反映されないので
意味がないかも。

from keyhac import *
## Last update: 2013/05/12

def configure(keymap):
# グローバルキーマップの定義開始
keymap_global = keymap.defineWindowKeymap()

# SpaceをRShiftにわりあててSandSを実現
# keymap_global[“O-Shift”] = “Space”
# keymap.replaceKey(“Space”, “Shift”)
# keymap.defineModifier(“Space”, “User1”)
# ワンショットモディファイアとしてShiftをSpaceに定義

# 無変換キーをSandSの代用にする
# ワンショットモディファイアとしてShiftを無変換に定義
keymap_global[“O-Shift”] = “29”
keymap.replaceKey(“29”, “Shift”)
keymap.defineModifier(29, “User1”)

# 変換キーを モディファイアキー(U0)に登録
# ワンショットモディファイアとして右CtrlをEnterに定義
keymap_global[“O-28”] = “Enter”
keymap.defineModifier( 28, “User0”)

#keymap_global[“U0-Space”] = “Eneter”
keymap_global[“U0-LAlt”] = “Esc”
### ここからキーの割り当て
# Vimのカーソル移動
keymap_global[“U0-H”] = “Left”
keymap_global[“U0-J”] = “Down”
keymap_global[“U0-K”] = “Up”
keymap_global[“U0-L”] = “Right”

keymap_global[“U0-U”] = “PageUp”
keymap_global[“U0-Semicolon”] = “PageUp”
keymap_global[“U0-D”] = “PageDown”
keymap_global[“U0-Slash”] = “PageDown”

# EmacsのC-a, C-e
keymap_global[“U0-A”] = “Home”
keymap_global[“U0-E”] = “End”

# 範囲選択
keymap_global[“U0-U1-H”] = “S-Left”
keymap_global[“U0-U1-J”] = “S-Down”
keymap_global[“U0-U1-K”] = “S-Up”
keymap_global[“U0-U1-L”] = “S-Right”

#keymap_global[“U0-U1-U”] = “S-PageUp”
#keymap_global[“U0-U1-Semicolon”] = “S-PageUp”
#keymap_global[“U0-U1-D”] = “S-PageDown”
#keymap_global[“U0-U1-Slash”] = “S-PageDown”

#keymap_global[“U0-U1-A”] = “S-Home”
#keymap_global[“U0-U1-E”] = “S-End”

# Deleteとタブ
keymap_global[“U0-N”] = “Back”
keymap_global[“U0-M”] = “Shift-Tab”
keymap_global[“U0-Comma”] = “Tab”
keymap_global[“U0-Period”] = “Delete”

# よく使うキー
keymap_global[“U0-C”] = “Ctrl-C” # Copy
keymap_global[“U0-S”] = “Ctrl-S” # Save
keymap_global[“U0-V”] = “Ctrl-V” # Paste
keymap_global[“U0-X”] = “Ctrl-X” # Cut
keymap_global[“U0-W”] = “Ctrl-W” # Close Tab
keymap_global[“U0-F”] = “Ctrl-F” # Find
keymap_global[“U0-Z”] = “Ctrl-Z” # Undo
keymap_global[“U0-Y”] = “Ctrl-Y” # Redo

keymap_global[“242”] = “Apps”

# 表計算ソフトのタブ切替
keymap_global[“U0-I”] = “Ctrl-PageUp”
keymap_global[“U0-O”] = “Ctrl-PageDown”

## 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)

## キーの1回/2回押しで引数の関数コールを切り替える
#
# @param func コールする関数
#
# 引数の func は1回押しなら func(True)、2回連続押しなら func(False)
# でコールされる
#
def double_key(func, cache_t={}):

# 2回連続押し判断の許容間隔(ミリ秒)
TIMEOUT_MSEC = 500

func_name = func.__name__

# 前回時刻
t0 = 0
if func_name in cache_t:
t0 = cache_t[func_name]
# 現在時刻を保存
import time
cache_t[func_name] = time.clock()
# 前回実行からの経過時間(ミリ秒)
delta_t = (cache_t[func_name] – t0) * 1000

# 関数コール
if delta_t > TIMEOUT_MSEC:
func(False) # 1回押し
else:
func(True) # 2回連続押し

keymap_global = keymap.defineWindowKeymap()

if 0: # [半角/全角]
keymap_global[“U-(243)”] = lambda: double_key(switch_ime) # 押す
keymap_global[“D-(243)”] = lambda: None # 離す
keymap_global[“U-(244)”] = lambda: double_key(switch_ime) # 押す
keymap_global[“D-(244)”] = lambda: None # 離す

if 0: # [変換]
keymap_global[“S-(28)”] = “(28)” # Shift+[変換]で再変換
keymap_global[“(28)”] = lambda: double_key(switch_ime)

if 0: # [無変換]
keymap_global[“(29)”] = lambda: double_key(switch_ime)

if 0: # [Apps]
keymap_global[“(93)”] = lambda: double_key(switch_ime)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

前の記事

pptと画像形式