所有文章阅读量
UP | HOME

emacs+stardict做一个单词本

1. 1. sdcv 是什么?

1.1. 核心功能

  • sdcv(StarDict Console Version)是一个轻量级的命令行词典工具,支持查询 StarDict 格式的离线词典文件
  • 它是图形界面词典软件 StarDict 的终端版本,适用于 Linux、Windows 等系统

1.2. 特点

离线使用
无需联网即可查词,适合无网络环境
多词典支持
可同时加载多个词典文件(如英汉、汉英、专业词典等)
跨平台
兼容 Linux、Windows 等操作系统

2. 2. 安装后的基本操作

2.1. 安装命令

  • 使用 sudo apt-get install sdcv 会从软件源中直接安装 sdcv 主程序

2.2. 词典数据

  • 需单独下载词典文件(例如牛津高阶、朗道词典等)
  • http://www.github.com/boxmaking/sdcv-dict 我仅仅使用了stardict-cdict-gb-2.4.2 其他的没用.
  • 解压到 ~/.stardict/dic 目录下才能正常查词

3. 3. 使用场景

3.1. 终端查词

  • 通过命令 sdcv <单词> 直接查询单词释义,例如 sdcv example

3.2. 集成开发工具

  • 可配置在 Vim/Emacs 中实现划词翻译(例如通过快捷键调用 sdcv)
 1: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 2: ;; -*- coding: utf-8; lexical-binding: t -*-
 3: ;;pengshao-translate.el emacs调用sdcv来翻译单词和英文短语
 4: ;;<2025-03-12-071/Wednesday>
 5: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 6: 
 7: 
 8: ;; 设置单词本和短语本的 org 文件路径
 9: 
10: ;; 定义文件路径
11: (defvar pengshao-english-file "~/personal_note/pengshao-english.org"
12:   "File path for storing English vocabulary.")
13: 
14: ;; 确保文件存在并初始化基本结构
15: (defun pengshao-english-init-file ()
16:   "Initialize the vocabulary org file if it doesn't exist."
17:   (unless (file-exists-p pengshao-english-file)
18:     (with-current-buffer (find-file-noselect pengshao-english-file)
19:       (insert "#+STARTUP: show2levels\n* word\n* line\n")
20:       (set-buffer-file-coding-system 'utf-8)  ; 明确指定 UTF-8 编码
21:       (save-buffer))))
22: 
23: ;; 添加单个单词
24: (defun pengshao-english-add-word (word)
25:   "Add a single word to the vocabulary with its translation."
26:   (interactive "sEnter word to translate: ")
27:   (pengshao-english-init-file)
28:   (let* ((translation (shell-command-to-string 
29: 		       (format "sdcv -n --utf8-output %s " 
30: 			       (shell-quote-argument word))))
31: 	 (current-date (format-time-string "%Y-%m-%d")))
32:     (with-current-buffer (find-file-noselect pengshao-english-file)
33:       (set-buffer-file-coding-system 'utf-8)  ; 确保缓冲区使用 UTF-8
34:       (goto-char (point-min))
35:       (search-forward "* word")
36:       (org-end-of-subtree)
37:       (insert (format "\n** %s\n:PROPERTIES:\n:ADDED: %s\n:END:\n%s\n"
38: 		      word current-date translation))
39:       (org-back-to-heading)
40:       (org-set-tags ":VOCAB:")
41:       (org-schedule nil "+1d")
42:       (org-deadline nil "+7d")
43:       (org-content 2)  ; 只显示一级和二级标题
44:       (save-buffer))))
45: 
46: ;; 添加短语并分解单词
47: (defun pengshao-english-add-phrase (phrase)
48:   "Add a phrase and break it down into individual words with translations."
49:   (interactive "sEnter phrase to translate: ")
50:   (pengshao-english-init-file)
51:   (let* ((words (split-string phrase "[^[:alnum:]]+" t))
52: 	 (current-date (format-time-string "%Y-%m-%d")))
53:     (with-current-buffer (find-file-noselect pengshao-english-file)
54:       (set-buffer-file-coding-system 'utf-8)  ; 确保缓冲区使用 UTF-8
55:       (goto-char (point-min))
56:       (search-forward "* line")
57:       (org-end-of-subtree)
58:       (insert (format "\n** %s\n:PROPERTIES:\n:ADDED: %s\n:END:\n"
59: 		      phrase current-date))
60:       (dolist (word words)
61: 	(let ((translation (shell-command-to-string 
62: 			   (format "sdcv -n --utf8-output  %s "
63: 				   (shell-quote-argument word))))
64: 	      (clean-word (downcase word)))
65: 	  (insert (format "*** %s\n%s\n" clean-word translation))))
66:       (org-back-to-heading)
67:       (org-set-tags ":PHRASE:")
68:       (org-schedule nil "+1d")
69:       (org-deadline nil "+7d")
70:       (org-content 2)  ; 只显示一级和二级标题
71:       (save-buffer))))
72: 
73: 
74: 
75: ;; 定义全局快捷键
76: (global-set-key (kbd "C-c m e") 'pengshao-english-add-word)
77: (global-set-key (kbd "C-c m l") 'pengshao-english-add-phrase)
78: 
79: 
80: (provide 'pengshao-translate)
81: 
82: ;;; pengshao-english.el ends here
  • 支持通过参数调整输出格式(如 --color 启用彩色显示)

3.3. 脚本扩展

  • 结合 xclipnotify-send 工具,可实现“复制单词后自动弹出翻译结果”的功能

4. 4. 注意事项

4.1. 词典路径

  • 默认存放目录为 ~/.stardict/dic
  • 需手动创建并放置词典文件

4.2. 词典来源

5. 总结

通过 sudo apt-get install sdcv 安装的 sdcv 工具:

  • 为 Linux 用户提供高效的命令行词典解决方案
  • 尤其适合开发者、运维人员或偏好终端操作的用户
  • 轻量化设计和灵活扩展性使其成为离线学习/工作的实用工具

日期: <2025-03-16-075/Sunday>

作者: pengshao

Created: 2025-03-16 Sun 20:34

Validate