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.

127 lines
5.0 KiB

6 months ago
  1. # -*- coding: utf-8 -*-
  2. #*****************************************************************************
  3. # Copyright (C) 2003-2006 Gary Bishop.
  4. # Copyright (C) 2006 Jorgen Stenarson. <jorgen.stenarson@bostream.nu>
  5. #
  6. # Distributed under the terms of the BSD License. The full license is in
  7. # the file COPYING, distributed as part of this software.
  8. #*****************************************************************************
  9. # table for translating virtual keys to X windows key symbols
  10. from __future__ import print_function, unicode_literals, absolute_import
  11. try:
  12. set
  13. except NameError:
  14. from sets import Set as set
  15. from pyreadline.unicode_helper import ensure_unicode
  16. validkey =set(['cancel', 'backspace', 'tab', 'clear',
  17. 'return', 'shift_l', 'control_l', 'alt_l',
  18. 'pause', 'caps_lock', 'escape', 'space',
  19. 'prior', 'next', 'end', 'home',
  20. 'left', 'up', 'right', 'down',
  21. 'select', 'print', 'execute', 'snapshot',
  22. 'insert', 'delete', 'help', 'f1',
  23. 'f2', 'f3', 'f4', 'f5',
  24. 'f6', 'f7', 'f8', 'f9',
  25. 'f10', 'f11', 'f12', 'f13',
  26. 'f14', 'f15', 'f16', 'f17',
  27. 'f18', 'f19', 'f20', 'f21',
  28. 'f22', 'f23', 'f24', 'num_lock',
  29. 'scroll_lock', 'vk_apps', 'vk_processkey','vk_attn',
  30. 'vk_crsel', 'vk_exsel', 'vk_ereof', 'vk_play',
  31. 'vk_zoom', 'vk_noname', 'vk_pa1', 'vk_oem_clear',
  32. 'numpad0', 'numpad1', 'numpad2', 'numpad3',
  33. 'numpad4', 'numpad5', 'numpad6', 'numpad7',
  34. 'numpad8', 'numpad9', 'divide', 'multiply',
  35. 'add', 'subtract', 'vk_decimal'])
  36. escape_sequence_to_special_key = {"\\e[a" : "up", "\\e[b" : "down", "del" : "delete"}
  37. class KeyPress(object):
  38. def __init__(self, char="", shift=False, control=False, meta=False, keyname=""):
  39. if control or meta or shift:
  40. char = char.upper()
  41. self.info = dict(char=char,
  42. shift=shift,
  43. control=control,
  44. meta=meta,
  45. keyname=keyname)
  46. def create(name):
  47. def get(self):
  48. return self.info[name]
  49. def set(self, value):
  50. self.info[name] = value
  51. return property(get, set)
  52. char = create("char")
  53. shift = create("shift")
  54. control = create("control")
  55. meta = create("meta")
  56. keyname = create("keyname")
  57. def __repr__(self):
  58. return "(%s,%s,%s,%s)"%tuple(map(ensure_unicode, self.tuple()))
  59. def tuple(self):
  60. if self.keyname:
  61. return (self.control, self.meta, self.shift, self.keyname)
  62. else:
  63. if self.control or self.meta or self.shift:
  64. return (self.control, self.meta, self.shift, self.char.upper())
  65. else:
  66. return (self.control, self.meta, self.shift, self.char)
  67. def __eq__(self, other):
  68. if isinstance(other, KeyPress):
  69. s = self.tuple()
  70. o = other.tuple()
  71. return s == o
  72. else:
  73. return False
  74. def make_KeyPress_from_keydescr(keydescr):
  75. keyinfo = KeyPress()
  76. if len(keydescr) > 2 and keydescr[:1] == '"' and keydescr[-1:] == '"':
  77. keydescr = keydescr[1:-1]
  78. while 1:
  79. lkeyname = keydescr.lower()
  80. if lkeyname.startswith('control-'):
  81. keyinfo.control = True
  82. keydescr = keydescr[8:]
  83. elif lkeyname.startswith('ctrl-'):
  84. keyinfo.control = True
  85. keydescr = keydescr[5:]
  86. elif keydescr.lower().startswith('\\c-'):
  87. keyinfo.control = True
  88. keydescr = keydescr[3:]
  89. elif keydescr.lower().startswith('\\m-'):
  90. keyinfo.meta = True
  91. keydescr = keydescr[3:]
  92. elif keydescr in escape_sequence_to_special_key:
  93. keydescr = escape_sequence_to_special_key[keydescr]
  94. elif lkeyname.startswith('meta-'):
  95. keyinfo.meta = True
  96. keydescr = keydescr[5:]
  97. elif lkeyname.startswith('alt-'):
  98. keyinfo.meta = True
  99. keydescr = keydescr[4:]
  100. elif lkeyname.startswith('shift-'):
  101. keyinfo.shift = True
  102. keydescr = keydescr[6:]
  103. else:
  104. if len(keydescr) > 1:
  105. if keydescr.strip().lower() in validkey:
  106. keyinfo.keyname = keydescr.strip().lower()
  107. keyinfo.char = ""
  108. else:
  109. raise IndexError("Not a valid key: '%s'"%keydescr)
  110. else:
  111. keyinfo.char = keydescr
  112. return keyinfo
  113. if __name__ == "__main__":
  114. import startup