实验室的机器自从升级以后,Xorg 似乎已经可以完全无视 /etc/X11/xorg.conf
的内容配置了,所以我在里面写了交换 Caps Lock 和 Ctrl 也没有任何效果,虽然我可以通过 xmodmap 来做映射,但是这样好像 fcitx 又不认,不能用 ctrl 来切换中英文输入状态了,这个问题我很久很久以前做过 patch ,不过后来 fcitx 的版本似乎有些乱,时而能用时而不能,很诡异。鉴于现在已经完全不像以前那样爱折腾了(在实验室电脑上用了一个完全安装的 Ubuntu 就是一个最好的证明),所以就先忍着。结果这两天 fcitx 干脆连输入状态条都不见了,终于忍无可忍,装了一个 ibus 输入法。
第一感觉是 ibus 输入法还不错!至少在现在 Linux 下的各种输入法当中算很不错的了吧!只是有两个问题:
- 打开模糊音之后巨卡,反应及其迟钝,这个我一时也没有办法,对于输入法的算法并不了解,所以只好关掉模糊音,忍一忍了。
- 中英文切换是使用 Shift ,并且不可配置。当然,很多人都习惯这个快捷键,不过还有另外很大一部分人(包括我)喜欢用 Ctrl 来切换。搜索了一下发现一个 Issue ,说明确实有不少人需要这个功能,不过作者最近似乎有点忙,一时没法改这个。所以我就决定看看能不能改一下。
把 ibus pinyin 的代码下载回来,看到代码量似乎还是很少的,简单地浏览了一下并用关键字 shift
、switch
等定位了一下,很快就在 engine/pinyin.py
里找到了这一段:
# Match mode switch hotkey if self.__match_hotkey(key, keysyms.Shift_L, modifier.SHIFT_MASK + modifier.RELEASE_MASK) or \ self.__match_hotkey(key, keysyms.Shift_R, modifier.SHIFT_MASK + modifier.RELEASE_MASK): if self.__candidates and not self.__is_input_english() and PinYinEngine.__shift_select_canidates: index = self.__lookup_table.get_current_page_start() if key.code == keysyms.Shift_L: index += 1 else: index += 2 result = self.__commit_candidate(index) if result: if self.__committed_special_phrase: self.commit_string(self.__committed_special_phrase) else: commit_phrases = self.__committed_phrases.get_phrases() commit_string = self.__committed_phrases.get_string() self.commit_string(commit_string + self.__user_input.get_invalid_string()) # adjust phrase freq and create new phrase try: self.__pydb.commit_phrases(commit_phrases) if len(commit_phrases) > 1: self.__pydb.new_phrase(commit_phrases) except: print "Can not inster phrases in db" return True else: self.property_activate("status") self.reset() return True |
虽然 property_activate("status")
和 reset()
似乎跟切换中英文看起来不太相关,但是就这段代码最可疑了。本来还想修改一下定制面板,加一个选项,可以选是用 shift 还是用 control 来切换,但是我发现我对于 ibus 输入法的开发环境配置根本一无所知,特别是修改代码之后怎样在本地跑起一个输入法来?我总不至于改一下代码要测试的时候又把它拷贝到系统目录下去,然后 log out && log in 看看修改效果如何吧?所以想了一下,还是直接最简单地 hack 一下,可以用就行了。于是先找到系统中对应的文件的位置:
$ dpkg -L ibus-pinyin | grep pinyin.py /usr/share/ibus-pinyin/engine/pinyin.py
然后直接打开,找到之前提到的那一段,在后面加上:
# Make Left Control switch Chinese/English mode if self.__match_hotkey(key, keysyms.Control_L, modifier.CONTROL_MASK + modifier.RELEASE_MASK): self.property_activate("status") self.reset() |
添加了左边 Ctrl 切换的支持,然后注销、重新登录,果然就 OK 了!有这个需求的朋友可以做类似的修改,包括用右 ctrl 、屏蔽 shift 的中英文切换等。这个 hack 虽然有点 dirty ,但是反正他原来也是硬编码的 shift 切换呢。 :p 不过还是期待作者加入正式的支持,并在 GUI 上加一个选项可供选择。
$ cat /etc/hal/fdi/policy/dvorak-swapctrl.fdi
us
dvorak
ctrl:swapcaps
well…
http://pastebin.com/f32f58905
@galilette
啊! Thanks! 原来配置改到那里去了啊。不过我把桌面系统切换到 Gnome 之后在它的选项菜单里找到可以改的地方,找了一下,它把修改的选项保存在 ~/.gconf/desktop/gnome/peripherals/keyboard/kbd/%gconf.xml 的:
我想问下在ubuntu中哪里可以下载到ruby的源代码呢?编辑器FreeRIDE,有没有lunix系统下的?最近装了ubuntu玩开源
补充下我找到过一个570KB大小的版本,但是不知道是否是FreeRIDE在lunix下的版本,不大确定
@司马睿风
ruby 源代码在 Ruby 的官方网站就可以下载到,FreeRIDE 不知道,没有用过这个东西呀。
建议使用下这个编辑器,DEBUG功能不错,好像记得是ruby的一个工程项目来的,不过有2年多没更新了,估计已经完善了
@司马睿风
很奇特的想法,我一般看到两年多没有更新的项目的话,第一反应是它已经死掉了。 ^_^b
你好,在vim设置imactivekey和iminsert选项后,vim依然不能控制ibus,这样在vim中输入中文会很麻烦,博主有什么解决方法吗?谢谢
@moneylcj
恩,我也没法在 gVim 里用 ibus 输入中文,似乎是 ibus 的问题,如果能选择不嵌入的话也许可以。现在我也没有办法,要输入中文的时候只有在终端里用 vim 或者直接用 Emacs 。