<s> from __future__ import print_function , unicode_literals , absolute_import <EOL> try : <EOL> set <EOL> except NameError : <EOL> from sets import Set as set <EOL> from pyreadline . unicode_helper import ensure_unicode <EOL> validkey = set ( [ '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , <EOL> '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , <EOL> '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , <EOL> '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT:end>' , '<STR_LIT>' , <EOL> '<STR_LIT:left>' , '<STR_LIT>' , '<STR_LIT:right>' , '<STR_LIT>' , <EOL> '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , <EOL> '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , <EOL> '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , <EOL> '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , <EOL> '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , <EOL> '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , <EOL> '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , <EOL> '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , <EOL> '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , <EOL> '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , <EOL> '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , <EOL> '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , <EOL> '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , <EOL> '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , <EOL> '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ] ) <EOL> escape_sequence_to_special_key = { "<STR_LIT>" : "<STR_LIT>" , "<STR_LIT>" : "<STR_LIT>" , "<STR_LIT>" : "<STR_LIT>" } <EOL> class KeyPress ( object ) : <EOL> def __init__ ( self , char = "<STR_LIT>" , shift = False , control = False , meta = False , keyname = "<STR_LIT>" ) : <EOL> if control or meta or shift : <EOL> char = char . upper ( ) <EOL> self . info = dict ( char = char , <EOL> shift = shift , <EOL> control = control , <EOL> meta = meta , <EOL> keyname = keyname ) <EOL> def create ( name ) : <EOL> def get ( self ) : <EOL> return self . info [ name ] <EOL> def set ( self , value ) : <EOL> self . info [ name ] = value <EOL> return property ( get , set ) <EOL> char = create ( "<STR_LIT>" ) <EOL> shift = create ( "<STR_LIT>" ) <EOL> control = create ( "<STR_LIT>" ) <EOL> meta = create ( "<STR_LIT>" ) <EOL> keyname = create ( "<STR_LIT>" ) <EOL> def __repr__ ( self ) : <EOL> return "<STR_LIT>" % tuple ( map ( ensure_unicode , self . tuple ( ) ) ) <EOL> def tuple ( self ) : <EOL> if self . keyname : <EOL> return ( self . control , self . meta , self . shift , self . keyname ) <EOL> else : <EOL> if self . control or self . meta or self . shift : <EOL> return ( self . control , self . meta , self . shift , self . char . upper ( ) ) <EOL> else : <EOL> return ( self . control , self . meta , self . shift , self . char ) <EOL> def __eq__ ( self , other ) : <EOL> if isinstance ( other , KeyPress ) : <EOL> s = self . tuple ( ) <EOL> o = other . tuple ( ) <EOL> return s == o <EOL> else : <EOL> return False <EOL> def make_KeyPress_from_keydescr ( keydescr ) : <EOL> keyinfo = KeyPress ( ) <EOL> if len ( keydescr ) > <NUM_LIT:2> and keydescr [ : <NUM_LIT:1> ] == '<STR_LIT:">' and keydescr [ - <NUM_LIT:1> : ] == '<STR_LIT:">' : <EOL> keydescr = keydescr [ <NUM_LIT:1> : - <NUM_LIT:1> ] <EOL> while <NUM_LIT:1> : <EOL> lkeyname = keydescr . lower ( ) <EOL> if lkeyname . startswith ( '<STR_LIT>' ) : <EOL> keyinfo . control = True <EOL> keydescr = keydescr [ <NUM_LIT:8> : ] <EOL> elif lkeyname . startswith ( '<STR_LIT>' ) : <EOL> keyinfo . control = True <EOL> keydescr = keydescr [ <NUM_LIT:5> : ] <EOL> elif keydescr . lower ( ) . startswith ( '<STR_LIT>' ) : <EOL> keyinfo . control = True <EOL> keydescr = keydescr [ <NUM_LIT:3> : ] <EOL> elif keydescr . lower ( ) . startswith ( '<STR_LIT>' ) : <EOL> keyinfo . meta = True <EOL> keydescr = keydescr [ <NUM_LIT:3> : ] <EOL> elif keydescr in escape_sequence_to_special_key : <EOL> keydescr = escape_sequence_to_special_key [ keydescr ] <EOL> elif lkeyname . startswith ( '<STR_LIT>' ) : <EOL> keyinfo . meta = True <EOL> keydescr = keydescr [ <NUM_LIT:5> : ] <EOL> elif lkeyname . startswith ( '<STR_LIT>' ) : <EOL> keyinfo . meta = True <EOL> keydescr = keydescr [ <NUM_LIT:4> : ] <EOL> elif lkeyname . startswith ( '<STR_LIT>' ) : <EOL> keyinfo . shift = True <EOL> keydescr = keydescr [ <NUM_LIT:6> : ] <EOL> else : <EOL> if len ( keydescr ) > <NUM_LIT:1> : <EOL> if keydescr . strip ( ) . lower ( ) in validkey : <EOL> keyinfo . keyname = keydescr . strip ( ) . lower ( ) <EOL> keyinfo . char = "<STR_LIT>" <EOL> else : <EOL> raise IndexError ( "<STR_LIT>" % keydescr ) <EOL> else : <EOL> keyinfo . char = keydescr <EOL> return keyinfo <EOL> if __name__ == "<STR_LIT:__main__>" : <EOL> import startup </s>
