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

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 引用的缓存。

headline-id

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.

unlinked-references

今天准备适用一下gkroam,发现这个root dir 不能向下发现子目录的文件。这个就很麻烦了,只能发现一级目录的文件

是的,不能。因为gkroam不关心文件名及文件的层级。不过改的话应该也不困难。你可以提个issue,我有空改一下。

好的感谢,其实 root-dir type sexp -> directory 是个好的方式,至少和org-roam org-brain一样了,用户可以无痛build-cache去用gkroam.至于multi-dirs. type -> list,这个就看作者你了,org-roam已经有相关的issue讨论,必要性其实不大。我的初衷就是用gkroam的轻量+org-brain的graph mindmap去代替org-roam.

gkroam 和 org-brain 配合效果怎么样? 我是用 org-brain 和 org-agenda 配合,有心研究研究roam ,但又担心太复杂,人老了,有点懒了

1 个赞

是的, org-roam我在windows上安装老费劲了, 还慢. 然后一怒之下我就去用obsidian了…

gkroam是无法和org-brain使用的,gkroam-link-mode还要适配org-brian-vis。就是它独特的语法设计{[xx][xx]} 导入到处其他格式都需要一次转换。如果到ref link已经涉及结构

,为啥当前的insert link还需要这种语法。不直接使用[id:xxx][headline]

一开始设计的时候,没有考虑到兼容性这些,就是按照我自己的方式来。这个问题reddit上也有人提过,我是有计划支持原生 org link 的,不过暂时没有时间搞。如果你非要用的话,可以试试这个链接转换补丁

怎么用的啊?gkroam-insert新建一个链接后,在链接上回车,创建了一个有linked reference的文件,然后在里面不能编辑?一直提示

newline: Text is read-only: “References region is uneditable.” [6 times]

是这样的,linked references 区域的内容都不能编辑。能够编辑的那个叫 block embed,我的另一个插件可以实现: roam-block

OK,原来编辑区域是在上面。