+ -
当前位置:首页 → 问答吧 → 一个奇怪的问题:在英文环境中,emacs 23无法调用scim输入法

一个奇怪的问题:在英文环境中,emacs 23无法调用scim输入法

时间:2009-08-23

来源:互联网

debian sid中的emacs升级到了23后,发现无法调用scim了,
locale如下:
代码:
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE=zh_CN.UTF-8
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
每次都必须使用env LC_CTYPE="zh_CN.UTF-8" emacs 这个命令来启动emacs 23,这样才能调出输入法来;如果是直接用emacs这个命令来启动emacs 23,则死活也调不出输入法来。

作者: debsir   发布时间: 2009-08-23

设置LC_CTYPE="zh_CN.UTF-8",其他保持不变不就可以了吗

作者: jinnee   发布时间: 2009-08-23

引用:
作者: jinnee
设置LC_CTYPE="zh_CN.UTF-8",其他保持不变不就可以了吗
我不想把LC_CTYPE默认设置为zh_CN.UTF-8,能不能在~/.emacs里写入配置,使emacs 23在en_US环境下也能使用scim?

作者: debsir   发布时间: 2009-08-23

运行emacs时用 ”LC_CTYPE=zh_CN.UTF-8 emacs“ 就行了

作者: zhangxudong   发布时间: 2009-08-24

编辑 /etc/gtk-2.0/gtk.immodules
把文件末尾的
引用:
"/usr/lib/gtk-2.0/immodules/im-scim.so"
"scim" "SCIM Input Method" "scim" "/usr/share/locale" "ja:ko:zh"
修改为
引用:
"/usr/lib/gtk-2.0/immodules/im-scim.so"
"scim" "SCIM Input Method" "scim" "/usr/share/locale" "en:ja:ko:zh"
用 gdm 之类东西的话,重启相应服务 /etc/init.d/gdm restart,然后重新登录,即可。

作者: 聚焦深空   发布时间: 2009-08-24

回楼上,/etc/gtk-2.0中没有gtk.immodules 这个文件,我只好新建了一个。
你说的/usr/lib/gtk-2.0/immodules/im-scim.so也没找到(/usr/lib/gtk-2.0下没有immodules这个目录),只找到/usr/lib/gtk-2.0/2.10.0/immodules/im-scim.so,于是我的/etc/gtk-2.0/gtk.immodules内容最终如下:
代码:
"/usr/lib/gtk-2.0/2.10.0/immodules/im-scim.so"
"scim" "SCIM Input Method" "scim" "/usr/share/locale" "en:ja:ko:zh"
结果重启后仍然不行。

作者: debsir   发布时间: 2009-08-24

还是不死心,受5楼启发,编辑/usr/lib/gtk-2.0/2.10.0/immodule-files.d/scim-gtk2-immodule.immodules,把en加进去:
代码:
"/usr/lib/gtk-2.0/2.10.0/immodules/im-scim.so" 
"scim" "SCIM Input Method" "scim" "/usr/share/locale" "en:ja:ko:zh"
接着编辑/usr/lib/gtk-2.0/2.10.0/immodule-files.d/scim-bridge-client-gtk.immodules,改为:
代码:
"/usr/lib/gtk-2.0/2.10.0/immodules/im-scim-bridge.so" 
"scim-bridge" "SCIM Bridge Input Method" "scim-bridge" "/usr/share/locale" "en:ja:ko:zh"
最后编辑/usr/lib/gtk-2.0/2.10.0/immodule-files.d/libgtk2.0-0.immodules
把里面的一行加上en:
代码:
"/usr/lib/gtk-2.0/2.10.0/immodules/im-xim.so" 
"xim" "X Input Method" "gtk20" "/usr/share/locale" "en:ko:ja:zh"
重启后仍然不行,郁闷。。。

作者: debsir   发布时间: 2009-08-24

/etc/gtk-2.0/gtk.immodules 不存在,可以用下面命令建立
代码:
gtk-query-immodules-2.0 > /etc/gtk-2.0/gtk.immodules
然后按照上面方法修改。

其实您自己已给出另一种解法,下面方法也是有效的:
引用:
作者: debsir
还是不死心,受5楼启发,编辑/usr/lib/gtk-2.0/2.10.0/immodule-files.d/scim-gtk2-immodule.immodules,把en加进去:
代码:
"/usr/lib/gtk-2.0/2.10.0/immodules/im-scim.so" 
"scim" "SCIM Input Method" "scim" "/usr/share/locale" "en:ja:ko:zh"
这两种解法,英文环境下,基于 gtk 的程序都可以成功呼出 scim。
所以,要么您要使用基于 gtk 的虚拟终端执行 emacs,要么安装 emacs**-gtk。

qt 环境解法类似。

xim 环境下用环境变量指明输入法,应该也可以。

作者: 聚焦深空   发布时间: 2009-08-24

谢谢聚焦深空,我照你的方法又试了一遍,重启后emacs 23在英文环境里依然没法调用scim(我是在gnome-terminal中执行emacs的)。
我装的就是emacs23-gtk:
代码:
dpkg -l | grep emacs
ii emacs-goodies-el 30.3-1 Miscellaneous add-ons for Emacs
ii emacs23-bin-common 23.1+1-2 The GNU Emacs editor's shared, architecture dependent f
ii emacs23-common 23.1+1-2 The GNU Emacs editor's shared, architecture independent
ii emacs23-common-non-dfsg 23.1+1-1 GNU Emacs shared, architecture independent, non-DFSG it
ii emacs23-el 23.1+1-2 GNU Emacs LISP (.el) files
ii emacs23-gtk 23.1+1-2 The GNU Emacs editor (with GTK+ user interface)
ii emacsen-common 1.4.19 Common facilities for all emacsen
真的很奇怪,其他程序,在英文环境下,无论是gtk、qt还是tk/tcl均可以使用scim,唯独emacs不行。没办法,现在我只好把emacs给alias成“env LC_CTYPE="zh_CN.UTF-8" emacs“了。我想肯定有地方的设置有问题,无奈不知道在哪。

作者: debsir   发布时间: 2009-08-25

貌似是 emacs 快捷键影响,查查 emacs 中 ctrl-space 有没有键绑定。
有的话,要么修改 scim 呼出的快捷键,要么修改 emacs 的键绑定。

单打开一个 gnome-terminal,您现在应该能呼叫 scim 的,如果前面设置好。

作者: 聚焦深空   发布时间: 2009-08-25

引用:
作者: 聚焦深空
貌似是 emacs 快捷键影响,查查 emacs 中 ctrl-space 有没有键绑定。
有的话,要么修改 scim 呼出的快捷键,要么修改 emacs 的键绑定。

单打开一个 gnome-terminal,您现在应该能呼叫 scim 的,如果前面设置好。
不是键绑定的问题,我早已在~/.emacs中把mark的快捷键(默认是ctrl+space)设置为win+space:
代码:
(global-set-key (kbd "C-SPC") 'nil)
(global-set-key (kbd "s-SPC") 'set-mark-command)
正因为所有的程序在英文环境中都能使用scim,唯独emacs不能(只有在zh_CN下才能调出scim),所以我才觉得奇怪。

作者: debsir   发布时间: 2009-08-25