最近断断续续地又为 Emacs 和系统做了一些优化,渐渐地把它作为主要的主产工具了。
1. 改进的 Golden Dict 查词 Emacs 折腾小记 中提到使用 goldendict-ng 作为离线词典来查单词,但这里只涉及到了它在 Emacs 内部用法,后来我想着把这个查词工具应用得更广泛一些,把它变成 Windows 系统下生产时的主要查词工具。
这里实现的方式比较简单,直接写了一个 AutoHotKey 脚本,监听双击后文本选中的事件,一旦双击后选中了一个英文单词,那么立马调用 goldendict 来翻译。这里最关键的是利用了 goldendict 的命令行查词接口 goldendict [word]
。
脚本如下所示,具体的逻辑参考代码注释。这里还添加了一个在 goldendict 界面点击鼠标中键快速退出的功能,方便看完词的意思后直接跳回原来的界面,防止从原文本中分心。有了这个脚本,现在就可以方便地查询浏览器、PDF中的英文单词了。现在我已经几乎不用网络搜索查词,所有需求全部都能用
goldendict 解决。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
~LButton::
{
if (A_PriorHotkey != "~LButton" or A_TimeSincePriorHotkey > 200)
{
; 不是有效的双击(太慢了)
KeyWait "LButton"
return
}
; 当前窗口无效
if WinActive("ahk_class CabinetWClass")
{
return
}
; 备份剪贴板的内容
prev_clipboard_content := A_Clipboard
A_Clipboard := ""
Sleep 200 ; 选中文本延时
if WinActive("ahk_class Emacs")
{
Send "!w" ; alt+w 来复制 Emacs 中的文本
}
else
{
Send "^c" ; ctrl+c 来复制其他的软件中的文本
}
ClipWait(1)
Length := StrLen(A_Clipboard)
; 防止选中的文本不是英文单词
if (Length < 2 or Length > 20)
{
A_Clipboard := prev_clipboard_content ; restore clipboard
return
}
Run "C:\Program Files (x86)\GoldenDict\GoldenDict.exe " A_Clipboard ; 调用 goldendict
A_Clipboard := prev_clipboard_content
}
#Hotif WinActive("ahk_exe GoldenDict.exe")
MButton::ControlSend "{Esc}", , "ahk_exe GoldenDict.exe" ; 按鼠标中键退出 goldendict
效果如下:
2. 护眼 Pro Max 经常面对电脑屏幕难免会眼疲劳,即使用了 Emacs 折腾小记 中提到的昼夜不同主题,也会因为显示器的蓝光而眼睛酸痛。通过搜索发现 Linux 上的一款开源护眼神器 redshift ,令人惊喜的是它现在已经有了构建好的 Windows 的版本,可以直接下载下来使用。 redshift 根据你所在位置的经纬度计算出日出日落时间,再根据这个时间来调节屏幕的色温。所有配置都写在
%USERPROFILE%\AppData\Local\ 下的 redshift.config 文件中。
它仓库中自带了 redshift.config 的示例,只要稍作修改,放到上面说的目录中就行。
我做的修改如下:
1
2
3
4
5
6
7
-adjustment-method=randr
+adjustment-method=wingdi
-lat=48.1
-lon=11.6
+lat=30.58
+lon=114.27
为了让它开机就能自动运行,我又写了一个 Powershell 脚本:
1
Start-Process -FilePath "C:\Users\niall\source\tools\redshift\redshift.exe" -WindowStyle hidden
并在 startup 目录下创建快捷方式( win+r
运行,输入 shell:startup
进入这个目录),填入:
1
% windir % \System32 \WindowsPowerShell \v1 . 0 \powershell . exe - ExecutionPolicy ByPass - Command "& 'C:\Users \n iall\source \t ools \r edshift \a utostart.ps1'"
这样开机后 redshift 会自动启动并按时间来调整屏幕色温。我一直用到现在,感觉还不错。
虽然一直以来的观念是把任务交给更适合它的工具来完成,但因为笔记一直使用
Org Mode ,所以如果能直接在 Emacs 中看 PDF 那将是一件非常棒的事情。因为这里就可以充分利用多 Buffer 的优势,可以创建两个水平并列的 Buffer,一边读 PDF 一边写 Org Mode 笔记,也可以在写笔记的时候快速切换到 PDF 进行查阅,而后返回笔记进行编写,中间不会因为切换软件而打乱思路。
Emacs 有一个著名的包 pdf-tools 能出色地完成 PDF 显示的任务。在 Windows
下编译 pdf-tools 总是一个令人头痛的问题,后来我才发现是我的方法没有掌握好。
编译 pdf-tools 需要安装 MSYS2 编译工具链,这里选择直接用 winget 安装:
1
winget install - -id MSYS2 . MSYS2
安装后更新数据源,开始准备编译。打开 mingw64 终端:
1
2
3
4
5
6
7
8
9
10
# update
pacman -Syu
# add git to path
export PATH = /c/Program\ Files/Git/bin:$PATH
cd /home
mkdir src
cd src
git clone https://github.com/vedang/pdf-tools
cd pdf-tools
./server/autobuild
这样直接就能编译出一个 epdfinfo.exe 可执行文件,如果编译失败可能是由于缺少指定的包,使用 pacman 安装再重新编译就行了。
在 Emacs 中使用 M-x package-install
安装 pdf-tools
,再将上面生成的 epdfinfo.exe 拷贝到 ~/.emacs.d/elpa/pdf-tools-[version]/ 目录下。最后在 Emacs 配置文件中加入下面的设置就完成了。
1
2
( setenv "PATH" ( concat "C:\\msys64\\mingw64\\bin;" ( getenv "PATH" )))
( pdf-loader-install )
效果如下:
补充:因为 pdf-tools 有自己的文档搜索,所以如果装了 Swiper 等搜索插件的话会无法调用,因此需要在 pdf-view-mode 下将原来的 isearch 恢复:
1
2
3
4
( add-hook 'pdf-view-mode-hook
( lambda ()
( local-set-key ( kbd "C-s" ) 'isearch-forward )
( local-set-key ( kbd "C-r" ) 'isearch-backward )))
4. 为 Org 添加番茄钟 工作时很难一直专心做一件事,经常干累了就走神很长时候,用番茄钟来控制自己的工作与休息,让工作的效率保持在一个高的状态是不错的方法。
Emacs 中的番茄钟安装很简单,但在 Windows 上无法在倒计时结束的时候弹出提醒,经过查询后使用 Emacs China 论坛上大佬的代码修复了这个问题,整体配置如下:
1
2
3
4
5
6
7
8
9
10
( use-package org-pomodoro
:ensure t
:bind ( "s-t p" . org-pomodoro )
:config
( add-hook 'org-pomodoro-finished-hook
( lambda () ( org-notify "A pomodoro is finished, take a break!" )))
( add-hook 'org-pomodoro-short-break-finished-hook
( lambda () ( org-notify "A short break done, ready a new pomodoro!" )))
( add-hook 'org-pomodoro-long-break-finished-hook
( lambda () ( org-notify "A long break done, ready a new pomodoro!" ))))
效果如下:
5. 为 Org 添加 Zotero 链接 在写论文笔记的时候经常需要直接从 Org 文件跳转到 Zotero 相应的论文条目,
Org Mode 中不支持 zotero://
类型的链接,需要手动添加:
1
2
( org-link-set-parameters "zotero"
:follow ( lambda ( url arg ) ( browse-url ( format "zotero:%s" url ) arg )))
另外需要在 Zotero 中安装 Zutilo 插件,并在选项中勾选 copy select item
links ,这样就能直接在目录对应的论文条目上提取 zotero 链接,再把链接放到笔记中了。
6. 使用 org-download 来快速插入图片 虽然大部分时候只用 Org Mode 来处理文字,但免不了会有导出后查看的需求,这时图文并茂常常能让理解更加深刻一些。传统的插入图片的方法要将图片保存到特定目录,再在 Org 笔记中写图片链接,这对于截图、网页图片来说很不友好。 org-download 能很好地解决这个问题,它可以从链接中下载图片存到本地,再自己插入图片链接,也可以从剪贴板中提取图片,甚至直接调用截图工具。
在 Windows 下使用 org-download 不那么容易,要先安装 imagemagick 工具和
irfanview 工具,前者用来保存剪贴板中的图片,后者用来截图。这里有个坑是
irfanview 的图片保存路径是传统的 cmd 风格,所以要修改一下
org-download-screensot-file
变量。
1
2
3
4
5
6
7
8
9
10
11
( use-package org-download
:ensure t
:after org
:bind
( "<f7>" . org-download-clipboard )
( "<f8>" . org-download-screenshot )
:config
( setq-default org-download-image-dir "C:/Users/niall/OneDrive/note/org/images" )
( setq org-download-screenshot-method "irfanview /capture=4 /convert=\"%s\"" )
( setq org-download-screenshot-file
"c:\\Users\\niall\\AppData\\Local\\Temp\\screenshot.png" )) ;; irfanview do not accept / path
效果如下:
写在最后 现在的 Emacs 已经基本符合我理想中的样子,还有一些有关写程序的自定义配置考虑等后续更充实后放在(三)中发布出来。终于可以暂时不折腾,把精力放在更重要的专业知识和技能的学习中了。