【求助】MacOS关于sdcv的一些问题

无论命令行还是Emacs中使用sdcv,都产生报错:g_mkdir failed: No such file or directory 图片

在Emacs中则出现使用懒猫大佬的sdcv包时,sdcv-check正常但无法查询到单词释义。 使用melpa上的sdcv时则正常查询,通过gpt对比了下melpa上的sdcv和懒猫大佬的sdcv,排查到可能为sdcv-translate-result函数的问题。

利用gpt重定义该函数后正常查询,但报错信息也随之显示在Emacs的posframe中,同时怀疑是报错信息导致的原函数无法正常查询。请问各位道友们这个报错该如何解决?

懒猫sdcv原函数:

(defun sdcv-translate-result (word dictionary-list)
  "Call sdcv to search WORD in DICTIONARY-LIST. Return filtered string of results."
  (let* ((arguments (cons word (mapcan (lambda (d) (list "-u" d)) dictionary-list)))
         (result (mapconcat
                  (lambda (result)
                    (let-alist result
                      (format "-->%s\n-->%s\n%s\n\n" .dict .word .definition)))
                  (apply #'sdcv-call-process arguments)
                  "")))
    (if (string-empty-p result)
        sdcv-fail-notify-string
      result)))

Gpt修改:

(defun sdcv-translate-result (word dictionary-list)
  "Call sdcv to search WORD in DICTIONARY-LIST. Return filtered string of results."
  (let* ((arguments (cons word (mapcan (lambda (dict) (list "-u" dict)) dictionary-list)))
         (cmd (concat "sdcv " (mapconcat #'identity arguments " "))))
    ;; 打印实际调用的命令
    (message "Executing command: %s" cmd)
    ;; 执行命令
    (let ((result (shell-command-to-string cmd)))
      (if (string-empty-p result)
          sdcv-fail-notify-string
        result))))

另外MacOS上的stardict似乎无法使用,尝试了macport和下载release。

现在我用纯lisp的”stardict.el“, 还不错,各操作系统都支持. 魔改了一个纯elisp的stardict插件... - #13,来自 SPQR

1 个赞

如果你只想要查词的话, 可以试试这个: GitHub - ISouthRain/dict-line: Emacs show Dict . Emacs 显示字典词.
不依赖任何外部程序, 使用的是某个大词典库文件, 直接索引文件查找, 速度非常快.

1 个赞

在macOS上用homebrew安装sdcv 0.5.5版本正常。 image

1 个赞

这个包我从GitHub迁移的时候搞丢了 :melting_face:这个 是@redguardtoo的fork

1 个赞

这个原因是你需要在家目录创建一个目录:

~/.stardict/dic

就不会报错了,你可以把词典软连接到dic下面,就像这样

~/.stardict/dic/ecdict/ecdict.dict 等

1 个赞

多谢,解决了,我配置了STARDICT_DATA_DIR环境变量,能正常运行后,想着它自己创这个目录应该不会没有权限创建这个目录才是,就排除了 :smiling_face_with_tear:

多谢,我试试看,zsbd

是的, 就是这个原因, sdcv 如果发现没有发现字典, 或者你传递错误的字典sdcv都会罢工, 但是sdcv不会报错。