def __init__(self, engine, delay, layout): self.__engine = engine self.__delay = delay # Delay for non-shift keys in milliseconds (mainly for Nicola layout) self.MODIFIERS = (keysyms.Shift_L, keysyms.Shift_R, keysyms.Control_L, keysyms.Control_R, keysyms.Alt_L, keysyms.Alt_R) # Set to the default values self.__OnOffByCaps = True # or False self.__SandS = False # True if SandS is used self.__Henkan = keysyms.space # or keysyms.Henkan self.__Muhenkan = keysyms.VoidSymbol # or keysyms.Muhenkan self.__Eisuu = keysyms.VoidSymbol # or keysyms.Eisu_toggle self.__Kana = keysyms.Control_R # or keysyms.Hiragana_Katakana, keysyms.Control_R self.__Space = keysyms.Shift_R # Extra space key in Kana mode self.__Prefix = False # True if Shift is to be prefixed self.__HasYen = False self.__DualBits = bits.Dual_ShiftL_Bit if "Keyboard" in layout: keyboard = layout["Keyboard"] if keyboard == "109": self.__Henkan = keysyms.VoidSymbol self.__Muhenkan = keysyms.VoidSymbol self.__Kana = keysyms.Hiragana_Katakana self.__Eisuu = keysyms.Eisu_toggle self.__Space = keysyms.VoidSymbol if "OnOffByCaps" in layout: self.__OnOffByCaps = layout["OnOffByCaps"] if "HasYen" in layout: self.__HasYen = layout["HasYen"] if "SandS" in layout: self.__SandS = layout["SandS"] if self.__SandS: self.__DualBits |= bits.Dual_Space_Bit elif "Prefix" in layout: self.__Prefix = layout["Prefix"] if self.__Prefix: self.__DualBits |= bits.Dual_Space_Bit if "Space" in layout: self.__Space = IBus.keyval_from_name(layout["Space"]) if "Henkan" in layout: self.__Henkan = IBus.keyval_from_name(layout["Henkan"]) if "Muhenkan" in layout: self.__Muhenkan = IBus.keyval_from_name(layout["Muhenkan"]) # Check dual role modifiers for k in (self.__Henkan, self.__Muhenkan, self.__Kana, self.__Space): if k in self.MODIFIERS: self.__DualBits |= bits.Dual_ShiftL_Bit << self.MODIFIERS.index( k) # Current event self.__keyval = keysyms.VoidSymbol self.__keycode = 0 self.reset()
def __init__(self, engine, delay, layout): self._engine = engine self._delay = delay # Delay for non-shift keys in milliseconds (mainly for Nicola layout) # Set to the default values self._OnOffByCaps = True # or False self._SandS = False # True if SandS is used self._Henkan = keysyms.VoidSymbol # or keysyms.Henkan, keysyms.space self._Muhenkan = keysyms.VoidSymbol # or keysyms.Muhenkan self._Eisuu = keysyms.VoidSymbol # or keysyms.Eisu_toggle self._Kana = keysyms.VoidSymbol # or keysyms.Hiragana_Katakana, keysyms.Control_R self._Space = keysyms.VoidSymbol # Extra space key self._Shrink = keysyms.VoidSymbol self._Prefix = False # True if Shift is to be prefixed self._HasYen = False self._DualBits = DUAL_SHIFT_L_BIT if layout.get("Keyboard") == "109": self._Kana = keysyms.Hiragana_Katakana self._Eisuu = keysyms.Eisu_toggle self._OnOffByCaps = layout.get("OnOffByCaps", self._OnOffByCaps) self._HasYen = layout.get("HasYen", self._HasYen) self._SandS = layout.get("SandS", False) if self._SandS: self._DualBits |= DUAL_SPACE_BIT else: self._Prefix = layout.get("Prefix", False) if self._Prefix: self._DualBits |= DUAL_SPACE_BIT if "Space" in layout: self._Space = IBus.keyval_from_name(layout["Space"]) if "Henkan" in layout: self._Henkan = IBus.keyval_from_name(layout["Henkan"]) if "Muhenkan" in layout: self._Muhenkan = IBus.keyval_from_name(layout["Muhenkan"]) if "Katakana" in layout: self._Kana = IBus.keyval_from_name(layout["Katakana"]) if "Shrink" in layout: self._Shrink = IBus.keyval_from_name(layout["Shrink"]) # Check dual role modifiers self._capture_alt_r = False for k in (self._Henkan, self._Muhenkan, self._Kana, self._Space, self._Shrink): if k in MODIFIERS: self._DualBits |= DUAL_SHIFT_L_BIT << MODIFIERS.index(k) if k == keysyms.Alt_R: self._capture_alt_r = True # Current event self._keyval = keysyms.VoidSymbol self._keycode = 0 self.reset()
def __s_to_key_raw(self, s): keyval = IBus.keyval_from_name(s.split('+')[-1]) s = s.lower() state = ('shift+' in s and IBus.ModifierType.SHIFT_MASK or 0) | ( 'ctrl+' in s and IBus.ModifierType.CONTROL_MASK or 0) | ('alt+' in s and IBus.ModifierType.MOD1_MASK or 0) return (keyval, state)
def __s_to_key_raw(self, s): keyval = IBus.keyval_from_name(s.split('+')[-1]) s = s.lower() state = ('shift+' in s and IBus.ModifierType.SHIFT_MASK or 0) | ( 'ctrl+' in s and IBus.ModifierType.CONTROL_MASK or 0) | ( 'alt+' in s and IBus.ModifierType.MOD1_MASK or 0) return (keyval, state)
def keybinding_to_keyevent(keybinding): name = keybinding.split('+')[-1] keyval = IBus.keyval_from_name(name) state = 0 if 'Shift+' in keybinding: state |= IBus.ModifierType.SHIFT_MASK if 'Lock+' in keybinding: state |= IBus.ModifierType.LOCK_MASK if 'Control+' in keybinding: state |= IBus.ModifierType.CONTROL_MASK if 'Super+' in keybinding: state |= IBus.ModifierType.SUPER_MASK if 'Hyper+' in keybinding: state |= IBus.ModifierType.HYPER_MASK if 'Meta+' in keybinding: state |= IBus.ModifierType.META_MASK if 'Mod1+' in keybinding: state |= IBus.ModifierType.MOD1_MASK if 'Mod2+' in keybinding: state |= IBus.ModifierType.MOD2_MASK if 'Mod3+' in keybinding: state |= IBus.ModifierType.MOD3_MASK if 'Mod4+' in keybinding: state |= IBus.ModifierType.MOD4_MASK if 'Mod5+' in keybinding: state |= IBus.ModifierType.MOD5_MASK return KeyEvent(keyval, 0, state)
def set_default_settings(): global ENGINE global TABSQLITEDB ENGINE.set_input_mode(mode=1) chinese_mode = 4 language_filter = TABSQLITEDB.ime_properties.get('language_filter') if language_filter in ('cm0', 'cm1', 'cm2', 'cm3', 'cm4'): chinese_mode = int(language_filter[-1]) ENGINE.set_chinese_mode(mode=chinese_mode) letter_width_mode = False def_full_width_letter = TABSQLITEDB.ime_properties.get( 'def_full_width_letter') if def_full_width_letter: letter_width_mode = (def_full_width_letter.lower() == u'true') ENGINE.set_letter_width(mode=False, input_mode=0) ENGINE.set_letter_width(mode=letter_width_mode, input_mode=1) punctuation_width_mode = False def_full_width_punct = TABSQLITEDB.ime_properties.get( 'def_full_width_punct') if def_full_width_punct: punctuation_width_mode = (def_full_width_punct.lower() == u'true') ENGINE.set_punctuation_width(mode=False, input_mode=0) ENGINE.set_punctuation_width(mode=punctuation_width_mode, input_mode=1) always_show_lookup_mode = True always_show_lookup = TABSQLITEDB.ime_properties.get('always_show_lookup') if always_show_lookup: always_show_lookup_mode = (always_show_lookup.lower() == u'true') ENGINE.set_always_show_lookup(always_show_lookup_mode) orientation = TABSQLITEDB.get_orientation() ENGINE.set_lookup_table_orientation(orientation) page_size = 6 select_keys_csv = TABSQLITEDB.ime_properties.get('select_keys') # select_keys_csv is something like: "1,2,3,4,5,6,7,8,9,0" if select_keys_csv: page_size = len(select_keys_csv.split(",")) ENGINE.set_page_size(page_size) onechar = False ENGINE.set_onechar_mode(onechar) auto_select_mode = False auto_select = TABSQLITEDB.ime_properties.get('auto_select') if auto_select: auto_select_mode = (auto_select.lower() == u'true') ENGINE.set_autoselect_mode(auto_select_mode) auto_commit_mode = False auto_commit = TABSQLITEDB.ime_properties.get('auto_commit') if auto_commit: auto_commit_mode = (auto_commit.lower() == u'true') ENGINE.set_autocommit_mode(auto_commit_mode) space_key_behavior_mode = False # if space is a page down key, set the option # “spacekeybehavior” to “True”: page_down_keys_csv = TABSQLITEDB.ime_properties.get('page_down_keys') if page_down_keys_csv: page_down_keys = [ IBus.keyval_from_name(x) for x in page_down_keys_csv.split(',') ] if IBus.KEY_space in page_down_keys: space_key_behavior_mode = True # if space is a commit key, set the option # “spacekeybehavior” to “False” (overrides if space is # also a page down key): commit_keys_csv = TABSQLITEDB.ime_properties.get('commit_keys') if commit_keys_csv: commit_keys = [ IBus.keyval_from_name(x) for x in commit_keys_csv.split(',') ] if IBus.KEY_space in commit_keys: space_key_behavior_mode = False ENGINE.set_space_key_behavior_mode(space_key_behavior_mode) auto_wildcard_mode = True auto_wildcard = TABSQLITEDB.ime_properties.get('auto_wildcard') if auto_wildcard: auto_wildcard_mode = (auto_wildcard.lower() == u'true') ENGINE.set_autowildcard_mode(auto_wildcard_mode) single_wildcard_char = TABSQLITEDB.ime_properties.get( 'single_wildcard_char') if not single_wildcard_char: single_wildcard_char = u'' if len(single_wildcard_char) > 1: single_wildcard_char = single_wildcard_char[0] ENGINE.set_single_wildcard_char(single_wildcard_char) multi_wildcard_char = TABSQLITEDB.ime_properties.get('multi_wildcard_char') if not multi_wildcard_char: multi_wildcard_char = u'' if len(multi_wildcard_char) > 1: multi_wildcard_char = multi_wildcard_char[0] ENGINE.set_multi_wildcard_char(multi_wildcard_char) ENGINE.set_pinyin_mode(False) ENGINE.set_suggestion_mode(False)
def set_default_settings(): global ENGINE global TABSQLITEDB ENGINE.set_input_mode(mode=1) chinese_mode = 4 language_filter = TABSQLITEDB.ime_properties.get('language_filter') if language_filter in ('cm0', 'cm1', 'cm2', 'cm3', 'cm4'): chinese_mode = int(language_filter[-1]) ENGINE.set_chinese_mode(mode=chinese_mode) letter_width_mode = False def_full_width_letter = TABSQLITEDB.ime_properties.get( 'def_full_width_letter') if def_full_width_letter: letter_width_mode = (def_full_width_letter.lower() == u'true') ENGINE.set_letter_width(mode=False, input_mode=0) ENGINE.set_letter_width(mode=letter_width_mode, input_mode=1) punctuation_width_mode = False def_full_width_punct = TABSQLITEDB.ime_properties.get( 'def_full_width_punct') if def_full_width_punct: punctuation_width_mode = (def_full_width_punct.lower() == u'true') ENGINE.set_punctuation_width(mode=False, input_mode=0) ENGINE.set_punctuation_width(mode=punctuation_width_mode, input_mode=1) always_show_lookup_mode = True always_show_lookup = TABSQLITEDB.ime_properties.get( 'always_show_lookup') if always_show_lookup: always_show_lookup_mode = (always_show_lookup.lower() == u'true') ENGINE.set_always_show_lookup(always_show_lookup_mode) orientation = TABSQLITEDB.get_orientation() ENGINE.set_lookup_table_orientation(orientation) page_size = 6 select_keys_csv = TABSQLITEDB.ime_properties.get('select_keys') # select_keys_csv is something like: "1,2,3,4,5,6,7,8,9,0" if select_keys_csv: page_size = len(select_keys_csv.split(",")) ENGINE.set_page_size(page_size) onechar = False ENGINE.set_onechar_mode(onechar) auto_select_mode = False auto_select = TABSQLITEDB.ime_properties.get('auto_select') if auto_select: auto_select_mode = (auto_select.lower() == u'true') ENGINE.set_autoselect_mode(auto_select_mode) auto_commit_mode = False auto_commit = TABSQLITEDB.ime_properties.get('auto_commit') if auto_commit: auto_commit_mode = (auto_commit.lower() == u'true') ENGINE.set_autocommit_mode(auto_commit_mode) space_key_behavior_mode = False # if space is a page down key, set the option # “spacekeybehavior” to “True”: page_down_keys_csv = TABSQLITEDB.ime_properties.get( 'page_down_keys') if page_down_keys_csv: page_down_keys = [ IBus.keyval_from_name(x) for x in page_down_keys_csv.split(',')] if IBus.KEY_space in page_down_keys: space_key_behavior_mode = True # if space is a commit key, set the option # “spacekeybehavior” to “False” (overrides if space is # also a page down key): commit_keys_csv = TABSQLITEDB.ime_properties.get('commit_keys') if commit_keys_csv: commit_keys = [ IBus.keyval_from_name(x) for x in commit_keys_csv.split(',')] if IBus.KEY_space in commit_keys: space_key_behavior_mode = False ENGINE.set_space_key_behavior_mode(space_key_behavior_mode) auto_wildcard_mode = True auto_wildcard = TABSQLITEDB.ime_properties.get('auto_wildcard') if auto_wildcard: auto_wildcard_mode = (auto_wildcard.lower() == u'true') ENGINE.set_autowildcard_mode(auto_wildcard_mode) single_wildcard_char = TABSQLITEDB.ime_properties.get( 'single_wildcard_char') if not single_wildcard_char: single_wildcard_char = u'' if len(single_wildcard_char) > 1: single_wildcard_char = single_wildcard_char[0] ENGINE.set_single_wildcard_char(single_wildcard_char) multi_wildcard_char = TABSQLITEDB.ime_properties.get( 'multi_wildcard_char') if not multi_wildcard_char: multi_wildcard_char = u'' if len(multi_wildcard_char) > 1: multi_wildcard_char = multi_wildcard_char[0] ENGINE.set_multi_wildcard_char(multi_wildcard_char)
def get_default_options_from_database(self): ''' If there are default options in the database, they override the defaults from Gsettings. ''' self.tabsqlitedb = tabsqlitedb.TabSqliteDb( filename=os.path.join( DB_DIR, re.sub(r'^table:', '', self.__engine_name)+'.db'), user_db=None, create_database=False) self.__is_chinese = False self.__is_cjk = False languages = self.tabsqlitedb.ime_properties.get('languages') if languages: languages = languages.split(',') for language in languages: if language.strip().startswith('zh'): self.__is_chinese = True for lang in ['zh', 'ja', 'ko']: if language.strip().startswith(lang): self.__is_cjk = True self.__user_can_define_phrase = False user_can_define_phrase = self.tabsqlitedb.ime_properties.get( 'user_can-define_phrase') if user_can_define_phrase: self.__user_can_define_phrase = ( user_can_define_phrase.lower() == u'true') self.__rules = self.tabsqlitedb.ime_properties.get('rules') language_filter = self.tabsqlitedb.ime_properties.get( 'language_filter') if language_filter in ('cm0', 'cm1', 'cm2', 'cm3', 'cm4'): OPTION_DEFAULTS['chinesemode'] = int(language_filter[-1]) def_full_width_punct = self.tabsqlitedb.ime_properties.get( 'def_full_width_punct') if (def_full_width_punct and type(def_full_width_punct) == type(u'') and def_full_width_punct.lower() in [u'true', u'false']): OPTION_DEFAULTS['tabdeffullwidthpunct'] = ( def_full_width_punct.lower() == u'true') OPTION_DEFAULTS['endeffullwidthpunct'] = ( def_full_width_punct.lower() == u'true') def_full_width_letter = self.tabsqlitedb.ime_properties.get( 'def_full_width_letter') if (def_full_width_letter and type(def_full_width_letter) == type(u'') and def_full_width_letter.lower() in [u'true', u'false']): OPTION_DEFAULTS['tabdeffullwidthletter'] = ( def_full_width_letter.lower() == u'true') OPTION_DEFAULTS['endeffullwidthletter'] = ( def_full_width_letter.lower() == u'true') always_show_lookup = self.tabsqlitedb.ime_properties.get( 'always_show_lookup') if (always_show_lookup and type(always_show_lookup) == type(u'') and always_show_lookup.lower() in [u'true', u'false']): OPTION_DEFAULTS['alwaysshowlookup'] = ( always_show_lookup.lower() == u'true') select_keys_csv = self.tabsqlitedb.ime_properties.get('select_keys') if select_keys_csv: # select_keys_csv is something like: "1,2,3,4,5,6,7,8,9,0" OPTION_DEFAULTS['lookuptablepagesize'] = len( select_keys_csv.split(",")) auto_select = self.tabsqlitedb.ime_properties.get('auto_select') if (auto_select and type(auto_select) == type(u'') and auto_select.lower() in [u'true', u'false']): OPTION_DEFAULTS['autoselect'] = auto_select.lower() == u'true' auto_commit = self.tabsqlitedb.ime_properties.get('auto_commit') if (auto_commit and type(auto_commit) == type(u'') and auto_commit.lower() in [u'true', u'false']): OPTION_DEFAULTS['autocommit'] = auto_commit.lower() == u'true' orientation = self.tabsqlitedb.get_orientation() OPTION_DEFAULTS['lookuptableorientation'] = orientation # if space is a page down key, set the option # “spacekeybehavior” to “True”: page_down_keys_csv = self.tabsqlitedb.ime_properties.get( 'page_down_keys') if page_down_keys_csv: self._page_down_keys = [ IBus.keyval_from_name(x) for x in page_down_keys_csv.split(',')] if IBus.KEY_space in self._page_down_keys: OPTION_DEFAULTS['spacekeybehavior'] = True # if space is a commit key, set the option # “spacekeybehavior” to “False” (overrides if space is # also a page down key): commit_keys_csv = self.tabsqlitedb.ime_properties.get('commit_keys') if commit_keys_csv: self._commit_keys = [ IBus.keyval_from_name(x) for x in commit_keys_csv.split(',')] if IBus.KEY_space in self._commit_keys: OPTION_DEFAULTS['spacekeybehavior'] = False auto_wildcard = self.tabsqlitedb.ime_properties.get('auto_wildcard') if (auto_wildcard and type(auto_wildcard) == type(u'') and auto_wildcard.lower() in [u'true', u'false']): OPTION_DEFAULTS['autowildcard'] = auto_wildcard.lower() == u'true' single_wildcard_char = self.tabsqlitedb.ime_properties.get( 'single_wildcard_char') if (single_wildcard_char and type(single_wildcard_char) == type(u'')): if len(single_wildcard_char) > 1: single_wildcard_char = single_wildcard_char[0] OPTION_DEFAULTS['singlewildcardchar'] = single_wildcard_char multi_wildcard_char = self.tabsqlitedb.ime_properties.get( 'multi_wildcard_char') if (multi_wildcard_char and type(multi_wildcard_char) == type(u'')): if len(multi_wildcard_char) > 1: multi_wildcard_char = multi_wildcard_char[0] OPTION_DEFAULTS['multiwildcardchar'] = multi_wildcard_char