gpt4 book ai didi

python - 如何在 python 中更改 iBus 输入法?

转载 作者:太空宇宙 更新时间:2023-11-03 11:30:19 25 4
gpt4 key购买 nike

我正在编写一个 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 正常模式将无法使用。如果你用 vim 写日文、中文、韩文等……你可能会明白这个问题。

问题是自 iBus 1.5 以来,我的插件所依赖的启用/禁用方法已被弃用。所以我的插件在 Ubuntu <= 13.04 中工作,但在 Debian Jessie 中不工作,并且可能也不会在未来的 Ubuntu 版本中工作。

我认为具有类似功能的唯一方法是定义一个默认的 iBus 引擎和输入法,并在每次 Vim 进入正常模式时将 iBus 更改为那些。

最佳答案

阅读 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

此方法允许我通过传递一个名称来更改 iBus 的输入法:

call im#setInputMode("Hiragana")

不幸的是,输入法名称取决于所使用的引擎。例如,对于 mozc,我需要将其设置为“Direct”,而对于 anthy,我必须使用“WideLatin”才能在 vim 正常模式下获得正确的输入。

如果有人知道查询 iBus 引擎以获得支持的 InputMode 列表的方法,那就太好了。还有一种查询引擎以获取当前设置的 InputMethod 的方法也会有所帮助。

关于python - 如何在 python 中更改 iBus 输入法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22031653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com