首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在python中更改iBus输入法?

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

Stack Overflow用户
提问于 2014-02-26 04:18:46
回答 1查看 1.7K关注 0票数 4

我正在编写一个Vim插件来设置iBus引擎和输入方法。到目前为止,我可以用下面的代码来改变引擎:

代码语言:javascript
运行
复制
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文档还缺乏细节。

是否有人可以提供关于如何以编程方式更改iBus输入方法的指针或示例?另外,获得每个引擎所支持的输入方法列表的方法也是很棒的。

====

从这一点开始,我将尝试提供更多关于我正在试图解决的问题的上下文。如果你不感兴趣就跳吧。

当进入Vim正常模式时,我实现了这个插件维姆来禁用输入方法。这一点很重要,因为如果将iBus设置为非ascii输入方法,Vim正常模式是不可用的。如果你用vim写日文、中文、韩文等.你可以理解这个问题。

问题是,由于iBus 1.5,我的插件所依赖的启用/禁用方法被废弃了。因此,我的插件在Ubuntu <= 13.04中工作,但在Debian中不起作用,而且可能也不会在未来的Ubuntu版本中工作。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-26 09:33:03

阅读ibus库代码,我找到了一个可接受的解决方案:

代码语言:javascript
运行
复制
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的输入方法,方法是传递一个名称如下:

代码语言:javascript
运行
复制
call im#setInputMode("Hiragana")

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

如果有人知道如何查询iBus引擎以获得受支持的InputMode列表,那就太好了。另外,查询引擎中当前集InputMethod的方法也会有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22031653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档