diff options
author | Hideaki ABE <abe.sendai@gmail.com> | 2009-06-09 11:04:08 +0900 |
---|---|---|
committer | Hideaki ABE <abe.sendai@gmail.com> | 2009-06-09 11:04:08 +0900 |
commit | 98e56a85635cdbe2d02c681c2e3b04c06f8a2027 (patch) | |
tree | 22eb1bddd59646e208bdc09a2554080b5d253874 | |
parent | e9c356983cf3e06ad3c67392ca558b221f119257 (diff) | |
download | ibus-anthy-98e56a85635cdbe2d02c681c2e3b04c06f8a2027.tar.gz |
Implimented some inner command, checked mode on all inner command
-rw-r--r-- | engine/engine.py | 254 | ||||
-rw-r--r-- | setup/anthyprefs.py | 155 |
2 files changed, 272 insertions, 137 deletions
diff --git a/engine/engine.py b/engine/engine.py index 9f241ad..258cfa2 100644 --- a/engine/engine.py +++ b/engine/engine.py @@ -56,7 +56,8 @@ CONV_MODE_LATIN_3, \ CONV_MODE_WIDE_LATIN_0, \ CONV_MODE_WIDE_LATIN_1, \ CONV_MODE_WIDE_LATIN_2, \ -CONV_MODE_WIDE_LATIN_3 = range(13) +CONV_MODE_WIDE_LATIN_3, \ +CONV_MODE_PREDICTION = range(14) KP_Table = {} for k, v in zip(['KP_Add', 'KP_Decimal', 'KP_Divide', 'KP_Enter', 'KP_Equal', @@ -217,7 +218,8 @@ class Engine(ibus.EngineBase): def cursor_up(self): # only process cursor down in convert mode - if self.__convert_mode != CONV_MODE_ANTHY: +# if self.__convert_mode != CONV_MODE_ANTHY: + if self.__convert_mode != CONV_MODE_ANTHY and self.__convert_mode != CONV_MODE_PREDICTION: return False if not self.__lookup_table.cursor_up(): @@ -231,7 +233,8 @@ class Engine(ibus.EngineBase): def cursor_down(self): # only process cursor down in convert mode - if self.__convert_mode != CONV_MODE_ANTHY: +# if self.__convert_mode != CONV_MODE_ANTHY: + if self.__convert_mode != CONV_MODE_ANTHY and self.__convert_mode != CONV_MODE_PREDICTION: return False if not self.__lookup_table.cursor_down(): @@ -472,6 +475,19 @@ class Engine(ibus.EngineBase): self.__end_anthy_convert() def __fill_lookup_table(self): + if self.__convert_mode == CONV_MODE_PREDICTION: + seg_stat = anthy.anthy_prediction_stat() + self.__context.get_prediction_stat(seg_stat) + + # fill lookup_table + self.__lookup_table.clean() + for i in xrange(0, seg_stat.nr_prediction): + buf = self.__context.get_prediction(i) + candidate = unicode(buf, "utf-8") + self.__lookup_table.append_candidate(ibus.Text(candidate)) + + return + # get segment stat seg_stat = anthy.anthy_segment_stat() self.__context.get_segment_stat(self.__cursor_pos, seg_stat) @@ -519,7 +535,8 @@ class Engine(ibus.EngineBase): self.__lookup_table_visible) def __update_convert_chars(self): - if self.__convert_mode == CONV_MODE_ANTHY: +# if self.__convert_mode == CONV_MODE_ANTHY: + if self.__convert_mode == CONV_MODE_ANTHY or self.__convert_mode == CONV_MODE_PREDICTION: self.__update_anthy_convert_chars() return if self.__convert_mode == CONV_MODE_HIRAGANA: @@ -615,6 +632,9 @@ class Engine(ibus.EngineBase): for seg_index, text in self.__segments: self.__context.commit_segment(i, seg_index) self.__commit_string(self.__convert_chars) + elif self.__convert_mode == CONV_MODE_PREDICTION: + self.__context.commit_prediction(self.__segments[0][0]) + self.__commit_string(self.__convert_chars) else: self.__commit_string(self.__convert_chars) @@ -998,9 +1018,31 @@ class Engine(ibus.EngineBase): return True return False - #mode_keys + def _chk_mode(self, mode): + if '0' in mode and self.__preedit_ja_string.is_empty(): + return True + + if self.__convert_mode == CONV_MODE_OFF: + if '1' in mode and not self.__preedit_ja_string.is_empty(): + return True + elif self.__convert_mode == CONV_MODE_ANTHY: + if '2' in mode and not self.__lookup_table_visible: + return True + elif self.__convert_mode == CONV_MODE_PREDICTION: + if '3' in mode and not self.__lookup_table_visible: + return True + else: + if '4' in mode: + return True + + if '5' in mode and self.__lookup_table_visible: + return True + + return False + + #mod_keys def __set_input_mode(self, mode): - if not self.__preedit_ja_string.is_empty(): + if not self._chk_mode('0'): return False self.__input_mode_activate(mode, ibus.PROP_STATE_CHECKED) @@ -1048,11 +1090,11 @@ class Engine(ibus.EngineBase): def __cmd_half_katakana(self, keyval, state): return self.__set_input_mode(u'InputMode.HalfWidthKatakana') - def __cmd_cancel_pseudo_ascii_mode_key(self, keyval, state): - pass +# def __cmd_cancel_pseudo_ascii_mode_key(self, keyval, state): +# pass def __cmd_circle_typing_method(self, keyval, state): - if not self.__preedit_ja_string.is_empty(): + if not self._chk_mode('0'): return False modes = { @@ -1079,12 +1121,18 @@ class Engine(ibus.EngineBase): return self.__cmd_insert_wide_space(keyval, state) def __cmd_insert_half_space(self, keyval, state): + if not self._chk_mode('0'): + return False + if not self.__preedit_ja_string.is_empty(): return False self.__commit_string(unichr(keysyms.space)) return True def __cmd_insert_wide_space(self, keyval, state): + if not self._chk_mode('0'): + return False + if not self.__preedit_ja_string.is_empty(): return False char = unichr(keysyms.space) @@ -1095,31 +1143,65 @@ class Engine(ibus.EngineBase): return True def __cmd_backspace(self, keyval, state): + if not self._chk_mode('12345'): + return False + return self.__on_key_back_space() def __cmd_delete(self, keyval, state): + if not self._chk_mode('12345'): + return False + return self.__on_key_delete() def __cmd_commit(self, keyval, state): + if not self._chk_mode('12345'): + return False + return self.__on_key_return() def __cmd_convert(self, keyval, state): - if self.__preedit_ja_string.is_empty() or \ - self.__input_mode != INPUT_MODE_HIRAGANA: + if not self._chk_mode('14'): return False - if self.__convert_mode != CONV_MODE_ANTHY: - self.__begin_anthy_convert() - self.__invalidate() - elif self.__convert_mode == CONV_MODE_ANTHY: - self.__lookup_table_visible = True - self.cursor_down() + + self.__begin_anthy_convert() + self.__invalidate() + return True def __cmd_predict(self, keyval, state): - pass + if not self._chk_mode('14'): + return False + + text, cursor = self.__preedit_ja_string.get_hiragana(True) + + self.__context.set_prediction_string(text.encode("utf8")) + ps = anthy.anthy_prediction_stat() + self.__context.get_prediction_stat(ps) + +# for i in range(ps.nr_prediction): +# print self.__context.get_prediction(i) + + buf = self.__context.get_prediction(0) + if not buf: + return False + + text = unicode(buf, "utf-8") + self.__segments.append((0, text)) + + self.__convert_mode = CONV_MODE_PREDICTION + self.__cursor_pos = 0 + self.__fill_lookup_table() + self.__lookup_table_visible = False + self.__invalidate() + + return True def __cmd_cancel(self, keyval, state): - if self.__preedit_ja_string.is_empty(): + return self.__cmd_cancel_all(keyval, state) + + def __cmd_cancel_all(self, keyval, state): + if not self._chk_mode('12345'): return False if self.__convert_mode == CONV_MODE_OFF: @@ -1129,21 +1211,15 @@ class Engine(ibus.EngineBase): self.__invalidate() return True - def __cmd_cancel_all(self, keyval, state): - return self.__cmd_cancel(keyval, state) - def __cmd_reconvert(self, keyval, state): pass - def __cmd_do_nothing(self, keyval, state): - return True +# def __cmd_do_nothing(self, keyval, state): +# return True #caret_keys def __move_caret(self, i): - if self.__lookup_table_visible: - return False - - if self.__preedit_ja_string.is_empty(): + if not self._chk_mode('1'): return False if self.__convert_mode == CONV_MODE_OFF: @@ -1170,14 +1246,9 @@ class Engine(ibus.EngineBase): #segments_keys def __select_segment(self, i): - if self.__preedit_ja_string.is_empty(): + if not self._chk_mode('25'): return False - if self.__convert_mode == CONV_MODE_OFF: - return False - elif self.__convert_mode != CONV_MODE_ANTHY: - return True - pos = 0 if i == 0 else \ self.__cursor_pos + i if i in [-1, 1] else \ len(self.__segments) - 1 @@ -1191,15 +1262,9 @@ class Engine(ibus.EngineBase): return True def __cmd_select_first_segment(self, keyval, state): - if self.__lookup_table_visible: - return False - return self.__select_segment(0) def __cmd_select_last_segment(self, keyval, state): - if self.__lookup_table_visible: - return False - return self.__select_segment(2) def __cmd_select_next_segment(self, keyval, state): @@ -1209,11 +1274,17 @@ class Engine(ibus.EngineBase): return self.__select_segment(-1) def __cmd_shrink_segment(self, keyval, state): + if not self._chk_mode('25'): + return False + if self.__convert_mode == CONV_MODE_ANTHY: self.__shrink_segment(-1) return True def __cmd_expand_segment(self, keyval, state): + if not self._chk_mode('25'): + return False + if self.__convert_mode == CONV_MODE_ANTHY: self.__shrink_segment(1) return True @@ -1226,7 +1297,7 @@ class Engine(ibus.EngineBase): #candidates_keys def __select_candidate(self, pos): - if not self.__lookup_table_visible: + if not self._chk_mode('5'): return False if not self.__lookup_table.set_cursor_pos_in_current_page(pos): @@ -1245,79 +1316,152 @@ class Engine(ibus.EngineBase): return self.__select_candidate(self.__lookup_table.get_page_size() - 1) def __cmd_select_next_candidate(self, keyval, state): + if not self._chk_mode('235'): + return False + return self.__on_key_down() def __cmd_select_prev_candidate(self, keyval, state): + if not self._chk_mode('235'): + return False + return self.__on_key_up() def __cmd_candidates_page_up(self, keyval, state): + if not self._chk_mode('5'): + return False + return self.__on_key_page_up() def __cmd_candidates_page_down(self, keyval, state): + if not self._chk_mode('5'): + return False + return self.__on_key_page_down() #direct_select_keys - def __cmd_select_candidates_1(self, keyval, state): + def __select_candidates(self, keyval): + if not self._chk_mode('5'): + return False + return self.__on_key_number(keyval) + def __cmd_select_candidates_1(self, keyval, state): + return self.__select_candidates(keyval) + def __cmd_select_candidates_2(self, keyval, state): - return self.__on_key_number(keyval) + return self.__select_candidates(keyval) def __cmd_select_candidates_3(self, keyval, state): - return self.__on_key_number(keyval) + return self.__select_candidates(keyval) def __cmd_select_candidates_4(self, keyval, state): - return self.__on_key_number(keyval) + return self.__select_candidates(keyval) def __cmd_select_candidates_5(self, keyval, state): - return self.__on_key_number(keyval) + return self.__select_candidates(keyval) def __cmd_select_candidates_6(self, keyval, state): - return self.__on_key_number(keyval) + return self.__select_candidates(keyval) def __cmd_select_candidates_7(self, keyval, state): - return self.__on_key_number(keyval) + return self.__select_candidates(keyval) def __cmd_select_candidates_8(self, keyval, state): - return self.__on_key_number(keyval) + return self.__select_candidates(keyval) def __cmd_select_candidates_9(self, keyval, state): - return self.__on_key_number(keyval) + return self.__select_candidates(keyval) def __cmd_select_candidates_0(self, keyval, state): - return self.__on_key_number(keyval) + return self.__select_candidates(keyval) #convert_keys def __cmd_convert_to_char_type_forward(self, keyval, state): - pass + if self.__convert_mode == CONV_MODE_KATAKANA: + return self.__cmd_convert_to_half(keyval, state) + elif self.__convert_mode == CONV_MODE_HALF_WIDTH_KATAKANA: + return self.__cmd_convert_to_latin(keyval, state) + elif CONV_MODE_LATIN_0 <= self.__convert_mode <= CONV_MODE_LATIN_3: + return self.__cmd_convert_to_wide_latin(keyval, state) + elif (CONV_MODE_WIDE_LATIN_0 <= self.__convert_mode + <= CONV_MODE_WIDE_LATIN_3): + return self.__cmd_convert_to_hiragana(keyval, state) + else: + return self.__cmd_convert_to_katakana(keyval, state) def __cmd_convert_to_char_type_backward(self, keyval, state): - pass + if self.__convert_mode == CONV_MODE_KATAKANA: + return self.__cmd_convert_to_hiragana(keyval, state) + elif self.__convert_mode == CONV_MODE_HALF_WIDTH_KATAKANA: + return self.__cmd_convert_to_katakana(keyval, state) + elif CONV_MODE_LATIN_0 <= self.__convert_mode <= CONV_MODE_LATIN_3: + return self.__cmd_convert_to_half(keyval, state) + elif (CONV_MODE_WIDE_LATIN_0 <= self.__convert_mode + <= CONV_MODE_WIDE_LATIN_3): + return self.__cmd_convert_to_latin(keyval, state) + else: + return self.__cmd_convert_to_wide_latin(keyval, state) def __cmd_convert_to_hiragana(self, keyval, state): + if not self._chk_mode('1234'): + return False + return self.__on_key_conv(0) def __cmd_convert_to_katakana(self, keyval, state): + if not self._chk_mode('1234'): + return False + return self.__on_key_conv(1) def __cmd_convert_to_half(self, keyval, state): + if not self._chk_mode('1234'): + return False + return self.__on_key_conv(2) def __cmd_convert_to_half_katakana(self, keyval, state): + if not self._chk_mode('1234'): + return False + return self.__on_key_conv(2) def __cmd_convert_to_wide_latin(self, keyval, state): + if not self._chk_mode('1234'): + return False + return self.__on_key_conv(3) def __cmd_convert_to_latin(self, keyval, state): + if not self._chk_mode('1234'): + return False + return self.__on_key_conv(4) #dictonary_keys def __cmd_dict_admin(self, keyval, state): - pass + if not self._chk_mode('0'): + return False + + path = self.__prefs.get_value('common', 'dict_admin_command') + os.spawnl(os.P_NOWAIT, *path) + return True def __cmd_add_word(self, keyval, state): - pass + if not self._chk_mode('0'): + return False + + path = self.__prefs.get_value('common', 'add_word_command') + os.spawnl(os.P_NOWAIT, *path) + return True + + def __cmd_start_setup(self, keyval, state): + if not self._chk_mode('0'): + return False + + self.__start_setup() + return True def __start_setup(self): if Engine.__setup_pid != 0: diff --git a/setup/anthyprefs.py b/setup/anthyprefs.py index 24d031f..0ab00ec 100644 --- a/setup/anthyprefs.py +++ b/setup/anthyprefs.py @@ -31,7 +31,7 @@ _cmd_keys = [ "hiragana_mode", "katakana_mode", "half_katakana_mode", - "cancel_pseudo_ascii_mode_key", +# "cancel_pseudo_ascii_mode_key", "circle_typing_method", "insert_space", @@ -46,7 +46,7 @@ _cmd_keys = [ "cancel", "cancel_all", "reconvert", - "do_nothing", +# "do_nothing", "select_first_candidate", "select_last_candidate", @@ -91,6 +91,8 @@ _cmd_keys = [ "dict_admin", "add_word", + + "start_setup", ] _config = { @@ -107,88 +109,77 @@ _config = { 'half_width_symbol': False, 'half_width_number': False, - 'shortcut_type': 'default' - }, - 'shortcut/default': { - #mode_keys - 'on_off': ['Ctrl+J'], - 'circle_input_mode': ['Ctrl+comma', 'Ctrl+less'], - 'circle_kana_mode': ['Ctrl+period', 'Ctrl+greater', 'Hiragana_Katakana'], - 'latin_mode': [], - 'wide_latin_mode': [], - 'hiragana_mode': [], - 'katakana_mode': [], - 'half_katakana_mode': [], - 'cancel_pseudo_ascii_mode_key': ['Escape'], - 'circle_typing_method': ['Alt+Romaji', 'Ctrl+slash'], - - #edit_keys - 'insert_space': ['space'], - 'insert_alternate_space': ['Shift+space'], - 'insert_half_space': [], - 'insert_wide_space': [], - 'backspace': ['BackSpace', 'Ctrl+H'], - 'delete': ['Delete', 'Ctrl+D'], - 'commit': ['Return', 'KP_Enter', 'Ctrl+J', 'Ctrl+M'], - 'convert': ['space', 'KP_Space', 'Henkan'], - 'predict': ['Tab', 'ISO_Left_Tab'], - 'cancel': ['Escape', 'Ctrl+G'], - 'cancel_all': [], - 'reconvert': ['Shift+Henkan'], - 'do_nothing': [], - - #caret_keys - 'move_caret_first': ['Ctrl+A', 'Home'], - 'move_caret_last': ['Ctrl+E', 'End'], - 'move_caret_forward': ['Right', 'Ctrl+F'], - 'move_caret_backward': ['Left', 'Ctrl+B'], - - #segments_keys - 'select_first_segment': ['Ctrl+A', 'Home'], - 'select_last_segment': ['Ctrl+E', 'End'], - 'select_next_segment': ['Right', 'Ctrl+F'], - 'select_prev_segment': ['Left', 'Ctrl+B'], - 'shrink_segment': ['Shift+Left', 'Ctrl+I'], - 'expand_segment': ['Shift+Right', 'Ctrl+O'], - 'commit_first_segment': ['Shift+Down'], - 'commit_selected_segment': ['Ctrl+Down'], - - #candidates_keys - 'select_first_candidate': ['Home'], - 'select_last_candidate': ['End'], - 'select_next_candidate': ['space', 'KP_Space', 'Tab', 'ISO_Left_Tab', 'Henkan', 'Down', 'KP_Add', 'Ctrl+N'], - 'select_prev_candidate': ['Shift+Tab', 'Shift+ISO_Left_Tab', 'Up', 'KP_Subtract', 'Ctrl+P'], - 'candidates_page_up': ['Page_Up'], - 'candidates_page_down': ['Page_Down', 'KP_Tab'], - - #direct_select_keys - 'select_candidates_1': ['1'], - 'select_candidates_2': ['2'], - 'select_candidates_3': ['3'], - 'select_candidates_4': ['4'], - 'select_candidates_5': ['5'], - 'select_candidates_6': ['6'], - 'select_candidates_7': ['7'], - 'select_candidates_8': ['8'], - 'select_candidates_9': ['9'], - 'select_candidates_0': ['0'], - - #convert_keys - 'convert_to_char_type_forward': ['Muhenkan'], - 'convert_to_char_type_backward': [], - 'convert_to_hiragana': ['F6'], - 'convert_to_katakana': ['F7'], - 'convert_to_half': ['F8'], - 'convert_to_half_katakana': ['Shift+F8'], - 'convert_to_wide_latin': ['F9'], - 'convert_to_latin': ['F10'], - - #dictonary_keys - 'dict_admin': ['F11'], - 'add_word': ['F12'], - }, + 'shortcut_type': 'default', + + 'dict_admin_command': ['/usr/bin/kasumi', 'kasumi'], + 'add_word_command': ['/usr/bin/kasumi', 'kasumi', '-a'], + } +} + +_shortcut_default = { + 'on_off': ['Ctrl+J'], + 'circle_input_mode': ['Ctrl+comma', 'Ctrl+less'], + 'circle_kana_mode': ['Ctrl+period', 'Ctrl+greater', 'Hiragana_Katakana'], +# 'cancel_pseudo_ascii_mode_key': ['Escape'], + 'circle_typing_method': ['Alt+Romaji', 'Ctrl+slash'], + + 'insert_space': ['space'], + 'insert_alternate_space': ['Shift+space'], + 'backspace': ['BackSpace', 'Ctrl+H'], + 'delete': ['Delete', 'Ctrl+D'], + 'commit': ['Return', 'KP_Enter', 'Ctrl+J', 'Ctrl+M'], + 'convert': ['space', 'KP_Space', 'Henkan'], + 'predict': ['Tab', 'ISO_Left_Tab'], + 'cancel': ['Escape', 'Ctrl+G'], + 'reconvert': ['Shift+Henkan'], + + 'move_caret_first': ['Ctrl+A', 'Home'], + 'move_caret_last': ['Ctrl+E', 'End'], + 'move_caret_forward': ['Right', 'Ctrl+F'], + 'move_caret_backward': ['Left', 'Ctrl+B'], + + 'select_first_segment': ['Ctrl+A', 'Home'], + 'select_last_segment': ['Ctrl+E', 'End'], + 'select_next_segment': ['Right', 'Ctrl+F'], + 'select_prev_segment': ['Left', 'Ctrl+B'], + 'shrink_segment': ['Shift+Left', 'Ctrl+I'], + 'expand_segment': ['Shift+Right', 'Ctrl+O'], + 'commit_first_segment': ['Shift+Down'], + 'commit_selected_segment': ['Ctrl+Down'], + + 'select_first_candidate': ['Home'], + 'select_last_candidate': ['End'], + 'select_next_candidate': ['space', 'KP_Space', 'Tab', 'ISO_Left_Tab', 'Henkan', 'Down', 'KP_Add', 'Ctrl+N'], + 'select_prev_candidate': ['Shift+Tab', 'Shift+ISO_Left_Tab', 'Up', 'KP_Subtract', 'Ctrl+P'], + 'candidates_page_up': ['Page_Up'], + 'candidates_page_down': ['Page_Down', 'KP_Tab'], + + 'select_candidates_1': ['1'], + 'select_candidates_2': ['2'], + 'select_candidates_3': ['3'], + 'select_candidates_4': ['4'], + 'select_candidates_5': ['5'], + 'select_candidates_6': ['6'], + 'select_candidates_7': ['7'], + 'select_candidates_8': ['8'], + 'select_candidates_9': ['9'], + 'select_candidates_0': ['0'], + + 'convert_to_char_type_forward': ['Muhenkan'], + 'convert_to_hiragana': ['F6'], + 'convert_to_katakana': ['F7'], + 'convert_to_half': ['F8'], + 'convert_to_half_katakana': ['Shift+F8'], + 'convert_to_wide_latin': ['F9'], + 'convert_to_latin': ['F10'], + + 'dict_admin': ['F11'], + 'add_word': ['F12'], } +_config['shortcut/default'] = dict.fromkeys(_cmd_keys, []) +_config['shortcut/default'].update(_shortcut_default) + _shortcut_atok = { 'on_off': ['Henkan', 'Eisu_toggle', 'Zenkaku_Hankaku'], 'circle_input_mode': ['F10'], |