Created
September 24, 2010 07:57
-
-
Save littlefolk/595022 to your computer and use it in GitHub Desktop.
enthumble for keyhac
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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