(defun kid-sdcv-to-buffer (&optional input)
(interactive "P")
(let ((word (if mark-active
(buffer-substring-no-properties (region-beginning) (region-end))
(current-word nil t))))
(if input
(setq word (read-string (format "Search the dictionary for (default %s): " word)
nil nil word)))
(set-buffer (get-buffer-create "*sdcv*"))
(buffer-disable-undo)
(erase-buffer)
(message "searching for %s ..." word)
(let ((process (start-process "sdcv" "*sdcv*" "sdcv" "-n" "--utf8-input" "--utf8-output" word)))
(set-process-sentinel
process
(lambda (process signal)
(when (memq (process-status process) '(exit signal))
(unless (string= (buffer-name) "*sdcv*")
(setq kid-sdcv-window-configuration (current-window-configuration))
(switch-to-buffer-other-window "*sdcv*")
(local-set-key (kbd "RET") 'kid-sdcv-to-buffer)
(local-set-key (kbd ",") (lambda ()
(interactive)
(quit-window t)))) ;; quit-window t 可以关闭窗口并恢复原先窗口布局,但是buffer被kill
(goto-char (point-min))
(open-line 1)))))))
感谢您的回复,我下了你给的最新的sdcv.el和posframe,并做了以下配置,然后执行sdcv-search-input+,并没有显示结果出来。请帮忙看看哪里出了问题 (require 'sdcv) (setq sdcv-dictionary-complete-list ;; a complete dictionary list '(“KDic11万英汉词典” “懒虫简明英汉词典” “朗道英汉字典5.0” “XDICT英汉辞典” “朗道汉英字典5.0” “XDICT汉英辞典” “懒虫简明汉英词典” “牛津英汉双解美化版” “stardict1.3英汉辞典” “英汉汉英专业词典” “CDICT5英汉辞典” “Jargon” “FOLDOC” “WordNet” ))
(setq sdcv-dictionary-data-dir “~/.stardict/dic”)
我的字典目录~/.stardict/dic中有以下字典
可以使用 toggle-debug-on-error 命令打开调试模式,再看看执行的时候有没有报错? 我不用windows, 可能没法帮你彻底解决问题
melpa 上也有一个 sdcv,和这个是一样的吗?
Edit:
看了一下是一样的。
您为什么不把包托管到 github 或者 gitlab 上呢?年初 MELPA 把所有 wiki 上的包都下架了,因为有风险。这样 melpa 上就不会更新这个包了。我刚才看了一下还是 2月份的状态。
您是在 Windows 上自己编译的 sdcv 吗?最近想换个词典,因为有道词典在 pdumper 上用不了,所以想考虑一下 sdcv。
@zhixing 我看你也尝试过在 msys2 上编译,怎么样?最后编译成功了吗?
我之前维护过sdcv.el 现在MELPA上的版本应该是我的分支 https://github.com/stardiviner/sdcv.el 也推荐你试试我的另外一个包: https://github.com/stardiviner/goldendict.el
这个 Windows 下也能用吗?
Windows下不知道,这个包需要sdcv命令支持。goldendict也是通过命令支持的。
谢谢,我现在的痛点是 sdcv 或者 goldendict 命令行在 Windows 下没有二进制版本
话说Windows下不是有很多词典程序支持剪贴板取词么?什么有道词典,goldendict在windows下应该也支持剪贴板取词。你直接region取词,然后词典程序快捷键翻译不就行了?
那样的话就不能在emacs 中显示了,也不能 thing-at-point 了
有点小曲折,不过编译成功了。学习到的经验教训就是不可以用 mingw 动态编译 c++ 程序,运行时会出错的。最后用 msys 编译成功。
@manateelazycat posframe 很酷,但是sdcv.el查词结果在Windows上显示乱码:
我在命令中加了 -0
参数仍然不行,还是乱码,问题可能出在 start-process
那里。
你直接在emacs里面执行下面的代码 (sdcv-search-witch-dictionary “hacker” sdcv-dictionary-simple-list)
看一看输出是不是乱码?
- 如果默认执行就乱码,可能就是你emacs编码配置的问题
- 如果不乱码,只是弹出 tooltip 乱码,可能是要设置一下 start-process 的编码
是在msys2里编译的sdcv吗?sdcv版本号是?
是 msys2 编译的,版本0.5.2(最新版),git版本应该也可以编译,我没试
你用不用 mdx 词典?发现有这帖,虽然我没用过。
多谢推荐,我已经搞定 sdcv 了,用起来不错,查词挺快,海量词典。