官方的 emacs 也是用 mingw-w64编译的,默认是支持动态模块的,可以看 module-file-suffix
变量的值判断是否支持动态模块,支持的话值在 Windows 上应该是 .dll
没有加载成功的原因应该是 xapian-lite.dll
依赖一些动态库,但是那些动态库 emacs 找不到。
可以通过 ldd xapian-lite.dll
查看依赖哪些动态库,将没有的拷贝到 emacs.exe 目录
或者将 mingw64 的 bin 目录加到环境变量 PATH 中,eg. C:\msys64\mingw64\bin
3 个赞
大佬太强了!我的 Emacs module-file-suffix
返回的确实是 .dll
,用 ldd xapian-lite.dll
查看的结果是这样的:
确实除了几个 windows 系统文件以外,都在 mingw64 的 bin 目录下。把 mingw64 的 bin 目录加到环境变量 PATH 后,Emacs 里运行
M-x xeft
可以正常出
xeft
的界面了。
这里还踩到的一个坑是本来 xeft-database
设置的是 ~/xeft_db/
,结果报 xeft-full-reindex: Xapian library error: "DatabaseCreateError: c:/Users/xxx/xeft_db/: mkdir failed (File exists)"
,设置成 ~/xeft_db
(去掉最后的斜杠) 后解决了这个问题。
不过现在还有两个小问题,一个是找到结果后,在条目上执行 xeft--find-file-at-point
(回车) 后跳转的位置不对,不是关键词位置;另外似乎 Github 上的动图 (如下) 是实时出结果,我这边每次输入检索式后需要执行 xeft-refresh-full
(默认是 C-c C-g
) 后,才能更新结果。
出结果是绑定的 SPACE 键,gif 上应该不是实时的,应该是按了空格键
好吧,那应该就不是问题了。但是我试了一下,我这边在检索式上按空格没有刷新结果,我看了默认的 xeft-mode-map
是这样的:
(defvar xeft-mode-map
(let ((map (make-sparse-keymap)))
(define-key map (kbd "RET") #'xeft-create-note)
(define-key map (kbd "C-c C-g") #'xeft-refresh-full)
(define-key map (kbd "C-c C-r") #'xeft-full-reindex)
(define-key map (kbd "C-n") #'xeft-next)
(define-key map (kbd "C-p") #'xeft-previous)
map)
"Mode map for `xeft-mode'.")
不知道是不是作者用空格绑定了 xeft-refresh
函数。
readme 提到了按空格预览,不需要任何配置
,可能是你的emacs配置影响了吧
空格绑定的是 push-button
1 个赞
谢谢!我明白你的意思了,可能我没有表达清楚,我这边在条目上是按空格是可以预览的。
我是说在输入检索式的时候,似乎这个 gif 上在敲击检索式的时候,下面的检索结果就在刷新,deft
也是这样的,但是我用 xeft
的时候,输入检索式的过程中下面的检索结果不是实时更新的,我每次要按 C-c C-g
或者 M-x xeft-refresh
才能更新。
重启了下 Emacs,现在 xeft
里也能够输入检索式的时候实时更新下面的结果了
非常感谢大家的帮助!总算用上 xeft
了,确实检索速度还挺快的。