mstrch0c 2017-04-14 11:05:51 +02:00
commit bc8ff5f44a
6520 changed files with 426985 additions and 0 deletions

View file

@ -0,0 +1,20 @@
import sys
success = False
in_ironpython = u"IronPython" in sys.version
if in_ironpython:
try:
from ironpython_keysyms import *
success = True
except ImportError, x:
raise
else:
try:
from keysyms import *
success = True
except ImportError, x:
pass
if not success:
raise ImportError(u"Could not import keysym for local pythonversion", x)

View file

@ -0,0 +1,127 @@
# -*- coding: utf-8 -*-
#*****************************************************************************
# Copyright (C) 2003-2006 Gary Bishop.
# Copyright (C) 2006 Jorgen Stenarson. <jorgen.stenarson@bostream.nu>
#
# Distributed under the terms of the BSD License. The full license is in
# the file COPYING, distributed as part of this software.
#*****************************************************************************
# table for translating virtual keys to X windows key symbols
try:
set
except NameError:
from sets import Set as set
from pyreadline.unicode_helper import ensure_unicode
validkey =set([u'cancel', u'backspace', u'tab', u'clear',
u'return', u'shift_l', u'control_l', u'alt_l',
u'pause', u'caps_lock', u'escape', u'space',
u'prior', u'next', u'end', u'home',
u'left', u'up', u'right', u'down',
u'select', u'print', u'execute', u'snapshot',
u'insert', u'delete', u'help', u'f1',
u'f2', u'f3', u'f4', u'f5',
u'f6', u'f7', u'f8', u'f9',
u'f10', u'f11', u'f12', u'f13',
u'f14', u'f15', u'f16', u'f17',
u'f18', u'f19', u'f20', u'f21',
u'f22', u'f23', u'f24', u'num_lock',
u'scroll_lock', u'vk_apps', u'vk_processkey',u'vk_attn',
u'vk_crsel', u'vk_exsel', u'vk_ereof', u'vk_play',
u'vk_zoom', u'vk_noname', u'vk_pa1', u'vk_oem_clear',
u'numpad0', u'numpad1', u'numpad2', u'numpad3',
u'numpad4', u'numpad5', u'numpad6', u'numpad7',
u'numpad8', u'numpad9', u'divide', u'multiply',
u'add', u'subtract', u'vk_decimal'])
escape_sequence_to_special_key = {u"\\e[a" : u"up", u"\\e[b" : u"down", u"del" : u"delete"}
class KeyPress(object):
def __init__(self, char=u"", shift=False, control=False, meta=False, keyname=u""):
if control or meta or shift:
char = char.upper()
self.info = dict(char=char,
shift=shift,
control=control,
meta=meta,
keyname=keyname)
def create(name):
def get(self):
return self.info[name]
def set(self, value):
self.info[name] = value
return property(get, set)
char = create(u"char")
shift = create(u"shift")
control = create(u"control")
meta = create(u"meta")
keyname = create(u"keyname")
def __repr__(self):
return u"(%s,%s,%s,%s)"%tuple(map(ensure_unicode, self.tuple()))
def tuple(self):
if self.keyname:
return (self.control, self.meta, self.shift, self.keyname)
else:
if self.control or self.meta or self.shift:
return (self.control, self.meta, self.shift, self.char.upper())
else:
return (self.control, self.meta, self.shift, self.char)
def __eq__(self, other):
if isinstance(other, KeyPress):
s = self.tuple()
o = other.tuple()
return s == o
else:
return False
def make_KeyPress_from_keydescr(keydescr):
keyinfo = KeyPress()
if len(keydescr) > 2 and keydescr[:1] == u'"' and keydescr[-1:] == u'"':
keydescr = keydescr[1:-1]
while 1:
lkeyname = keydescr.lower()
if lkeyname.startswith(u'control-'):
keyinfo.control = True
keydescr = keydescr[8:]
elif lkeyname.startswith(u'ctrl-'):
keyinfo.control = True
keydescr = keydescr[5:]
elif keydescr.lower().startswith(u'\\c-'):
keyinfo.control = True
keydescr = keydescr[3:]
elif keydescr.lower().startswith(u'\\m-'):
keyinfo.meta = True
keydescr = keydescr[3:]
elif keydescr in escape_sequence_to_special_key:
keydescr = escape_sequence_to_special_key[keydescr]
elif lkeyname.startswith(u'meta-'):
keyinfo.meta = True
keydescr = keydescr[5:]
elif lkeyname.startswith(u'alt-'):
keyinfo.meta = True
keydescr = keydescr[4:]
elif lkeyname.startswith(u'shift-'):
keyinfo.shift = True
keydescr = keydescr[6:]
else:
if len(keydescr) > 1:
if keydescr.strip().lower() in validkey:
keyinfo.keyname = keydescr.strip().lower()
keyinfo.char = ""
else:
raise IndexError(u"Not a valid key: '%s'"%keydescr)
else:
keyinfo.char = keydescr
return keyinfo
if __name__ == u"__main__":
import startup

View file

@ -0,0 +1,202 @@
# -*- coding: utf-8 -*-
#*****************************************************************************
# Copyright (C) 2003-2006 Gary Bishop.
# Copyright (C) 2006 Jorgen Stenarson. <jorgen.stenarson@bostream.nu>
#
# Distributed under the terms of the BSD License. The full license is in
# the file COPYING, distributed as part of this software.
#*****************************************************************************
import System
from common import validkey, KeyPress, make_KeyPress_from_keydescr
c32 = System.ConsoleKey
Shift = System.ConsoleModifiers.Shift
Control = System.ConsoleModifiers.Control
Alt = System.ConsoleModifiers.Alt
# table for translating virtual keys to X windows key symbols
code2sym_map = {#c32.CANCEL: u'Cancel',
c32.Backspace: u'BackSpace',
c32.Tab: u'Tab',
c32.Clear: u'Clear',
c32.Enter: u'Return',
# c32.Shift: u'Shift_L',
# c32.Control: u'Control_L',
# c32.Menu: u'Alt_L',
c32.Pause: u'Pause',
# c32.Capital: u'Caps_Lock',
c32.Escape: u'Escape',
# c32.Space: u'space',
c32.PageUp: u'Prior',
c32.PageDown: u'Next',
c32.End: u'End',
c32.Home: u'Home',
c32.LeftArrow: u'Left',
c32.UpArrow: u'Up',
c32.RightArrow: u'Right',
c32.DownArrow: u'Down',
c32.Select: u'Select',
c32.Print: u'Print',
c32.Execute: u'Execute',
# c32.Snapshot: u'Snapshot',
c32.Insert: u'Insert',
c32.Delete: u'Delete',
c32.Help: u'Help',
c32.F1: u'F1',
c32.F2: u'F2',
c32.F3: u'F3',
c32.F4: u'F4',
c32.F5: u'F5',
c32.F6: u'F6',
c32.F7: u'F7',
c32.F8: u'F8',
c32.F9: u'F9',
c32.F10: u'F10',
c32.F11: u'F11',
c32.F12: u'F12',
c32.F13: u'F13',
c32.F14: u'F14',
c32.F15: u'F15',
c32.F16: u'F16',
c32.F17: u'F17',
c32.F18: u'F18',
c32.F19: u'F19',
c32.F20: u'F20',
c32.F21: u'F21',
c32.F22: u'F22',
c32.F23: u'F23',
c32.F24: u'F24',
# c32.Numlock: u'Num_Lock,',
# c32.Scroll: u'Scroll_Lock',
# c32.Apps: u'VK_APPS',
# c32.ProcesskeY: u'VK_PROCESSKEY',
# c32.Attn: u'VK_ATTN',
# c32.Crsel: u'VK_CRSEL',
# c32.Exsel: u'VK_EXSEL',
# c32.Ereof: u'VK_EREOF',
# c32.Play: u'VK_PLAY',
# c32.Zoom: u'VK_ZOOM',
# c32.Noname: u'VK_NONAME',
# c32.Pa1: u'VK_PA1',
c32.OemClear: u'VK_OEM_CLEAR',
c32.NumPad0: u'NUMPAD0',
c32.NumPad1: u'NUMPAD1',
c32.NumPad2: u'NUMPAD2',
c32.NumPad3: u'NUMPAD3',
c32.NumPad4: u'NUMPAD4',
c32.NumPad5: u'NUMPAD5',
c32.NumPad6: u'NUMPAD6',
c32.NumPad7: u'NUMPAD7',
c32.NumPad8: u'NUMPAD8',
c32.NumPad9: u'NUMPAD9',
c32.Divide: u'Divide',
c32.Multiply: u'Multiply',
c32.Add: u'Add',
c32.Subtract: u'Subtract',
c32.Decimal: u'VK_DECIMAL'
}
# function to handle the mapping
def make_keysym(keycode):
try:
sym = code2sym_map[keycode]
except KeyError:
sym = u''
return sym
sym2code_map = {}
for code,sym in code2sym_map.iteritems():
sym2code_map[sym.lower()] = code
def key_text_to_keyinfo(keytext):
u'''Convert a GNU readline style textual description of a key to keycode with modifiers'''
if keytext.startswith('"'): # "
return keyseq_to_keyinfo(keytext[1:-1])
else:
return keyname_to_keyinfo(keytext)
def char_to_keyinfo(char, control=False, meta=False, shift=False):
vk = (ord(char))
if vk & 0xffff == 0xffff:
print u'VkKeyScan("%s") = %x' % (char, vk)
raise ValueError, u'bad key'
if vk & 0x100:
shift = True
if vk & 0x200:
control = True
if vk & 0x400:
meta = True
return (control, meta, shift, vk & 0xff)
def keyname_to_keyinfo(keyname):
control = False
meta = False
shift = False
while 1:
lkeyname = keyname.lower()
if lkeyname.startswith(u'control-'):
control = True
keyname = keyname[8:]
elif lkeyname.startswith(u'ctrl-'):
control = True
keyname = keyname[5:]
elif lkeyname.startswith(u'meta-'):
meta = True
keyname = keyname[5:]
elif lkeyname.startswith(u'alt-'):
meta = True
keyname = keyname[4:]
elif lkeyname.startswith(u'shift-'):
shift = True
keyname = keyname[6:]
else:
if len(keyname) > 1:
return (control, meta, shift, sym2code_map.get(keyname.lower(),u" "))
else:
return char_to_keyinfo(keyname, control, meta, shift)
def keyseq_to_keyinfo(keyseq):
res = []
control = False
meta = False
shift = False
while 1:
if keyseq.startswith(u'\\C-'):
control = True
keyseq = keyseq[3:]
elif keyseq.startswith(u'\\M-'):
meta = True
keyseq = keyseq[3:]
elif keyseq.startswith(u'\\e'):
res.append(char_to_keyinfo(u'\033', control, meta, shift))
control = meta = shift = False
keyseq = keyseq[2:]
elif len(keyseq) >= 1:
res.append(char_to_keyinfo(keyseq[0], control, meta, shift))
control = meta = shift = False
keyseq = keyseq[1:]
else:
return res[0]
def make_keyinfo(keycode, state):
control = False
meta =False
shift = False
return (control, meta, shift, keycode)
def make_KeyPress(char, state, keycode):
shift = bool(int(state) & int(Shift))
control = bool(int(state) & int(Control))
meta = bool(int(state) & int(Alt))
keyname = code2sym_map.get(keycode, u"").lower()
if control and meta: #equivalent to altgr so clear flags
control = False
meta = False
elif control:
char = str(keycode)
return KeyPress(char, shift, control, meta, keyname)

View file

@ -0,0 +1,133 @@
# -*- coding: utf-8 -*-
#*****************************************************************************
# Copyright (C) 2003-2006 Gary Bishop.
# Copyright (C) 2006 Jorgen Stenarson. <jorgen.stenarson@bostream.nu>
#
# Distributed under the terms of the BSD License. The full license is in
# the file COPYING, distributed as part of this software.
#*****************************************************************************
import winconstants as c32
from pyreadline.logger import log
from ctypes import windll
import ctypes
# table for translating virtual keys to X windows key symbols
from common import validkey, KeyPress, make_KeyPress_from_keydescr
code2sym_map = {c32.VK_CANCEL: u'cancel',
c32.VK_BACK: u'backspace',
c32.VK_TAB: u'tab',
c32.VK_CLEAR: u'clear',
c32.VK_RETURN: u'return',
c32.VK_SHIFT: u'shift_l',
c32.VK_CONTROL: u'control_l',
c32.VK_MENU: u'alt_l',
c32.VK_PAUSE: u'pause',
c32.VK_CAPITAL: u'caps_lock',
c32.VK_ESCAPE: u'escape',
c32.VK_SPACE: u'space',
c32.VK_PRIOR: u'prior',
c32.VK_NEXT: u'next',
c32.VK_END: u'end',
c32.VK_HOME: u'home',
c32.VK_LEFT: u'left',
c32.VK_UP: u'up',
c32.VK_RIGHT: u'right',
c32.VK_DOWN: u'down',
c32.VK_SELECT: u'select',
c32.VK_PRINT: u'print',
c32.VK_EXECUTE: u'execute',
c32.VK_SNAPSHOT: u'snapshot',
c32.VK_INSERT: u'insert',
c32.VK_DELETE: u'delete',
c32.VK_HELP: u'help',
c32.VK_F1: u'f1',
c32.VK_F2: u'f2',
c32.VK_F3: u'f3',
c32.VK_F4: u'f4',
c32.VK_F5: u'f5',
c32.VK_F6: u'f6',
c32.VK_F7: u'f7',
c32.VK_F8: u'f8',
c32.VK_F9: u'f9',
c32.VK_F10: u'f10',
c32.VK_F11: u'f11',
c32.VK_F12: u'f12',
c32.VK_F13: u'f13',
c32.VK_F14: u'f14',
c32.VK_F15: u'f15',
c32.VK_F16: u'f16',
c32.VK_F17: u'f17',
c32.VK_F18: u'f18',
c32.VK_F19: u'f19',
c32.VK_F20: u'f20',
c32.VK_F21: u'f21',
c32.VK_F22: u'f22',
c32.VK_F23: u'f23',
c32.VK_F24: u'f24',
c32.VK_NUMLOCK: u'num_lock,',
c32.VK_SCROLL: u'scroll_lock',
c32.VK_APPS: u'vk_apps',
c32.VK_PROCESSKEY: u'vk_processkey',
c32.VK_ATTN: u'vk_attn',
c32.VK_CRSEL: u'vk_crsel',
c32.VK_EXSEL: u'vk_exsel',
c32.VK_EREOF: u'vk_ereof',
c32.VK_PLAY: u'vk_play',
c32.VK_ZOOM: u'vk_zoom',
c32.VK_NONAME: u'vk_noname',
c32.VK_PA1: u'vk_pa1',
c32.VK_OEM_CLEAR: u'vk_oem_clear',
c32.VK_NUMPAD0: u'numpad0',
c32.VK_NUMPAD1: u'numpad1',
c32.VK_NUMPAD2: u'numpad2',
c32.VK_NUMPAD3: u'numpad3',
c32.VK_NUMPAD4: u'numpad4',
c32.VK_NUMPAD5: u'numpad5',
c32.VK_NUMPAD6: u'numpad6',
c32.VK_NUMPAD7: u'numpad7',
c32.VK_NUMPAD8: u'numpad8',
c32.VK_NUMPAD9: u'numpad9',
c32.VK_DIVIDE: u'divide',
c32.VK_MULTIPLY: u'multiply',
c32.VK_ADD: u'add',
c32.VK_SUBTRACT: u'subtract',
c32.VK_DECIMAL: u'vk_decimal'
}
VkKeyScan = windll.user32.VkKeyScanA
def char_to_keyinfo(char, control=False, meta=False, shift=False):
k=KeyPress()
vk = VkKeyScan(ord(char))
if vk & 0xffff == 0xffff:
print u'VkKeyScan("%s") = %x' % (char, vk)
raise ValueError, u'bad key'
if vk & 0x100:
k.shift = True
if vk & 0x200:
k.control = True
if vk & 0x400:
k.meta = True
k.char=chr(vk & 0xff)
return k
def make_KeyPress(char, state, keycode):
control = (state & (4+8)) != 0
meta = (state & (1+2)) != 0
shift = (state & 0x10) != 0
if control and not meta:#Matches ctrl- chords should pass keycode as char
char = chr(keycode)
elif control and meta: #Matches alt gr and should just pass on char
control = False
meta = False
try:
keyname=code2sym_map[keycode]
except KeyError:
keyname = u""
out = KeyPress(char, shift, control, meta, keyname)
return out
if __name__==u"__main__":
import startup

View file

@ -0,0 +1,171 @@
#This file contains constants that are normally found in win32all
#But included here to avoid the dependency
VK_LBUTTON=1
VK_RBUTTON=2
VK_CANCEL=3
VK_MBUTTON=4
VK_XBUTTON1=5
VK_XBUTTON2=6
VK_BACK=8
VK_TAB=9
VK_CLEAR=12
VK_RETURN=13
VK_SHIFT=16
VK_CONTROL=17
VK_MENU=18
VK_PAUSE=19
VK_CAPITAL=20
VK_KANA=0x15
VK_HANGEUL=0x15
VK_HANGUL=0x15
VK_JUNJA=0x17
VK_FINAL=0x18
VK_HANJA=0x19
VK_KANJI=0x19
VK_ESCAPE=0x1B
VK_CONVERT=0x1C
VK_NONCONVERT=0x1D
VK_ACCEPT=0x1E
VK_MODECHANGE=0x1F
VK_SPACE=32
VK_PRIOR=33
VK_NEXT=34
VK_END=35
VK_HOME=36
VK_LEFT=37
VK_UP=38
VK_RIGHT=39
VK_DOWN=40
VK_SELECT=41
VK_PRINT=42
VK_EXECUTE=43
VK_SNAPSHOT=44
VK_INSERT=45
VK_DELETE=46
VK_HELP=47
VK_LWIN=0x5B
VK_RWIN=0x5C
VK_APPS=0x5D
VK_SLEEP=0x5F
VK_NUMPAD0=0x60
VK_NUMPAD1=0x61
VK_NUMPAD2=0x62
VK_NUMPAD3=0x63
VK_NUMPAD4=0x64
VK_NUMPAD5=0x65
VK_NUMPAD6=0x66
VK_NUMPAD7=0x67
VK_NUMPAD8=0x68
VK_NUMPAD9=0x69
VK_MULTIPLY=0x6A
VK_ADD=0x6B
VK_SEPARATOR=0x6C
VK_SUBTRACT=0x6D
VK_DECIMAL=0x6E
VK_DIVIDE=0x6F
VK_F1=0x70
VK_F2=0x71
VK_F3=0x72
VK_F4=0x73
VK_F5=0x74
VK_F6=0x75
VK_F7=0x76
VK_F8=0x77
VK_F9=0x78
VK_F10=0x79
VK_F11=0x7A
VK_F12=0x7B
VK_F13=0x7C
VK_F14=0x7D
VK_F15=0x7E
VK_F16=0x7F
VK_F17=0x80
VK_F18=0x81
VK_F19=0x82
VK_F20=0x83
VK_F21=0x84
VK_F22=0x85
VK_F23=0x86
VK_F24=0x87
VK_NUMLOCK=0x90
VK_SCROLL=0x91
VK_LSHIFT=0xA0
VK_RSHIFT=0xA1
VK_LCONTROL=0xA2
VK_RCONTROL=0xA3
VK_LMENU=0xA4
VK_RMENU=0xA5
VK_BROWSER_BACK=0xA6
VK_BROWSER_FORWARD=0xA7
VK_BROWSER_REFRESH=0xA8
VK_BROWSER_STOP=0xA9
VK_BROWSER_SEARCH=0xAA
VK_BROWSER_FAVORITES=0xAB
VK_BROWSER_HOME=0xAC
VK_VOLUME_MUTE=0xAD
VK_VOLUME_DOWN=0xAE
VK_VOLUME_UP=0xAF
VK_MEDIA_NEXT_TRACK=0xB0
VK_MEDIA_PREV_TRACK=0xB1
VK_MEDIA_STOP=0xB2
VK_MEDIA_PLAY_PAUSE=0xB3
VK_LAUNCH_MAIL=0xB4
VK_LAUNCH_MEDIA_SELECT=0xB5
VK_LAUNCH_APP1=0xB6
VK_LAUNCH_APP2=0xB7
VK_OEM_1=0xBA
VK_OEM_PLUS=0xBB
VK_OEM_COMMA=0xBC
VK_OEM_MINUS=0xBD
VK_OEM_PERIOD=0xBE
VK_OEM_2=0xBF
VK_OEM_3=0xC0
VK_OEM_4=0xDB
VK_OEM_5=0xDC
VK_OEM_6=0xDD
VK_OEM_7=0xDE
VK_OEM_8=0xDF
VK_OEM_102=0xE2
VK_PROCESSKEY=0xE5
VK_PACKET=0xE7
VK_ATTN=0xF6
VK_CRSEL=0xF7
VK_EXSEL=0xF8
VK_EREOF=0xF9
VK_PLAY=0xFA
VK_ZOOM=0xFB
VK_NONAME=0xFC
VK_PA1=0xFD
VK_OEM_CLEAR=0xFE
CF_TEXT=1
CF_BITMAP=2
CF_METAFILEPICT=3
CF_SYLK=4
CF_DIF=5
CF_TIFF=6
CF_OEMTEXT=7
CF_DIB=8
CF_PALETTE=9
CF_PENDATA=10
CF_RIFF=11
CF_WAVE=12
CF_UNICODETEXT=13
CF_ENHMETAFILE=14
CF_HDROP=15
CF_LOCALE=16
CF_MAX=17
CF_OWNERDISPLAY=128
CF_DSPTEXT=129
CF_DSPBITMAP=130
CF_DSPMETAFILEPICT=131
CF_DSPENHMETAFILE=142
CF_PRIVATEFIRST=512
CF_PRIVATELAST=767
CF_GDIOBJFIRST=768
CF_GDIOBJLAST=1023
GPTR=64
GHND=66