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