我正在编写一个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_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
现在我也在尝试设置引擎的输入法,但我无法找到如何做到这一点。到目前为止,iBus的文档还缺少细节。在
有人能提供一些关于如何用程序(Python)改变iBus输入方法的指针或例子吗?另外,有一种方法可以为每个引擎获取支持的输入方法列表。在
===
从这一点上,我将尝试提供更多关于我试图解决的问题的背景。如果你不感兴趣就跳过。在
我实现了这个插件vim-im,以便在进入Vim正常模式时禁用输入方法。这一点很重要,因为如果iBus设置为非ascii输入方法,则Vim normal模式不可用。如果你用vim来写日语,中文,韩语等等。。。你可以理解这个问题。在
问题是,由于ibus1.5,我的插件所依赖的enable/disable方法被弃用了。所以我的插件可以在Ubuntu<;=13.04中使用,但在Debian-Jessie中没有,而且可能也无法在未来的Ubuntu版本上运行。在
我看到具有类似功能的唯一方法是定义一个默认的iBus引擎和输入方法,并在每次Vim进入normal模式时将iBus更改为那些。在