如何在python中更改iBus输入法?
我正在编写一个Vim插件来设置iBus引擎和输入方法。到目前为止,我可以使用以下代码更改发动机:如何在python中更改iBus输入法?,python,vim,vim-plugin,Python,Vim,Vim Plugin,我正在编写一个Vim插件来设置iBus引擎和输入方法。到目前为止,我可以使用以下代码更改发动机: function! im#setEngine(name) python << EOF try: import ibus,vim bus = ibus.Bus() ic = ibus.InputContext(bus, bus.current_input_contxt()) name = vim.eval("a:name") engines = bus.get_eng
function! im#setEngine(name)
python << EOF
try:
import ibus,vim
bus = ibus.Bus()
ic = ibus.InputContext(bus, bus.current_input_contxt())
name = vim.eval("a:name")
engines = bus.get_engines_by_names([name])
size = len(engines)
if size <= 0:
print "Could not find engine %s"%name
else:
engine = engines[0]
ic.set_engine(engine)
except Exception, e:
print "Failed to connect to iBus"
print e
EOF
endfunction
function! im#listEngines()
let l:engines = []
python << EOF
try:
import ibus,dbus,vim
bus = ibus.Bus()
names = []
for engine in bus.list_engines():
names.append(str(engine.name))
vim.command("let l:engines = %s"% names)
except Exception, e:
print "Failed to connect to iBus"
print e
EOF
return l:engines
endfunction
函数!im#设置引擎(名称)
python阅读ibus库代码时,我发现了一个可接受的解决方案:
function! im#setInputMode(mode)
python << EOF
try:
import ibus,dbus,vim
bus = ibus.Bus()
conn = bus.get_dbusconn().get_object(ibus.common.IBUS_SERVICE_IBUS, bus.current_input_contxt())
ic = dbus.Interface(conn, dbus_interface=ibus.common.IBUS_IFACE_INPUT_CONTEXT)
mode = vim.eval("a:mode")
ic.PropertyActivate("InputMode." + mode, ibus.PROP_STATE_CHECKED)
except Exception, e:
print "Failed to connect to iBus"
print e
EOF
endfunction
不幸的是,输入法名称取决于所使用的引擎。例如,对于mozc,我需要将其设置为“Direct”,而对于anthy,我必须使用“WideLatin”,以便在vim正常模式下获得正确的输入
如果有人知道一种查询iBus引擎以获得支持的InputMode列表的方法,那就太好了。还有一种查询引擎中当前设置InputMethod的方法也会有所帮助
call im#setInputMode("Hiragana")