gkroam.el v2.0 released, 欢迎试用!

你设置 (gkroam-dynamic-brackets-mode -1) 试一下,看是不是 动态brackets 的问题,是的话就关掉这个minor mode。不是的话,用 emacs -Q 测试一下。我在Mac和Linux下是没有问题的,没有可用于测试的Windows。

我用的是doom emacs,这几天一直没用,今天升级后内存上到了2g,emacs直接卡死,我删除了gkroam的配置后重试,问题仍在,不知道是不是其他包的问题。

emacs -Q是原始的emacs模式,我刚才试是正常的,不知道是哪个包的问题。

更新 v2.3.2: 页面美化

  • 使用 gkroam-toggle-beautify 函数可以美化 gkroam page。
  • 主要作用是:加了 window-margin,统一所有 list bullet 格式,美化 checkbox。
  • 不建议在美化状态下编辑文本,有bug。建议在 正常模式 或 dynamic mode 下编辑。

具体效果看gif:

2赞

更新 v2.3.3 : gkroam page 的文件名可定制

  • 之前的 page 文件名为统一的 日期数字串,现在可以是任意文件名。在使用 gkroam-find 创建page时,会提示输入 filename 或 使用默认的 date number。
    这意味着,你可以很方便的将已有的笔记迁移到 gkroam 中。只需要将这些org笔记放到 gkroam 的文件夹下就可以了,不需要重新创建并整理成新的文件。

  • 修改了 gkroam-index 函数。不再创建 index.org 文件并打开,直接显示一个不与文件关联的 index buffer。

目前为止,gkroam的上手可以说相当的简单了,和使用原生org-mode没有区别。用户唯一需要做的就是在文件需要的位置使用 gkroam-insert插入各种 gkroam link。然后,gkroam 会自动帮你处理好反向链接 和 reference 的显示。

1赞

修复了关键问题

Gkroam每次在创建新的文件时,会在minibuffer跳出提示:“None existence agenda file, …”,我一开始以为是我的agenda配置的问题,怎么也解决不掉。谢谢 @zbelial 的issue, 终于让我找到了原因并解决!

哈哈 :smile:,我才发现老哥也在论坛里。

哈哈,是的。

也就是论坛不适合用来做问题记录,否则直接在这儿讨论也挺好。

更新 v2.3.5: 优化 “页面美化”

  • 修改函数 ‘gkroam-toggle-beautify’ 名为 gkroam-toggle-prettify, 表达更准确。
  • 美化模式默认关闭,设置 (setq gkroam-prettify-p t) 来全局打开。也可以使用上面的toggle函数随时开关。
  • 之前使用 overlay 来美化页面,显示不稳定,在变换bullet层级时有bug。现在使用 text properties 实现,可以实时渲染页面且显示稳定。支持所有的 org list bullet 类型,以及 checkbox。

具体效果看 GIF:

有个问题?

为啥 gkroam 是从 org-mode 继承的,而不是像 org-roam 定义一个 minor-mode?这样就可以在其他编辑非 org 文件时也能够立即调用相关的函数了,不然用户还需要自己定义相关的键绑定。

Gkroam is a lightweight roam repica, built on top of Org-mode.

另外,我不清楚 org-roam 是怎么实现的。如果要支持其他格式的文件(markdown?),没有org的原生支持,headline引用该怎么实现呢?似乎很麻烦。

org-roam还是基于org的,但是它要求开启org-roam-mode (这是一个minor-mode)。 使用minor-mode的一个好处是优先级高,可以防止keymap被覆盖。 这是个它的定义 org-roam-mode

此外,company-mode的额外依赖不是必须的,直接提供completion-at-point-functions就可以了吧?

更新 v2.3.6: 更加强大的 Linked Reference

之前的 linked reference 只支持在没有标题 且 链接位于 plain list 的第一级 item 时,可以在 reference中显示整个 list 结构。现在,经过完善已经非常强大了,实现了和 Roam Research 一样的效果。即,链接位于 plain list 的任意层级的任意位置,都会在 reference 中显示整个层级结构。

更新 v2.3.7: 只在插入标题链接的时候生成 headline id

  • 之前生成 headline id 的时机是每次保存时生成,且作用于所有 headline。这样对于使用 自动保存 的用户很不友好,且存在大量冗余的 id properties。 现在只有在使用 gkroam-insert 插入 headline 链接时生成对应页面的对应 headline 的 id 并缓存。

  • 对于多余的 id properties,可以手动删除,也可以不管,对使用没有影响。对于已经存在的冗余 缓存,使用 gkroam-rebuild-caches 命令清除所有旧的缓存,生成新的 只有 headline 引用的缓存。

1赞

更新:若干代码实现的优化

  • 根据 @Youmu 的建议, 设置 gkroam-mode 为 minor mode。按键绑定到 gkroam-mode-map, 优先级更高。(注意更新配置)

  • Link brackets 的渲染由 overlay 改为 text-properties 实现。

  • 删掉了 gkroam-toggle-dynamic ,动态模式在 text properties 中不好实现。且原本的代码有bug(光标不闪)。

  • 优化了 gkroam-smart-new 的逻辑,更加智能。

    • 当前 buffer 不是 gkroam page , gkroam-capture buffer, gkroam-index buffer 时,当前光标或region下的单词作为 title,直接创建或打开 page。
    • 当前 buffer 是 gkroam page,gkroam-capture buffer, gkroam-index buffer 时,当前光标下或 region 下的单词作为 title, 如果 page 不存在,插入链接并打开文件;如果 page 存在,只插入链接。
    • 如果当前光标下没有单词,也没有 region,调用 gkroam-find
1赞

在windows以及wsl的ubuntu系统里都安装了gkroam

wsl里面可以看到linked reference 而在win下面就没有显示linked refence也没有错误提示

exec-find 可以找到ripgrep(用scoop安装) 不知道怎么解决这个问题

我手头上没有用于测试的 windows, 你可以到 GitHub 开个issue,我回头研究一下。

更新 v2.4.0 : 性能提升 与 reference 优化.

  • 删除 gkroam-toggle-dynamic 模块
  • 使用 gkroam minor mode 代替 gkroam major mode
  • 使用 text properties 渲染 link,显示更稳定
  • 更多缓存,性能显著提升
    • 缓存 page filename, 页面打开速度显著提升.
    • 缓存 page reference,只在有改变时更新
  • linked references 优化
    • 显示 Org plain list 的每一级父 item
    • 高亮每一块 reference 区域
    • Backlink 可以精确返回到引用链接的行

更新 v2.4.1:

  • 实现类似 Roam Research ‘all pages’ 的 gkroam-index buffer.
  • 新增命令 gkroam-delete, 用于删除 page.
  • 重命名 gkroam-insert-new 命令为 gkroam-dwim.

2赞

更新 v2.4.2 : Unlinked References

  • 使用命令 gkroam-show-unlinked 在 side window 显示 unlinked references.
  • 点击链接将该条 unlinked reference 变成 linked reference.