I am done

This commit is contained in:
2024-10-30 22:14:35 +01:00
parent 720dc28c09
commit 40e2a747cf
36901 changed files with 5011519 additions and 0 deletions

View File

@ -0,0 +1,14 @@
from pyreadline3.py3k_compat import is_ironpython
from . import winconstants
if is_ironpython:
try:
from .ironpython_keysyms import *
except ImportError as x:
raise ImportError("Could not import keysym for local ironpython version") from x
else:
try:
from .keysyms import *
except ImportError as x:
raise ImportError("Could not import keysym for local python version") from x

View File

@ -0,0 +1,198 @@
# -*- coding: utf-8 -*-
# *****************************************************************************
# Copyright (C) 2003-2006 Gary Bishop.
# Copyright (C) 2006-2020 Jorgen Stenarson. <jorgen.stenarson@bostream.nu>
# Copyright (C) 2020 Bassem Girgis. <brgirgis@gmail.com>
#
# 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 pyreadline3.unicode_helper import ensure_unicode
validkey = set(
[
"cancel",
"backspace",
"tab",
"clear",
"return",
"shift_l",
"control_l",
"alt_l",
"pause",
"caps_lock",
"escape",
"space",
"prior",
"next",
"end",
"home",
"left",
"up",
"right",
"down",
"select",
"print",
"execute",
"snapshot",
"insert",
"delete",
"help",
"f1",
"f2",
"f3",
"f4",
"f5",
"f6",
"f7",
"f8",
"f9",
"f10",
"f11",
"f12",
"f13",
"f14",
"f15",
"f16",
"f17",
"f18",
"f19",
"f20",
"f21",
"f22",
"f23",
"f24",
"num_lock",
"scroll_lock",
"vk_apps",
"vk_processkey",
"vk_attn",
"vk_crsel",
"vk_exsel",
"vk_ereof",
"vk_play",
"vk_zoom",
"vk_noname",
"vk_pa1",
"vk_oem_clear",
"numpad0",
"numpad1",
"numpad2",
"numpad3",
"numpad4",
"numpad5",
"numpad6",
"numpad7",
"numpad8",
"numpad9",
"divide",
"multiply",
"add",
"subtract",
"vk_decimal",
]
)
escape_sequence_to_special_key = {
"\\e[a": "up",
"\\e[b": "down",
"del": "delete",
}
class KeyPress(object):
def __init__(self, char="", shift=False, control=False, meta=False, keyname=""):
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("char")
shift = create("shift")
control = create("control")
meta = create("meta")
keyname = create("keyname")
def __repr__(self):
return "(%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] == '"' and keydescr[-1:] == '"':
keydescr = keydescr[1:-1]
while True:
lkeyname = keydescr.lower()
if lkeyname.startswith("control-"):
keyinfo.control = True
keydescr = keydescr[8:]
elif lkeyname.startswith("ctrl-"):
keyinfo.control = True
keydescr = keydescr[5:]
elif keydescr.lower().startswith("\\c-"):
keyinfo.control = True
keydescr = keydescr[3:]
elif keydescr.lower().startswith("\\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("meta-"):
keyinfo.meta = True
keydescr = keydescr[5:]
elif lkeyname.startswith("alt-"):
keyinfo.meta = True
keydescr = keydescr[4:]
elif lkeyname.startswith("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("Not a valid key: '%s'" % keydescr)
else:
keyinfo.char = keydescr
return keyinfo
if __name__ == "__main__":
import startup

View File

@ -0,0 +1,213 @@
# -*- coding: utf-8 -*-
# *****************************************************************************
# Copyright (C) 2003-2006 Gary Bishop.
# Copyright (C) 2006-2020 Jorgen Stenarson. <jorgen.stenarson@bostream.nu>
# Copyright (C) 2020 Bassem Girgis. <brgirgis@gmail.com>
#
# 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 KeyPress, make_KeyPress_from_keydescr, validkey
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: 'Cancel',
c32.Backspace: "BackSpace",
c32.Tab: "Tab",
c32.Clear: "Clear",
c32.Enter: "Return",
# c32.Shift: 'Shift_L',
# c32.Control: 'Control_L',
# c32.Menu: 'Alt_L',
c32.Pause: "Pause",
# c32.Capital: 'Caps_Lock',
c32.Escape: "Escape",
# c32.Space: 'space',
c32.PageUp: "Prior",
c32.PageDown: "Next",
c32.End: "End",
c32.Home: "Home",
c32.LeftArrow: "Left",
c32.UpArrow: "Up",
c32.RightArrow: "Right",
c32.DownArrow: "Down",
c32.Select: "Select",
c32.Print: "Print",
c32.Execute: "Execute",
# c32.Snapshot: 'Snapshot',
c32.Insert: "Insert",
c32.Delete: "Delete",
c32.Help: "Help",
c32.F1: "F1",
c32.F2: "F2",
c32.F3: "F3",
c32.F4: "F4",
c32.F5: "F5",
c32.F6: "F6",
c32.F7: "F7",
c32.F8: "F8",
c32.F9: "F9",
c32.F10: "F10",
c32.F11: "F11",
c32.F12: "F12",
c32.F13: "F13",
c32.F14: "F14",
c32.F15: "F15",
c32.F16: "F16",
c32.F17: "F17",
c32.F18: "F18",
c32.F19: "F19",
c32.F20: "F20",
c32.F21: "F21",
c32.F22: "F22",
c32.F23: "F23",
c32.F24: "F24",
# c32.Numlock: 'Num_Lock,',
# c32.Scroll: 'Scroll_Lock',
# c32.Apps: 'VK_APPS',
# c32.ProcesskeY: 'VK_PROCESSKEY',
# c32.Attn: 'VK_ATTN',
# c32.Crsel: 'VK_CRSEL',
# c32.Exsel: 'VK_EXSEL',
# c32.Ereof: 'VK_EREOF',
# c32.Play: 'VK_PLAY',
# c32.Zoom: 'VK_ZOOM',
# c32.Noname: 'VK_NONAME',
# c32.Pa1: 'VK_PA1',
c32.OemClear: "VK_OEM_CLEAR",
c32.NumPad0: "NUMPAD0",
c32.NumPad1: "NUMPAD1",
c32.NumPad2: "NUMPAD2",
c32.NumPad3: "NUMPAD3",
c32.NumPad4: "NUMPAD4",
c32.NumPad5: "NUMPAD5",
c32.NumPad6: "NUMPAD6",
c32.NumPad7: "NUMPAD7",
c32.NumPad8: "NUMPAD8",
c32.NumPad9: "NUMPAD9",
c32.Divide: "Divide",
c32.Multiply: "Multiply",
c32.Add: "Add",
c32.Subtract: "Subtract",
c32.Decimal: "VK_DECIMAL",
}
# function to handle the mapping
def make_keysym(keycode):
try:
sym = code2sym_map[keycode]
except KeyError:
sym = ""
return sym
sym2code_map = {}
for code, sym in code2sym_map.items():
sym2code_map[sym.lower()] = code
def key_text_to_keyinfo(keytext):
"""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('VkKeyScan("%s") = %x' % (char, vk))
raise ValueError("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 True:
lkeyname = keyname.lower()
if lkeyname.startswith("control-"):
control = True
keyname = keyname[8:]
elif lkeyname.startswith("ctrl-"):
control = True
keyname = keyname[5:]
elif lkeyname.startswith("meta-"):
meta = True
keyname = keyname[5:]
elif lkeyname.startswith("alt-"):
meta = True
keyname = keyname[4:]
elif lkeyname.startswith("shift-"):
shift = True
keyname = keyname[6:]
else:
if len(keyname) > 1:
return (control, meta, shift, sym2code_map.get(keyname.lower(), " "))
else:
return char_to_keyinfo(keyname, control, meta, shift)
def keyseq_to_keyinfo(keyseq):
res = []
control = False
meta = False
shift = False
while True:
if keyseq.startswith("\\C-"):
control = True
keyseq = keyseq[3:]
elif keyseq.startswith("\\M-"):
meta = True
keyseq = keyseq[3:]
elif keyseq.startswith("\\e"):
res.append(char_to_keyinfo("\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, "").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,138 @@
# -*- coding: utf-8 -*-
# *****************************************************************************
# Copyright (C) 2003-2006 Gary Bishop.
# Copyright (C) 2006-2020 Jorgen Stenarson. <jorgen.stenarson@bostream.nu>
# Copyright (C) 2020 Bassem Girgis. <brgirgis@gmail.com>
#
# Distributed under the terms of the BSD License. The full license is in
# the file COPYING, distributed as part of this software.
# *****************************************************************************
from ctypes import windll
from . import winconstants as c32
from .common import KeyPress
# table for translating virtual keys to X windows key symbols
code2sym_map = {
c32.VK_CANCEL: "cancel",
c32.VK_BACK: "backspace",
c32.VK_TAB: "tab",
c32.VK_CLEAR: "clear",
c32.VK_RETURN: "return",
c32.VK_SHIFT: "shift_l",
c32.VK_CONTROL: "control_l",
c32.VK_MENU: "alt_l",
c32.VK_PAUSE: "pause",
c32.VK_CAPITAL: "caps_lock",
c32.VK_ESCAPE: "escape",
c32.VK_SPACE: "space",
c32.VK_PRIOR: "prior",
c32.VK_NEXT: "next",
c32.VK_END: "end",
c32.VK_HOME: "home",
c32.VK_LEFT: "left",
c32.VK_UP: "up",
c32.VK_RIGHT: "right",
c32.VK_DOWN: "down",
c32.VK_SELECT: "select",
c32.VK_PRINT: "print",
c32.VK_EXECUTE: "execute",
c32.VK_SNAPSHOT: "snapshot",
c32.VK_INSERT: "insert",
c32.VK_DELETE: "delete",
c32.VK_HELP: "help",
c32.VK_F1: "f1",
c32.VK_F2: "f2",
c32.VK_F3: "f3",
c32.VK_F4: "f4",
c32.VK_F5: "f5",
c32.VK_F6: "f6",
c32.VK_F7: "f7",
c32.VK_F8: "f8",
c32.VK_F9: "f9",
c32.VK_F10: "f10",
c32.VK_F11: "f11",
c32.VK_F12: "f12",
c32.VK_F13: "f13",
c32.VK_F14: "f14",
c32.VK_F15: "f15",
c32.VK_F16: "f16",
c32.VK_F17: "f17",
c32.VK_F18: "f18",
c32.VK_F19: "f19",
c32.VK_F20: "f20",
c32.VK_F21: "f21",
c32.VK_F22: "f22",
c32.VK_F23: "f23",
c32.VK_F24: "f24",
c32.VK_NUMLOCK: "num_lock,",
c32.VK_SCROLL: "scroll_lock",
c32.VK_APPS: "vk_apps",
c32.VK_PROCESSKEY: "vk_processkey",
c32.VK_ATTN: "vk_attn",
c32.VK_CRSEL: "vk_crsel",
c32.VK_EXSEL: "vk_exsel",
c32.VK_EREOF: "vk_ereof",
c32.VK_PLAY: "vk_play",
c32.VK_ZOOM: "vk_zoom",
c32.VK_NONAME: "vk_noname",
c32.VK_PA1: "vk_pa1",
c32.VK_OEM_CLEAR: "vk_oem_clear",
c32.VK_NUMPAD0: "numpad0",
c32.VK_NUMPAD1: "numpad1",
c32.VK_NUMPAD2: "numpad2",
c32.VK_NUMPAD3: "numpad3",
c32.VK_NUMPAD4: "numpad4",
c32.VK_NUMPAD5: "numpad5",
c32.VK_NUMPAD6: "numpad6",
c32.VK_NUMPAD7: "numpad7",
c32.VK_NUMPAD8: "numpad8",
c32.VK_NUMPAD9: "numpad9",
c32.VK_DIVIDE: "divide",
c32.VK_MULTIPLY: "multiply",
c32.VK_ADD: "add",
c32.VK_SUBTRACT: "subtract",
c32.VK_DECIMAL: "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('VkKeyScan("%s") = %x' % (char, vk))
raise ValueError("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 = ""
out = KeyPress(char, shift, control, meta, keyname)
return out
if __name__ == "__main__":
import startup

View File

@ -0,0 +1,172 @@
# 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