最近发现了emacswiki上的sdcv的纯lisp实现 https://www.emacswiki.org/emacs/stardict.el 这样就可以在服务器没有sdcv软件的情况下使用sdcv了 但是这个el仅提供了(stardict-lookup dict “apple”)接口 我试了很多方法让他能不能在选中区绑定快捷键然后调用这个函数 但是都失败了 好像这个函数有点小问题 大家有没有什么好的方法可以在文本选中区然后正确调用这个函数
region-bounds
获取选区边界位置,传给buffer-substring
获取选区文本,再把结果传给stardict-lookup
应该就差不多了
1 个赞
大佬可以详细一点吗
之前我就是这样,但是一直没有成功
(defun stardict-translate-region ()
(interactive)
(when (region-active-p)
(let* ((beg (region-beginning))
(end (region-end))
(string (buffer-substring-no-properties beg end)))
;; (message string)
(stardict-lookup dict string))))
dict这个变量需要提前定义好,先参照文件开头的注释测试下,然后应该就没问题了
谢谢大佬, 但是我试了一下,使用stardict-translate-region没有反应,我的dict变量设置好了,并且直接在lisp模式使用(stardict-lookup dict “apple”)也可以正常弹出minibuffer,但是stardict-translate-region还是没反应
可能是应该先把 stardict-lookup
的反回值先保存然后用message输出?
(defun stardict-translate-region ()
(interactive)
(when (region-active-p)
(let* ((beg (region-beginning))
(end (region-end))
(string (buffer-substring-no-properties beg end))
(result (stardict-lookup dict string)))
(message result))))
1 个赞
陈斌大佬的fork可以参考下,弹出一个buffer显示结果 https://github.com/redguardtoo/emacs.d/blob/master/site-lisp/stardict/stardict.el
2 个赞
试了一下,很好用
感谢大佬,您这段代码是我试过唯一成功的 感谢!