如何令 sdcv 在 windows 下用上 ecdict

过年有时间,折腾了好几天 sdcv ,目的是想在 windows 上用 ecdict 未果,困难重重。论坛的贴子,搜索引擎的文章,能看的都看了,还是败下阵来,发个贴看看有没有人解决成功过

环境 : windows 11

一通浏览下来,这篇 blog 比较接近目的:

但是文中的编译好的 sdcv 的链接已经失效,所以我尝试着按网上的文章在 cygwin 下编译,非常不顺利,各种包安装重试了N回,就是通不过

然后没办法又找到了一个 msys2 下已经编译好的 sdcv 版本 https://packages.msys2.org/base/mingw-w64-sdcv 这回 windows cmd 能跑了,但是输出时中文释义都是空的,类似

Enter word or phrase: test Found 1 items, similar to test. –>€ –>test

*[test] -K5 n. , , , €, €, vt. , , vi. ,

[€] tested, testing, tests ( 575/627)

ecdict 也放到 .startdic/dic 目录下了

有这么4个文件

stardict-ecdict-2.4.2.dict

stardict-ecdict-2.4.2.idx

stardict-ecdict-2.4.2.idx.oft

stardict-ecdict-2.4.2.ifo

但是 sdcv -l 列出的结果是个空行

脑子有点不转了,请指教

问题:

1、 有没有不借助 cygwin msys2 就能原生在 windows 下运行的 sdcv 理论它是 c++ 写的? 那为什么没见到直接在 windows 下编译的例子呢

2、sdcv 直接指定查询字典的目录的语法是怎样的,按 help 里 = 号后跟个目录没成功

3、sdcv.el 能直接去读取查询 stardict 的词典库吗,这样就能跳过 sdcv 编译的问题,看这个贴子的意思是可以?

4、paw.el 应用到了 ecdict 的 sql 库,要是有高手能写一个直接查询 ecdict sql库的插件就好了,返回查词结果

找到的另一个有价值的页面:

可惜的是这个编译完成版的链接也失效了

我现在用纯lisp版本,支持windows,

可参考我的进一步配置, emacs.d/lisp/init-dictionary.el at master · redguardtoo/emacs.d · GitHub

1 个赞

感谢大佬指路 又折腾了一天,终于在假期末尾用上了

设置了朗道和ecdict,朗道查不到词时没反馈(经常查不到),查到时它的弹窗也不好看(如图),还会报个错

uncompressing langdao-ec-gb.dict.dz...done
You can’t save this buffer because compression program is not defined

因此我用了两下就不用了,只用 ecdict

谢谢!节前论坛有人问过年玩什么,别人不知道,我是就干了这么一件事儿 :sweat_smile:

弹窗可以改用别的插件的.我因为一直在terminal下用emacs.所以用了个对terminal支持比较好的弹窗.

以下代码你把最后一行(popup-tip def)改成用其他弹窗就可以了,

(defun my-dict-simple-definition ()
  "Show dictionary lookup in popup."
  (interactive)
  (let* ((word (my-dict-prompt-input))
         (def (my-dict-search-detail word my-dict-simple my-dict-simple-cache)))
    (when def
      (popup-tip def))))

感谢感谢,搜索时有点不得要领,问了ai 说



popup.el:这是一个简单的弹窗库,提供了基本的弹窗功能,适用于菜单、提示和选择等场景。

helm:虽然 Helm 主要是一个增强的选择和搜索框,但它也提供了弹窗功能,可以在弹窗中显示候选项并进行选择。

ivy:类似于 Helm,Ivy 是一个用于增强选择和搜索的框架,提供了弹窗式的界面,用户可以在其中快速选择。

company-mode:这是一个用于代码补全的包,提供了弹窗式的补全建议,适用于多种编程语言。

which-key:这个包在你按下键盘组合时会弹出一个窗口,显示可用的键绑定,帮助用户记忆和使用快捷键。

popup-echo:这是一个简单的弹窗库,专注于在回显区域显示信息

看介绍第1个应该就是这个popup吧,反而其他的用于选择或补全的,popup-echo没在melpa看到,不知是不是AI编的 :sweat_smile:

能想到的是懒猫的popweb,但似乎它是弹出网页的,这种纯字符的结果不知如何设置

BTW:大佬的 mybigword 好用 :+1:

update: 找到一个有希望的

也许posframe? 我没用过,不过reddit上很多人用.

嗯嗯,这个我也搜索到了,然后显示也挺好,就是有个问题,不知道怎么退出这个弹窗,研究中

(defvar my-dict-posframe-buffer " *Dictionary Definition*"
  "Buffer name for displaying dictionary definitions in posframe.")

(defun my-dict-simple-definition ()
  "Show dictionary lookup in posframe."
  (interactive)
  (let* ((word (my-dict-prompt-input))
         (def (my-dict-search-detail word my-dict-simple my-dict-simple-cache)))
    (when def
      (with-current-buffer (get-buffer-create my-dict-posframe-buffer)
        (erase-buffer)  ;; 清空缓冲区
        (insert def))   ;; 插入定义内容
      (when (posframe-workable-p)
        (posframe-show my-dict-posframe-buffer
                       :position (point)
                       :font "Monospace-18"
                       )))))

gpt改了几轮都是按q退出时,q输入到原buffer了,而不是在弹窗处响应,搜索办法中