org-zettel-ref-mode:快速制作 Zettelksaten 风格的文献笔记

org-zettel-ref-mode 迎来了第一个 PR 用户, 我不知道高兴还是难过, 因为他的修改有点片面.

1 个赞

世界都是草台班子, 没有那么多大佬的…
可能你说提pr那个是我…
每次 org-zettel 更新 sync 时, 会将 org-zettel overviews 文件的 ID 更改, 如果在其他文件 引用 ID 文件, ID 改变了就找不到源头文件了…

:rofl:

好的,让我们来定位一下。我希望你能更加详细的描述,好帮助我理解。

Org-roam 生成新的 ID 只有一个原因,就是这是一个新的文件。而从你的截图来看,概览窗口并没有保存为文件。但 org-zettel-ref-mode 的机制是,一旦唤出概览窗口,就会直接生成一个对应的概览文件,我给一个例子你看:

可以看到,概览文件一旦保存,肯定会会出现路径。但我看你在 PR 里的截图,概览窗口里只有一个临时 buffer。换言之,并没有生成一个 overview 文件,因此每一次 sync 的时候,org-roam 都会将它识别为一个新文件,生成一个新的 ID。

现在,我希望你能复现这个过程,就是在 org-zettel-ref-mode-init 之后,并没有向磁盘写入 overview 文件。

我这里复现,没有复现出你的问题,你在源文件里 init, ID 不会发生变化。 反倒是有另外一个问题,init 一次会生成一个新的概览窗口。这个回头修一下。

我想这应该足够证明 ID 在每次保存文件都被改变了吧…
还是其他的问题导致呢?
还有一个更详细的在 github 上传了, 文件太大这里上传不了…
最后, 谢谢你的工作, 让大家受益 动画

我看了你在 PR 上提供的更加完整的版本,看上去像是 org-zettel-ref-enable-autosync 这个函数导致了冲突。可以的话,把你的 message 复制给我看看,有助于我缩小问题的范围。

另外,按照我的设计,当概览窗口没有开启的时候,笔记和标记都无法同步到概览文件,因为此时 org-zettel-ref-mode 并没有生效。org-zettel-ref-mode 的生效仅限于概览窗口和源文件窗口并列存在的时候,否则是不生效的。

但我看到你提供的 GIF 里,概览窗口并没有启动。你有修改了什么吗?或者在配置里自定义了什么?

不客气,喜欢就是对我最大的支持。

你还是看一下 github 上的 gif 动图吧…
我以最小的 emacs -q -l 测试命令了…

很快就会复现的(如果确实有问题的话)…

新版已经解决了你提到的问题。

版本 0.3 (2024-09-03)

  • 完善了与 org-roam 的集成:
    • 增加了条件加载和错误处理机制,提高了稳定性
    • 优化了数据库操作,提高了效率
    • 改进了文件处理方式,增强了兼容性
    • 新增了数据库状态检查功能,方便调试
  • 增强了 Conda 环境的支持:
    • 提供了更灵活的 Python 环境配置选项
    • 改进了 Conda 环境的初始化和激活过程
  • 改进了文件名生成和处理的逻辑:
    • 增加了文件名清理功能,提高了健壮性
    • 优化了不同模式下的文件命名策略
  • 优化了概览文件的同步机制:
    • 实现了选择性更新,只更新变化的部分
    • 改进了缓冲区处理,减少了文件 I/O 操作
    • 优化了内容生成过程,提高了效率
  • 新增了调试功能:
    • 添加了详细的日志输出,方便问题排查
    • 提供了更多的错误信息和状态检查选项
2 个赞

Github 的仓库上又有用户来提 Issue 了,但我对 Python 在 Windows 下的运行环境不熟悉,不知道怎么去写条件判断语句,有没有朋友可以帮忙分析一下:

Hi!

I identify myself with your idea of using org-mode to reading (I use logos-mode to study). So I would like to try your package.

I have added org-zettel-ref-mode.el to my path, and (require 'org-zettel-ref-mode) to my init, but I get this message:

load-with-code-conversion: Cannot open load file: No such file or directory, conda.

Windows 11
GNU Emacs 29.3 (build 2, x86_64-w64-mingw32) of 2024-03-24

因为你的包依赖 conda.el
而它的Emacs没有安装过 conda.el 相关包…

# 测试完毕
emacs -q -l org-zettel-ref-mode.el
1 个赞

了解了,我看看怎么处理。谢谢!

虽然不是什么大成绩,但来自用户的肯定总是让人愉悦。

我还不知道怎么上 Melpa,好像说需要先 fork melpa,然后将自己的包作为一个 PR 提交?不知道这个理解是否正确

2 个赞

org-zettel-ref-mode 0.3.1 版本更新,虽然是一个小版本更新,但在后端带来的变化还是很大的,主要是修复错误和提升了健壮性。

  • 兼容 emacs 30 以后的版本
  • 概览文件现在有更加优雅的文件名,减少 overview 这个字眼的重复出现
  • 修复偶发的恶性 (setq, 5) 错误
  • 去除 org-zettel-ref-mode.el 代码里对 conda.el 的依赖,将 Python 运行环境的判断完全交给 convert-to-org.py
    • 自动通过 python venv 命令设置虚拟环境,并安装所需的库(!注意:更新到该版本后启动 convert-to-org.py 时,会重新安装第三方库,如果对运行环境有洁癖,请自行手动清理)
  • 改进概览文件的同步机制,不再出现针对同一个源文件重复新建概览文件的情况,同时改进功能的健壮性和稳定性
    • 使用哈希表记录源文件与概览文件之间的映射关系,有一点很棒,你不必手动设置哈希表文件的位置
    • 为此概览文件的文件头增加了新的属性块: #+SOURCE-FILE: 以确认映射关系
    • 新增命令:
      • org-zettel-ref-check-and-repair-links - Check and repair links between source files and overview files.
      • org-zettel-ref-maintenance-menu - Display a menu for org-zettel-ref-mode maintenance operations.
      • org-zettel-ref-refresh-index - Manually refresh the overview index.
      • org-zettel-ref-rescan-overview-files - Rescan the overview directory and update the index.
      • org-zettel-ref-status - Display the current status of org-zettel-ref-mode.
4 个赞

使用的最新版本,初始化报这个错误

Debug: Entering org-zettel-ref-init Debug: source-buffer = # let: Wrong number of arguments: ((t) (file-path content source-file) “Create a normal overview file at FILE-PATH with CONTENT and SOURCE-FILE property.” (if (file-exists-p file-path) nil (let ((temp-file file-path) (temp-buffer (generate-new-buffer " temp file" t))) (unwind-protect (prog1 (save-current-buffer (set-buffer temp-buffer) (insert (format "#+SOURCE_FILE: %s " source-file)) (insert (cdr content))) (save-current-buffer (set-buffer temp-buffer) (write-region nil nil temp-file nil 0))) (and (buffer-name temp-buffer) (kill-buffer temp-buffer)))))), 1 winum-select-window-by-number: No window numbered 2

我无法复现。需要提供更多信息:

  1. emacs 版本
  2. 你用什么笔记包,org-roam,denote,还是原生 org?
  3. 你的操作系统(如果是 Windows,我缺乏相关环境测试)
  4. 你的相关配置
  5. 也可以附上 message buffer 的 debug 消息,我几乎为每一步都做了 debug 测试和反馈记录,这个消息让我清晰知道程序执行到哪一步发生了 bug。

有这些消息,可以帮我更好的定位问题。因为我如果是更新,肯定是经过测试,可以稳定使用才更新的。

也麻烦直接到 Github 提 issue 养成好习惯, 这可以帮我追踪不同的 bug 的来源。 手动在不同地方记录还是太累了。

1 个赞

不好意思,没有说清楚,我的是emacs28.1,Ubuntu20.04,doc里面好像没有说明支持的最低emacs版本,在source code里面看到了最低29.3,可能是我的emacs版本比较低。

也不一定,那个版本只是写着我在用的 emacs 版本。没有严格测试多个版本,因为整体插件是依赖 org-mode 的 target-link 机制,以及 Emacs 的 minor-mode 机制。但这些都是多年稳定的机制,没有什么太大的变化。

相比起来,你启用的模式影响比较大,不同模式,都有不同的逻辑对文件进行处理。如果越能详细地提供你的信息,我越能清楚问题发生在哪里。表面报错消息只是结果,但不是原因。

分享正在用这个插件看电子书,感觉还是很棒的,要不要加一个移动概览窗口的功能呢?

1 个赞

抱歉,在 0.3.1 到 0.3.2 中间,清理代码,让代码结构化,出现了误操作,将未修改完成的代码上传到了 Github。0.3.2 主要是后端的优化,代码量减少了将近二分之一,现在运行的效率也有所提升。

v0.3.2 (2024-09-24) 改善 Org-roam v2 兼容性:可以将文献笔记的记录更新到 Org-roam 的数据库 文件命名的细微改善 精简代码,模块化

又迭代了一次小更新:

重要改进:运行 org-zettel-ref-sync-overview 后,不会影响到概览文件文件头,只更新必须更新的部分。

改进:代码模块现在更合理。

修复:funcall-interactively: Symbol’s value as variable is void: err。

修复:一大堆从编译器找到的 Bug,无用函数/变量。

这一次,稳定性应该得到了增强。另外,