Repository :
http://git.fedorahosted.org/git/?p=ibus-typing-booster.git
On branch : miketmp-debug
---------------------------------------------------------------
commit b27c2f3c24dce197c48b204c1a2a0da0d38628bd
Author: Mike FABIAN <mfabian(a)redhat.com>
Date: Mon Jul 8 18:17:30 2013 +0200
Add an option to try completion only when a minimum number of characters has been
typed
Some users reported that they find it distracting when the lookup
table pops up all the time and requested an option to try completion
only if a certain number of character has been typed already. I.e. use
completion only for longer words. Short strings are still in preëdit
until committed and added to the database, but no lookup table pops up
anymore when the number of characters typed is still below the limit.
For very fast typists, this may be better then popping up the lookup
table after the first character typed.
Of course, to save as many keystrokes as possible, completion should
be tried as early as possible. Therefore, the default is 1,
i.e. completion is attempted after the first character typed.
---------------------------------------------------------------
ibus-typing-booster/engine/hunspell_table.py | 16 ++++++-
ibus-typing-booster/setup/main.py | 12 +++++
ibus-typing-booster/setup/setup.glade | 60 ++++++++++++++++++++++---
3 files changed, 79 insertions(+), 9 deletions(-)
diff --git a/ibus-typing-booster/engine/hunspell_table.py
b/ibus-typing-booster/engine/hunspell_table.py
index 5f82747..43e71f9 100644
--- a/ibus-typing-booster/engine/hunspell_table.py
+++ b/ibus-typing-booster/engine/hunspell_table.py
@@ -89,6 +89,15 @@ class editor(object):
self._config = config
self._name = self.db.ime_properties.get('name')
self._config_section = "engine/typing-booster/%s" % self._name
+ self._min_char_complete = variant_to_value(self._config.get_value(
+ self._config_section,
+ 'mincharcomplete'))
+ if self._min_char_complete == None:
+ self._min_char_complete = 1 # default
+ if self._min_char_complete < 1:
+ self._min_char_complete = 1 # minimum
+ if self._min_char_complete > 9:
+ self._min_char_complete = 9 # maximum
self._typed_string = u''
self._typed_string_cursor = 0
self._typed_string_when_update_candidates_was_last_called = u''
@@ -337,7 +346,7 @@ class editor(object):
prefix = u''
if self._transliterated_string:
stripped_transliterated_string =
itb_util.lstrip_token(self._transliterated_string)
- if stripped_transliterated_string:
+ if len(stripped_transliterated_string) >= self._min_char_complete:
prefix_length = len(self._transliterated_string) -
len(stripped_transliterated_string)
if prefix_length:
prefix = self._transliterated_string[0:prefix_length]
@@ -1023,6 +1032,11 @@ class tabengine (IBus.Engine):
round=True)
self.reset()
return
+ if name == "mincharcomplete":
+ if value >= 1 and value <= 9:
+ self._editor._min_char_complete = value
+ self.reset()
+ return
if name == "shownumberofcandidates":
if value == True:
self._show_number_of_candidates = True
diff --git a/ibus-typing-booster/setup/main.py b/ibus-typing-booster/setup/main.py
index 32cc81f..8dd905d 100644
--- a/ibus-typing-booster/setup/main.py
+++ b/ibus-typing-booster/setup/main.py
@@ -152,6 +152,14 @@ class SetupUI:
self.page_size_adjustment.set_value(6)
self.page_size_adjustment.connect('value-changed',
event_handler.onPageSizeAdjustmentValueChanged)
+ self.min_char_complete_adjustment =
self.builder.get_object("min_char_complete_adjustment")
+ self.min_char_complete =
self.variant_to_value(self.config.get_value(self.config_section,
'mincharcomplete'))
+ if self.min_char_complete:
+ self.min_char_complete_adjustment.set_value(int(self.min_char_complete))
+ else:
+ self.min_char_complete_adjustment.set_value(1)
+ self.min_char_complete_adjustment.connect('value-changed',
event_handler.onMinCharCompleteAdjustmentValueChanged)
+
self.other_ime = self.tabsqlitedb.ime_properties.get('other_ime').lower()
== u'true'
ime_combobox = self.builder.get_object("input_method_combobox")
ime_label = self.builder.get_object("input_method_label")
@@ -311,6 +319,10 @@ class EventHandler:
self.page_size = SetupUi.page_size_adjustment.get_value()
SetupUi.config.set_value(SetupUi.config_section,'pagesize',GLib.Variant.new_int32(self.page_size))
+ def onMinCharCompleteAdjustmentValueChanged(self,widget):
+ self.min_char_complete = SetupUi.min_char_complete_adjustment.get_value()
+
SetupUi.config.set_value(SetupUi.config_section,'mincharcomplete',GLib.Variant.new_int32(self.min_char_complete))
+
def onImeComboboxChanged(self,widget):
tree_iter = widget.get_active_iter()
if tree_iter != None:
diff --git a/ibus-typing-booster/setup/setup.glade
b/ibus-typing-booster/setup/setup.glade
index c70cc29..f823489 100644
--- a/ibus-typing-booster/setup/setup.glade
+++ b/ibus-typing-booster/setup/setup.glade
@@ -1,10 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<!-- interface-requires gtk+ 3.0 -->
- <object class="GtkAdjustment" id="page_size_adjustment">
+ <object class="GtkAdjustment"
id="min_char_complete_adjustment">
<property name="lower">1</property>
<property name="upper">9</property>
- <property name="value">6</property>
<property name="step_increment">1</property>
</object>
<object class="GtkDialog" id="main_dialog">
@@ -69,7 +68,7 @@
<object class="GtkTable"
id="table4">
<property
name="visible">True</property>
<property
name="can_focus">False</property>
- <property name="n_rows">4</property>
+ <property name="n_rows">5</property>
<property
name="n_columns">2</property>
<property
name="column_spacing">8</property>
<property
name="row_spacing">4</property>
@@ -113,7 +112,7 @@
<property
name="can_focus">True</property>
<property
name="invisible_char">●</property>
<property
name="adjustment">page_size_adjustment</property>
- <property
name="climb_rate">0.97999999999999998</property>
+ <property
name="climb_rate">1</property>
</object>
<packing>
<property
name="expand">False</property>
@@ -138,8 +137,8 @@
<property name="label"
translatable="yes">Input Method:</property>
</object>
<packing>
- <property
name="top_attach">3</property>
- <property
name="bottom_attach">4</property>
+ <property
name="top_attach">4</property>
+ <property
name="bottom_attach">5</property>
<property
name="x_options">GTK_FILL</property>
<property name="y_options"/>
</packing>
@@ -152,8 +151,8 @@
<packing>
<property
name="left_attach">1</property>
<property
name="right_attach">2</property>
- <property
name="top_attach">3</property>
- <property
name="bottom_attach">4</property>
+ <property
name="top_attach">4</property>
+ <property
name="bottom_attach">5</property>
<property name="y_options"/>
</packing>
</child>
@@ -175,6 +174,46 @@
<property
name="y_options">GTK_FILL</property>
</packing>
</child>
+ <child>
+ <object class="GtkBox"
id="min_chars_completion_box">
+ <property
name="visible">True</property>
+ <property
name="can_focus">False</property>
+ <property
name="spacing">8</property>
+ <child>
+ <object class="GtkLabel"
id="min_chars_completion_label">
+ <property
name="visible">True</property>
+ <property
name="can_focus">False</property>
+ <property name="label"
translatable="yes">Minimum number of chars for completion:</property>
+ </object>
+ <packing>
+ <property
name="expand">False</property>
+ <property
name="fill">True</property>
+ <property
name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton"
id="min_chars_completion">
+ <property
name="visible">True</property>
+ <property
name="can_focus">True</property>
+ <property
name="invisible_char">●</property>
+ <property
name="adjustment">min_char_complete_adjustment</property>
+ <property
name="climb_rate">1</property>
+ </object>
+ <packing>
+ <property
name="expand">False</property>
+ <property
name="fill">True</property>
+ <property
name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property
name="right_attach">2</property>
+ <property
name="top_attach">3</property>
+ <property
name="bottom_attach">4</property>
+ <property
name="x_options">GTK_FILL</property>
+ <property
name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
</object>
</child>
</object>
@@ -399,4 +438,9 @@
<action-widget response="0">close_button</action-widget>
</action-widgets>
</object>
+ <object class="GtkAdjustment" id="page_size_adjustment">
+ <property name="lower">1</property>
+ <property name="upper">9</property>
+ <property name="step_increment">1</property>
+ </object>
</interface>