我寫一個Vim插件設置的ibus引擎和輸入法。到目前爲止,我可以用下面的代碼修改引擎:如何更改python中的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正常模式不可用。如果你用vim寫日文,中文,韓文等等,你可能會理解這個問題。
的問題是,由於IBUS 1.5啓用/禁用方法,我的插件依賴於已被棄用。所以我的插件工作在Ubuntu < = 13.04,但不在Debian Jessie中,也可能在未來的Ubuntu版本上無法工作。
我看到具有類似的功能的唯一方法是定義一個默認IBUS發動機和輸入方法並改變IBUS那些每Vim的在正常模式下輸入的時間。