Skip to content

Instantly share code, notes, and snippets.

@hyslion
Last active August 29, 2015 14:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hyslion/61dc3d1733b7f30675ca to your computer and use it in GitHub Desktop.
Save hyslion/61dc3d1733b7f30675ca to your computer and use it in GitHub Desktop.
解決 GNOME 3.16+ 應用程式下輸入法不能正常運作的問題
#!/usr/bin/env python3
from gi.repository import GLib, Gio
import sys, os
def has_gtk_im_settings(overrides):
return True if 'Gtk/IMModule' in overrides.keys() else False
def produce_new_gtk_im_dict_entry(im):
return GLib.Variant.new_dict_entry(GLib.Variant.new_string('Gtk/IMModule'), GLib.Variant.new_variant(GLib.Variant.new_string(im)))
if __name__ == '__main__':
if len(sys.argv) != 2:
print('usage: ' + os.path.basename(sys.argv[0]) + ' <input method name>', file=sys.stderr)
sys.exit(1)
ime = sys.argv[1]
print('Setting Input Method = "' + sys.argv[1] + '"...')
settings = Gio.Settings.new('org.gnome.settings-daemon.plugins.xsettings')
overrides = settings.get_value('overrides')
overrides_children = [overrides.get_child_value(i) for i in range(0, overrides.n_children())]
if has_gtk_im_settings(overrides):
current_ime = overrides.lookup_value('Gtk/IMModule', None).get_string()
if current_ime != ime:
overrides_children.remove(produce_new_gtk_im_dict_entry(current_ime))
overrides_children.append(produce_new_gtk_im_dict_entry(ime))
settings.set_value('overrides', GLib.Variant.new_array(GLib.VariantType.new('{sv}'), overrides_children))
else:
overrides_children.append(produce_new_gtk_im_dict_entry(ime))
settings.set_value('overrides', GLib.Variant.new_array(GLib.VariantType.new('{sv}'), overrides_children))
print('Done.')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment