df78607a7a38

Add keyremap script.
[view raw] [browse files]
author Steve Losh <steve@stevelosh.com>
date Thu, 27 Sep 2012 14:08:50 -0400
parents efc8b9162ff8
children 2d2e9a71f334
branches/tags (none)
files keyremap4macbook/cadet.py

Changes

--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/keyremap4macbook/cadet.py	Thu Sep 27 14:08:50 2012 -0400
@@ -0,0 +1,131 @@
+# -*- coding: utf8 -*-
+import string
+
+greek = [
+    ('a', u'α' u'Α', u'', u''),
+    ('b', u'β' u'Β', u'', u''),
+    ('c', u'χ' u'Χ', u'', u''),
+    ('d', u'δ' u'Δ', u'', u''),
+    ('e', u'ε' u'Ε', u'', u''),
+    ('f', u'φ' u'Φ', u'', u''),
+    ('g', u'γ' u'Γ', u'', u''),
+    ('h', u'η' u'Η', u'', u''),
+    ('i', u'ι' u'Ι', u'', u''),
+    ('j', u'ϑ' u'Θ', u'', u''),
+    ('k', u'κ' u'Κ', u'', u''),
+    ('l', u'λ' u'Λ', u'', u''),
+    ('m', u'μ' u'Μ', u'', u''),
+    ('n', u'ν' u'Ν', u'', u''),
+    ('o', u'ο' u'Ο', u'', u''),
+    ('p', u'π' u'Π', u'', u''),
+    ('q', u'θ' u'Θ', u'', u''),
+    ('r', u'ρ' u'Ρ', u'', u''),
+    ('s', u'σ' u'Σ', u'', u''),
+    ('t', u'τ' u'Τ', u'', u''),
+    ('u', u'υ' u'Υ', u'', u''),
+    ('v', u'ς' u'Σ', u'', u''),
+    ('w', u'ω' u'Ω', u'', u''),
+    ('x', u'ξ' u'Ξ', u'', u''),
+    ('y', u'ψ' u'Ψ', u'', u''),
+    ('z', u'ζ' u'Ζ', u'', u''),
+]
+
+math = [
+    ('a',     u'∧', u'ℵ', u'', u''),
+    ('c',     u'∘', u'ℂ', u'', u''),
+    ('e',     u'∈', u'∉', u'', u''),
+    ('f',     u'∫', u'',  u'', u''),
+    ('i',     u'∩', u'∞', u'', u''),
+    ('n',     u'' , u'ℕ', u'', u''),
+    ('o',     u'∨', u'',  u'', u''),
+    ('r',     u'√', u'ℝ', u'', u''),
+    ('t',     u'⊢', u'⊥', u'', u''),
+    ('u',     u'∪', u'',  u'', u''),
+    ('x',     u'⊻', u'',  u'', u''),
+    ('z',     u'' , u'ℤ', u'', u''),
+    ('-',     u'¬', u'',  u'', u''),
+    ('=',     u'≠', u'±', u'', u''),
+    ('/',     u'÷', u'',  u'', u''),
+    (',',     u'' , u'≤', u'', u''),
+    ('.',     u'·', u'≥', u'', u''),
+    ('0',     u'∅', u'',  u'', u''),
+    ('8',     u'' , u'×', u'', u''),
+    ('`',     u'' , u'≈', u'', u''),
+    ('[',     u'⊂', u'⊄', u'⊆', u'⊈'),
+    (']',     u'⊃', u'⊅', u'⊇', u'⊉'),
+    ('right', u'→', u'↛', u'⇒', u'⇏'),
+    ('left',  u'←', u'↚', u'⇐', u'⇍'),
+    ('up',    u'↔', u'↮', u'⇔', u'⇎'),
+    ('down',  u'↔', u'↮', u'⇔', u'⇎'),
+]
+
+def get_keycode(c):
+    if c in string.letters:
+        return c
+    elif c in string.digits:
+        return 'KEY_' + c
+    else:
+        return {
+            '-': 'MINUS',
+            '=': 'EQUAL',
+            '/': 'SLASH',
+            '\\': 'BACKSLASH',
+            '.': 'DOT',
+            ',': 'COMMA',
+            "'": 'QUOTE',
+            ';': 'SEMICOLON',
+            '[': 'BRACKET_LEFT',
+            ']': 'BRACKET_RIGHT',
+            '`': 'BACKQUOTE',
+            'left': 'CURSOR_LEFT',
+            'right': 'CURSOR_RIGHT',
+            'down': 'CURSOR_DOWN',
+            'up': 'CURSOR_UP',
+        }[c]
+
+def get_line(c):
+    line_template = r'''KeyCode::%s, ModifierFlag::OPTION_L,'''
+    key = get_keycode(c)
+    return line_template % key
+
+def get_codepoint(c):
+    r = repr(c)
+    if len(r) == 7:
+        return '00' + r[-3:-1].upper()
+    else:
+        return r[-5:-1].upper()
+
+def get_chunk(source_key, dest_char, mod, buckies):
+    modifier_chunks = ['ModifierFlag::EXTRA%d'% mod]
+    modifier_chunks.extend(buckies)
+    modifier = ' | '.join(modifier_chunks)
+
+    codepoint = get_codepoint(dest_char)
+    lines = '\n'.join(get_line(c) for c in codepoint)
+
+    return r'''
+        <autogen>
+            --KeyToKey--
+            KeyCode::%s, %s,
+            %s
+        </autogen>
+    ''' % (source_key, modifier, lines)
+
+def for_map(m, modifier):
+    for k, bare, shift, ctrl, shiftctrl in m:
+        k = get_keycode(k).upper()
+
+        if shiftctrl:
+            print get_chunk(k, shiftctrl, modifier, ['VK_CONTROL', 'VK_SHIFT'])
+
+        if shift:
+            print get_chunk(k, shift, modifier, ['VK_SHIFT'])
+
+        if ctrl:
+            print get_chunk(k, ctrl, modifier, ['VK_CONTROL'])
+
+        if bare:
+            print get_chunk(k, bare, modifier, [])
+
+# for_map(greek, 4)
+for_map(math, 3)