2010年5月4日星期二

emacs: window下使用sdcv


1.先编译sdcv
由于sdcv需要glib2和其它一些UNIX下常用函数,在mingw下编译比较麻烦,就在Cygwin下编译了。

需要注意的是Cygwin下编译时,需要将src/Makefile.in中
    sdcv_LDADD = @SDCV_LIBS@ @LIBINTL@ @LIBREADLINE@ lib/libstardict.a
改为
    sdcv_LDADD = lib/libstardict.a @SDCV_LIBS@ @LIBINTL@ @LIBREADLINE@
即将静态库放到前面,否则链接时会报告一大堆函数找不到,这是移植程序到Cygwin常碰到的一个问题(另一个问题是Windows下动态库不能引用任何编译时找不到的函数/变量,而Linux下可以支持运行期解析,即可以直接在插件中使用主程序的函数/变量或者早先加载的其它动态库里的函数/变量)

2.开始试的是emacswiki.org上的 sdcv.el, 但它死活不能正常工作, *FIXME*原因似乎是: 它有指定词典的功能,但这个词典名通过命令行传递时,会出现编码不被sdcv.exe识别的问题(不是这个原因?)
 
  <2010-05-05 >: 调试了一下,发现是sdcv-search-detail函数的问题,导致了两次调用shell(第二次还传了个奇怪的参数进去)注释掉361行即可。但没看懂代码的意图,还不明白具体错在什么地方。

3.然后找到了 http://code.google.com/p/sdcv-mode 上的sdcv-mode.el,这个库比较简单,安装上之后直接load-library 'sdcv-mode, 然后就可以调sdcv-search命令了
   
  注: Cygwin会检测cygwin1.dll重复的问题,如果将X:/cygwin/bin加入PATH后就可能会因这个问题而拒绝工作。这种情况下改用一个sdcv.bat来包装一下sdcv.exe,就没有这个现象了