m2m模型翻译
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

128 lines
5.0 KiB

# -*- 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
from __future__ import print_function, unicode_literals, absolute_import
try:
set
except NameError:
from sets import Set as set
from pyreadline.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 1:
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