Skip to content

Instantly share code, notes, and snippets.

@littlefolk
Created September 24, 2010 07:57
Show Gist options
  • Save littlefolk/595022 to your computer and use it in GitHub Desktop.
Save littlefolk/595022 to your computer and use it in GitHub Desktop.
enthumble for keyhac
from keyhac import *
import itertools
"""
enthumble for keyhac
====================
enthumble_ 多機能バージョンのキーマップをkeyhacで再現してみる。
実装状況
--------
- 実装済
- 決定(Space: Enter, Henkan: Esc)
- 矢印(HJKL: ←↓↑→)
- 編集(N.: BS,Del)
- ページ移動(;:: PgUp,PgDn)
- Tab移動(M,: Tab,ShiftTab)
- 末端移動(FG: Home,End)
- 数字1段下げ(qwertyuiop@[: 1234567890-^)
- その他(Esc: ウインドウ消去=alt+F4)
- その他(Enter: エクスプローラ)
- 無変換キーだけでなく、変換キーを当ファンクションキーとして利用
- 未実装
- 拡大縮小(マウス右クリック: 拡大, マウス左クリック: 縮小)
.. _enthumble: http://sites.google.com/site/enthumble/
"""
def powerset(iterable):
"powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)"
s = list(iterable)
return itertools.chain.from_iterable(itertools.combinations(s, r) for r in range(len(s)+1))
def configure(keymap):
keymap_global = keymap.defineWindowKeymap()
# 無変換キーをモディファイアキー(U0)に登録
keymap.replaceKey(29, 254)
keymap.defineModifier(254, "User0")
# 変換キーをモディファイアキー(U1)に登録
keymap.replaceKey(28, 255)
keymap.defineModifier(255, "User1")
keyborad = (
("1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "(189)", "(222)", "(220)"),
("q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "(192)", "(219)"),
("a", "s", "d", "f", "g", "h", "j", "k", "l", "(187)", "(186)", "(221)"),
("z", "x", "c", "v", "b", "n", "m", "(188)", "(190)", "(191)", "(226)"),
("Space", "(28)", "Esc", "Enter"),
)
enthumble = (
("Home", "End", "Left", "Down", "Up", "Right", "PageUp"),
("Back", "S-Tab", "Tab", "Delete", "PageDown"),
("Enter", "Esc", "A-F4",
keymap.command_ShellExecute( None, None, "explorer.exe", u"", u"" )),
)
translation_table = itertools.chain(
[(j, "F" + str(i + 1)) for i, j in enumerate(keyborad[0][0:-1])], # ファンクションキー
[(j, keyborad[0][i]) for i, j in enumerate(keyborad[1][0:-1])], # 数字1段下げ
[(j, enthumble[0][i]) for i, j in enumerate(keyborad[2][3:-2])], # 末端移動 矢印 ページ移動
[(j, enthumble[1][i]) for i, j in enumerate(keyborad[3][5:-1])], # 編集 Tab移動 ページ移動
[(j, enthumble[2][i]) for i, j in enumerate(keyborad[4])], # 決定 その他
)
modifier = ["-".join(mod) + "-" for mod in powerset(["C", "S", "A"]) if mod]
for i, j in translation_table:
keymap_global["U0-" + i] = j
keymap_global["U1-" + i] = j
iskeystr = isinstance(j, str)
for mod in modifier:
keymap_global["U0-" + mod + i] = mod + j if iskeystr else j
keymap_global["U1-" + mod + i] = mod + j if iskeystr else j
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment