Resources

Worg

Manual

这部分放的应该是单纯的对 manual 的笔记

Document Structure

关于 Visibility

org#Visibility Cycling

标题的 :VISIBILITY: 属性很好用!
我可以毫无心理负担地把长文本复制进来

Structure Editing

org#Structure Editing

org-narrow-to-subtree
C-x n s SPC m s n
Narrow buffer to current subtree.

org-narrow-to-block
C-x n b
Narrow buffer to current block.

org-narrow-to-element
C-x n e
Narrow buffer to current element.

widen
C-x n w SPC m s N
Widen buffer to remove narrowing.

Markup for Rich Contents

footnotes

org#Creating Footnotes
相比 markdown 的脚注来说,这相当好用

  • STRT 我希望 org-mode 的 footnotes 可以用 类似 lsp-mode 里那种基于 posframe 的预览窗口直接在光标旁边显示

    基本上捣鼓成功了,剩下的就是要处理好中文折行了

    现在想想,目前的实现不是一个好的方案,如果在光标附近显示的话基本上绝对会影响上下文!
    在下方加一个 narrow 的 popup 窗口是更好的设计方案
    应该使用 org-narrow-to-element 吧,但是这样会有不能在脚注里放空行的问题
    还是说脚注里就不应该放空行?

  • org-footnote-action 是相关最重要也最常用的命令

    默认绑定 C-c C-x f
    doomemacs 中,绑定的是 SPC m f

    具体行为是这样的:

    • 在可创建脚注的地方1,默认就是创建脚注

    • 在脚注上,就是来回跳转

    • 在其他地方就是唤起一个操作菜单

      keyaction
      sSort the footnote definitions by reference sequence.
      rRenumber the simple ‘fn:N’ footnotes.
      SShort for first r, then s action.
      nRename all footnotes into a ‘fn:1’ … ‘fn:n’ sequence.
      dDelete the footnote at point, including definition and references.

Images

  • DONE 如何保持缩放时图像和文字的比例一致?

    其实不应该随着缩放,
    latex preview 才应该随着缩放

Embedded LaTeX

org-latex-preview | Worg - org-tutorials

  • TODO org-latex-preview 并非是异步的
  • TODO 关于 latex_header

    我刚知道这个 #+LATEX_HEADER
    对于 org-latex-preview 来说会直接从整个文件中提取
    并不是 olp 下的
    这问题挺大的啊

    我想要改成只会按顺序读取 olp 下的 latex_header
    不过这样也可能会有点问题

  • TODO 我想要有删除缓存的 svg 文件的快捷键

    我明明 header 改过了,它还是认为我的环境没改!
    明明我记忆里他是会把header加进来求哈希的

  • keybinding

    C-c C-x C-l (org-latex-preview)

    • Produce a preview image of the LaTeX fragment at point and overlay it over the source code.
      If there is no fragment at point, process all fragments in the current entry—between two headlines.
    • When called with a single prefix argument2, clear all images in the current entry.
      Two prefix arguments produce a preview image for all fragments in the buffer,
      while three of them clear all the images in that buffer.
  • Using CDLaTeX to enter math in org-mode

    理论上是好用的,但是为什么上下标 _^ 没有按照我设想的工作呢?
    找到了解决方案,org 的 +pretty 模块中 org-modern 配置的 :init 里有设置 org-pretty-entities 为 t
    现在自己重新配了 pretty 配置,没有问题了

    • 但是我同时有想要保留非 latex 环境中的这个功能。。。

      比如打单个希腊字母的时候有这东西就很方便 μ φ 这样的

Tables

doomemacs 前导键: SPC m b

keyexplanation
(previous table cell
)next table cell
{beginning of table
}end of table
M-h / M-lmove table column left / right
M-k / M-jmove table column up / down
vaeselect table cell
vaEselect table row
varselect whole table

TABS-TAB 可以在前后 cell 之间跳转,同时会执行 org-table-align
RET 下一行(保持在同一列)
M-a 移动到当前字段的开头,如果已在开头,移到上一个字段的开头
M-e 移动到当前字段的末尾,如果已在末尾,移到下一个字段的末尾,如果已在最后一个字段,创建新的字段

[M/M-S/S]-LEFT/RIGHT/UP/DOWN 这里有十二个形式统一的快捷键:

  • M- 表示移动当前行或列
  • M-S- 表示删除和添加新的行列(上左是删除
  • S- 表示和上下左右交换当前 cell

org-table-create-or-convert-from-region
SPC m b c C-c |
这个命令非常好用

如何在表格中使用 | 字符

需要打成 |
这很离谱,是面向 latex 设计的
最重要的一点是他不会自动渲染成 |
如果要让其后面紧连其他东西,需要写成 |xxx
依然是面向 latex 的设计

TODO 如何在一个块里显示多行内容? ATTACH

Org-mode Frequently Asked Questions 中回答了:org-table 不支持
但是可以通过 table.el 支持

Why org-table and table.el aren’t unified?

(更新)org-supertag 4.0 发布 - #46,来自 yibie - Org-mode - Emacs China
这里有一种新的 table view 实现

Tags

tag 会自动向下继承!

org-set-tags-command | C-c C-q | SPC m q 添加 tag
若在标题上甚至可以直接 C-c C-c

Capture

Org mode 的 capture 怎么用好它 - Org-mode - Emacs China

org-capture SPC X
org-capture-templates

和 diary 不一样,默认情况下创建的 journal 是不会收集进 agenda 的!

C-u C-u 跳到上一个存下的笔记
我好像打不出来 C-0 和 C-1

TODO 我想要和 org-roam 配合,用 org-roam-find 来定位 target

差不多就是这样了!非常简单

(push
 '("r" "org-roam capture" entry (function org-roam-node-find) "* %u %?\n%i\n%a" :prepend t)
 org-capture-templates
 )

如何写 templates

  • keys

    按什么键

  • description

    描述

  • type

    entry ”* %?”
    item ”- %?”
    checkitem ”- [ ] %?”
    table-line ”| %? |”
    plain 纯文本

  • target

    (file “path/to/file”)
    Text will be placed at the beginning or end of that file

    (id “id of existing Org entry”)
    File as child of this entry, or in the body of the entry

    (file+headline “path/to/file” “node headline”)
    Fast configuration if the target heading is unique in the file

    (file+olp “path/to/file” “Level 1 heading” “Level 2” …)
    For non-unique headings, the full outline path is safer

    (file+regexp “path/to/file” “regexp to find location”)
    File to the entry matching regexp

    (file+olp+datetree “path/to/file” “Level 1 heading” …)
    Will create a heading in a date tree for today’s date.
    If no heading is given, the tree will be on top level.
    To prompt for date instead of using TODAY, use the
    :time-prompt property. To create a week-tree, use the
    :tree-type property.

    (file+function “path/to/file” function-finding-location)
    A function to find the right location in the file

    (clock)
    File to the entry that is currently being clocked

    (here)
    The position of point

    (function function-finding-location)
    Most general way: write your own function which both visits
    the file and moves point to the right location

  • template

    nil
    string
    file
    function

    %[pathname]
    %(sexp)
    %<…>
    %t
    %T
    %u, %U
    %i 这是用来粘贴选中的内容的,可能还挺有用?但是有一点问题,我可能在未选中的时候想要让它那行直接不出现,不知道怎么处理
    %a 附加批注的链接,但是他怎么会直接把选中的部分作为 description 啊,这太怪了
    %A
    %l
    %L
    %c
    %x
    %k
    %K
    %n
    %f
    %F
    %:keyword 这里还有一些选项,暂时不管
    %^g
    %^G
    %^C
    %^L
    %^ {prop}p 这里实际上没空格
    %^ {prompt}
    %^ {prompt}X
    %?
    %\1 … %\N

  • properties

    :prepend
    :immediate-finish
    :jump-to-captured
    :refile-targets
    :empty-lines
    :empty-lines-before
    :empty-lines-after
    :clock-in
    :clock-keep
    :clock-resume
    :time-prompt
    :tree-type
    :unnarrowed
    :table-line-pos
    :kill-buffer
    :no-save
    :hook
    :prepare-finalize
    :before-finalize
    :after-finalize

Attachment

有点惊艳我了

它有硬链接支持!

通过节点 id 在 .attach 目录自动创建和 id 对应的文件夹来和做到和一个标题对应的,没有表示附件的链接文本

SPC m a R 打开对应附件目录的 dired buffer

Attach from Dired

org-attach-dired-to-subtree 把 dired buffer 中标记的项目添加为当前标题的附件
tmd,没法添加到文件节点,我之后要自己给他改个 roam 适配出来

Citation handling

有被简称 oc 的说法

org-ref 有什么区别?

Resources

我在这里放一下 org 下引用相关的资料

Basic citations in Org (Part 5) | William Denton
这里一系列5篇文章只是专注于 org-cite 的

Exporting

Exporting (The Org Manual)

Show the name of a code block in org-mode, when export?

LaTeX Export

  • Quoting LaTeX code

    Code embedded in-line in a paragraph.

Texinfo Export

org#Texinfo Export

info 文件就是 texinfo 格式的

我们可以用
org-texinfo-export-to-texinfo 来导出
org-texinfo-export-to-info 来导出

ODT Export

org#OpenDocument Text Export

应该可以用这个转换到 DOCX

Publishing

Publishing (The Org Manual)

Blogging: org-publish vs ox-hugo? What’s your opinion/experience on these 2?

Dates and Times

SPC m d 唤出 +date/deadline 菜单
d deadline
s schedule
t active timestamp C-c .
T inactive timestamp C-c !

是否 active 区别就是是否在 agenda 里显示

有一点难受的是默认不会输入当前具体的时和分

Timestamps

org#Timestamps

SPC m d tC-c . 是激活的
C-c ! 是不激活的

不知道为什么时间范围不能在 agenda 里优雅地显示

Clocking Work Time ATTACH

同一时间只能存在一个 clock

  • 单任务专注:人同一时间只能专注做一件事
  • 避免多任务陷阱:多任务会降低效率和质量
  • 时间不重叠:实际时间资源不可能同时分配给多个任务
  • 当你开始新任务时,自动结束前一个任务的计时
  • 强制你明确当前在做什么
  • 鼓励完成当前任务再转换

用这个东西还可以做到更方便的跳转!
在记录你花费的时间的同时可以作为一个 jump list

  • 它有什么用? ARCHIVE

Effort Estimates

org#Effort Estimates

Org-mode 中的 effort 是任务预估工作量的概念:

  1. 基本概念

    • 预估时间:任务预计需要多长时间完成
    • 工作量单位:通常用时间表示(如 1h, 2d, 30min)
    • 规划工具:帮助任务安排和时间管理
  2. 设置 Effort

    ​* TODO 写报告
    :PROPERTIES:
    :Effort: 2h
    :END:
     
    * TODO 项目设计
    :PROPERTIES:
    :Effort: 1d
    :END:
  3. 快速设置
    SPC m c E org-set-effort 设置 effort
    SPC m c e org-clock-modify-effort-estimate 修改当前 clock 对应的 effort(只在clock激活时有用)

  4. 在 Agenda 中显示

    • 可以看到预估时间 vs 实际时间对比
    • 在 agenda view 中设置 effort c e
    • 在 agenda view 中通过 effort 来筛选条目(只显示大于或小于一定effort的条目) s e
  5. Column View

    COLUMNS: %25ITEM %TODO %3PRIORITY %TAGS %Effort{:} %CLOCKSUM
    以表格形式显示任务、优先级、effort 和实际用时

  6. 实用价值

    • 时间规划:合理安排一天的任务
    • 工作量评估:项目时间预算
    • 效率分析:预估 vs 实际用时对比
    • 容量规划:避免安排过多任务
  7. 与 Clock 结合

    • Effort = 预估时间
    • Clock = 实际时间
    • 对比两者帮助改善时间预估能力

这样可以更科学地管理时间和任务。

Agenda Views

org#Agenda Views

有用的快捷键

org-agenda SPC o A

H L 修改 当前条目的时间到上/下一天
[ ] 查看上/下一周的 agenda3
I org-agenda-clock-in 对任务开始计时
O org-agenda-clock-out 对任务结束计时
X org-agenda-clock-cancle 对任务取消计时

g d org-agenda-goto-date

org-agenda-goto-calendarorg-calendar-goto-agenda
共用 g c 快捷键,很方便

Diary 集成

Calendar/Diary integration ¶

但是我选择的方案是 org-roam-dailies
希望有它的集成

重复任务

1. 使用重复任务标记
 
在 SCHEDULED 时间戳中添加重复间隔:
* TODO 每周任务
SCHEDULED: <2025-09-27 Fri +1w>
 
当你标记为 DONE 时,Org-mode 会自动创建下一周的 schedule。
 
2. 重复间隔选项
 
- +1w - 每周重复(从完成日期算起)
- ++1w - 每周重复(从原定日期算起)
- .+1w - 每周重复(从今天算起)
 
3. 在 agenda 中处理重复任务
 
- 按 t 标记为 DONE,会自动生成下一次的 schedule
- 按 C-c C-t 选择状态

Custom Agenda Views

org#Custom Agenda Views
说实话这东西挺重要的,暂时还不会

Refiling and Archiving

Refile and Copy

Archiving

org#Archiving

分为两种 archive
一种是移动到单独的 org-archive 文件,一种是打上 ARCHIVE tag

  • 作用

    快速“收档”已完成或不再活跃的条目,把主文件保持简洁。
    归档后仍可检索:被移到归档文件或 ARCHIVE 抽屉中,搜索/agenda 可选是否包含。
    保留原时间戳、属性、笔记,避免直接删除导致信息丢失。
    可按日期树归档,形成按年月日分层的历史记录,方便回顾。

  • 配置要点

    • org-archive-location 设置目标位置与格式,例如:
      • “%s_archive::” → 将整个子树移到同名 _archive.org 文件。
      • “%s::datetree/” → 在同一文件的日期树下存放。
    • org-archive-save-context-info 控制记录哪些上下文信息(时间、路径等)。
    • agenda 过滤:org-agenda-skip-archived-treesorg-agenda-archives-mode 控制是否显示归档项。
    • 自动化:结合 org-expiry 或自定义 hooks,在状态变为 DONE 后自动归档。
  • 使用场景示例

    每周清理已完成任务,保持当前项目视图简短。
    将历史会议记录移入日期树归档,方便按日期回溯。
    对长期参考信息用 archive sibling 方式,既不干扰当前大纲又留在同文件。

org#Hyperlinks

Radio Targets

Org 可以自动将普通文本中出现的某些目标名称转换为链接。
因此,无需显式创建链接,文本即可连接到其位置的目标。

无线目标由三个尖括号包围。 例如,目标‘ My Target ’会使普通文本中每次出现的‘ my target ’激活为链接。
Org 文件仅在首次加载到 Emacs 中时自动扫描无线目标。

要在编辑过程中更新目标列表,请将光标置于目标上或目标处按下 C-c C-c 。

这东西在记课堂笔记的时候真tm好用,一些重要性没有达到需要新建标题的专有名词就可以用这种形式形成链接

  • 裸链接

    还有这种形式的链接 Hyprlinks
    这是裸链接,加尖括号是为了防止标点干扰(可能中间有空格之类的)

  • CUSTOM_ID

    这里提到了 CUSTOME_ID 把跳转范围限制在了当前文件中,这其实是非常好用的

    解决的问题是标题可能会被修改让标题链接失效的问题

  • 关于 org-id-link-consider-parent-id

    我还可以对不希望有全局 ID 的标题设置相对父标题的链接,这可以避免全局id污染,但是也就没有双向链接的功能了
    对标题的链接和对 custom_id 的链接都行
    在只有 CUSTOM_ID 的情况下,它会存两个链接,一个是相对于文件的(这个是在前,有点违背我的直觉),一个是相对于最近的有全局ID的父节点的
    在同时有全局 ID 和 CUSTOM_ID 的情况下,只会记录两个链接,一个是全局id的链接,一个是相对于文件的自定义id的链接

  • HOLD 我希望能通过加一个 C-u 前缀直接在侧面打开

    相关函数:

    但是仔细想想这个需求又是伪需求,手动把窗口划分好其实是更优的方案,也不会多费多少事

    但是对 pdf 预览来说很不方便,一般来说有复用已打开的相同文件的buffer来说更常用

org#Search Options

  • DONE 在 org-mode 中打开链接出现了问题

    这东西的行为貌似有点脑残,很多时候会整出无效链接出来
    比如在选中一部分文本、在第一个标题前 的时候

    问题在于 org-mode 里的 follow link 的函数出了问题!
    会出现错误的 No match!
    org-link-search 的问题
    最后发现是 org-link-search-must-match-exact-headline 这个变量的问题,
    如果让它保持默认值,后面的 regular search 就无论如何都搜不到,这太离谱了,
    改成 nil 就能正常工作了。

    我的总结是,这sb玩意儿就不该改默认值!!!
    浪费我时间(是官方改的不是我改的)

Working with Source Code

:header-args:cpp: :tangle geometry.cpp :main no
可以把参数加在 PROPERTIES 里

DONE 代码块的代码高亮有很大问题!

这些绿色看得我好恶心啊
改下 org-block 的颜色就行了

  • 并不是 doomemacs 的问题,我用 emacs -q 打开有相同的问题

    是 org-mode 的问题?

    找到了问题的来源:
    org-src-fontification buffer 没有启用 elisp-tree-sitter

    没有成功啊,不想尝试了,试了一下用内置的 c++-ts-mode
    高亮效果没有外置的好。。。不太想用啊,这个问题先搁置吧

相关命令

可以用 org-edit-src-code 或者 C-c ' 来编辑代码块内的代码

  • DONE C-c ' 进入的 c++-mode 没有正常的 lsp-mode 支持

    • 初步成果

      Documentation for using lsp-mode in temp org-src-mode buffers
      这里提供了一种方案

      (defun org-babel-edit-prep:java (babel-info)
        (setq-local buffer-file-name (->> babel-info caddr (alist-get :tangle)))
        (lsp))

      发现的问题是,lsp 模式的确是开起来了,但是功能不工作!

      它本质还是和 tangle 到的文件做交互,并不能同步到当前的代码块里

    • 中级成果

      tecosaur’s Doom Emacs Configuration

      (cl-defmacro lsp-org-babel-enable (lang)
        "Support LANG in org source code block."
        (setq centaur-lsp 'lsp-mode)
        (cl-check-type lang string)
        (let* ((edit-pre (intern (format "org-babel-edit-prep:%s" lang)))
               (intern-pre (intern (format "lsp--%s" (symbol-name edit-pre)))))
          `(progn
             (defun ,intern-pre (info)
               (let ((file-name (->> info caddr (alist-get :file))))
                 (unless file-name
                   (setq file-name (make-temp-file "babel-lsp-")))
                 (setq buffer-file-name file-name)
                 (lsp-deferred)))
             (put ',intern-pre 'function-documentation
                  (format "Enable lsp-mode in the buffer of org source block (%s)."
                          (upcase ,lang)))
             (if (fboundp ',edit-pre)
                 (advice-add ',edit-pre :after ',intern-pre)
               (progn
                 (defun ,edit-pre (info)
                   (,intern-pre info))
                 (put ',edit-pre 'function-documentation
                      (format "Prepare local buffer environment for org source block (%s)."
                              (upcase ,lang))))))))
       
      (defvar org-babel-lang-list
        '("go" "python" "ipython" "bash" "sh" "cpp"))
       
      (dolist (lang org-babel-lang-list)
        (eval `(lsp-org-babel-enable ,lang)))

      依然有很多 bug
      比如说 format 一下,他会自动 double 我的代码
      rename 时不时抽风,会失效
      lsp 说我定义的 id 变量名是重定义的。。。实际上正常 buffer 没有这个报错
      lsp-mode 的 sideline 没法显示

      • 分析

        这段代码是一个 Emacs Lisp 配置,用于在 org-mode 的代码块中启用 LSP(Language Server Protocol)支持。让我解释一下它的工作原理:

        核心函数 lsp-org-babel-enable

        这个宏接收一个语言参数(如 “python”, “go” 等),为该语言创建必要的函数来在 org-babel 代码块中启用 LSP。

        工作流程:

        1. 动态函数生成:为每种语言创建两个函数:

          • org-babel-edit-prep:LANG - org-babel 的标准钩子函数
          • lsp—org-babel-edit-prep:LANG - 内部 LSP 启用函数
        2. 临时文件处理:

              (let ((file-name (->> info caddr (alist-get :file))))
              (unless file-name
                  (setq file-name (make-temp-file "babel-lsp-")))
              (setq buffer-file-name file-name)
          • 从 org-babel 信息中获取文件名
          • 如果没有文件名,创建临时文件
          • 设置缓冲区的文件名(LSP 需要知道文件类型)
        3. LSP 激活:(lsp-deferred) 延迟启动 LSP 服务器

        4. 智能集成:

          • 如果已存在 org-babel-edit-prep:LANG 函数,则添加 advice
          • 否则创建新的 prep 函数

        使用示例

        配置中为这些语言启用了 LSP:

        • go, python, ipython, bash, sh, cpp

        当你在 org 文件中编辑这些语言的代码块时(C-c ’),会自动获得:

        • 语法高亮
        • 代码补全
        • 错误检查
        • 跳转到定义
        • 重构支持

        这样就能在 org-mode 的代码块中享受完整的 IDE 体验。

      • 经验总结

        目前和 cp-cpp.el 配合是可行的,就是有一些问题

        对变量的 go definition 会出问题

  • WAIT C-c ' 进入的 c++-mode 不能自动加载头文件

    这个我也不想着实现了

关于文学编程

:results 有 value 和 output 的选项

  • output 对应的是 scripting mode
  • value 对应的是 functional mode

C/C++

C, C++, D Source Code Blocks in Org Mode
虽然这里说不需要导入 stdio.h 但是实际上需要,这个文档过时了!

:main no
来让它不 tangle int main(){ return 0; }

有点逆天了
CODE 这里发现,下面这行代码在注释掉第一个 ~ 的时候才能有高亮

for (; ~p && samPool[p].next[c] == qIdx; p = samPool[p].link) samPool[p].next[c] = clone;

这绝对是 bug

Miscellaneous

Org Syntax

org#Org Syntax

org-lint
好东西啊,就是不知道为什么性能不对劲,非常慢

Structure Templates

Structure Templates (The Org Manual)

org-insert-structure-template C-c C-,

  • 我打算用 notes block 来写我的答题过程,用 quote block 来标记错误的解答
  • 可以通过下面这些加上 Tab 快速添加模板

    <qquote block
    <ssrc block
    <eexample block
    <ccomment block

    这是 org-tempo 子模块提供的功能4

    在 doom 里是由 snippet 模块提供的功能

Protocols

Protocols (The Org Manual)

  • TODO 如何让所有网站都自动允许进行 org-protocol 跳转?

org 核心组件

org-element

这是一个 org-mode 中的重要概念
Docstrings from ‘org-element.el’

现在默认启用缓存,缓存目录在 org-persist-directory 找到

org-babel

Babel: Active Code in Org

一般简称 ob

关于代码块的详细信息应该查看 Working with Source Code

关于 org-babel-tangle-jump-to-org

需要有 :comment link 标签

key bindings

Active key bindings in code blocks:

Key bindingFunction
C-c C-corg-babel-execute-src-block
C-c C-oorg-babel-open-src-block-result
M-UPorg-babel-load-in-session
M-DOWNorg-babel-pop-to-session

Active key bindings in Org mode buffer:

C/C++

Library of Babel

The Library of Babel
Config, examples and use cases of Library Of Babel
Managing code libraries with org-babel

绑定到 C-c C-v i

在重开 Emacs 后 lob 会清空

我觉得应该用处不大?

ox

ol

doomemacs 的 org-link 预设

如何自定义链接?

org#Adding Hyperlink Types

大多数 ol- 开头的 library 都是在干这件事情

org-link-parameters
org-link-set-parameters

STRT fn: var: cmd: 链接导出

我之前以为这是在导出后端定义的,原来这是在连接类型设置的地方定义的。

我想要让 fn: var: 这样的链接能导出直接连到对应的 github 链接上,
理论上是可以做到的。

那么问题就是,怎么得到源码位置?
要握手动操作就是打开 helpful 然后按下某个 button,不清楚怎么自动化
看看源码 helpful—buffer

要得到url 可以直接用 browse-at-remote-get-url

(defun my/helpful-remote-url (sym callable-p)
  "返回 SYM 源码在远程仓库的 URL。CALLABLE-P 表示函数/宏/命令。"
  (pcase-let* (((list buf pos opened) (helpful--definition sym callable-p)))
    (unless (and buf pos)
      (error "找不到 %s 的源码位置" sym))
    (unwind-protect
        (with-current-buffer buf
          (save-restriction
            (widen)
            (let* ((start (line-number-at-pos pos))
                   (end   (when callable-p
                            (save-excursion (goto-char pos) (end-of-defun) (line-number-at-pos))))
                   (file  (buffer-file-name buf)))
              (browse-at-remote--file-url file start end)))
          (when opened (kill-buffer buf))))))
 
(defun my/org-export-helpful-link (type path desc backend)
  "根据 TYPE(fn/var) 与 PATH 符号生成远程源码链接用于导出。"
  (let* ((sym (intern path))
         (url (ignore-errors (my/helpful-remote-url sym (eq type 'fn))))
         (text (or desc path)))
    (pcase backend
      ((or `md `gfm `html)
       (if url (format "<a href=\"%s\"><code>%s</code></a>" url text) text))
      (`latex
       (if url (format "\\href{%s}{\\texttt{%s}}" url text) text))
      (_ text))))
 
(org-link-set-parameters
 "fn"
 :export (apply-partially #'my/org-export-helpful-link 'fn))
 
(org-link-set-parameters
 "var"
 :export (apply-partially #'my/org-export-helpful-link 'var))

DONE kbd: 链接导出

我把这段放到了配置里

(after! ox
  (org-link-set-parameters
   "kbd"
   :export (lambda (path desc backend)
             (let ((text (or desc path)))
               (pcase backend
                 ((or `md `html)  (format "<kbd>%s</kbd>" text))
                 (`latex (format "\\texttt{%s}" text))
                 (_ text))))))

虽然现在有 org-link-beautify 这个东西,但是完全不符合我的需求
我想要的是 icon 替代链接前的关键词
但是可以参考

想要显示 icon ,doom 自带的美化只有在只读模式的标题上才会出现,这很奇怪

这不奇怪,代码里就是这么写的:
查看 +org-init-custom-links-h+org-link—var-link-activate-fn

我的需求是让它和 org-appear-mode 配合
在光标在链接上的时候按正常的形式显示,不在连接上的时候按现在只读的形式显示

org-id

<~/.config/emacs/.local/straight/repos/org/lisp/org-id.el>

org-id-find-id-file
这个东西很好用,不用想着自己解析了

有没有方式可以快速检测 org-mode buffer 中有没有 broken id links?
我说的 broken id link 是表示在 org-id-locations 里查不到的 id

org-agenda

Resources

Do you use org-agenda? - reddit
Can someone share their Org agenda file layout? - reddit
My Workflow with Org-Agenda

5 Custom Org Agenda Views for Productivity - YouTube

05.Org as 地表最强的管理与计划的助手工具 - Org-mode - Emacs China
这是很好的资源!需要看看

需要改改 org-agenda-prefix-format

Task management with org-roam Vol. 2: Categories - Boris Buliga
对 org-roam 优化的 agenda 视图
不仅如此,我还需要对 org-roam 优化的条目收集!!!
比如让第一个标题前的时间戳可以正确工作

关于 org-agenda-files

原来 org-agenda-files 是不会默认递归搜索的!

所以还是配了

(setq org-agenda-files (directory-files-recursively "~/org/" "\\.org$"))

但是这里还是有一点问题,就是我这次打开 Emacs 新创建的文件就没法被正常捕捉了。。。还是应该搞成动态的

我现在在思考,把这些 agenda 分散在各个文件里真的是一个好的处理吗?
Custom Agenda Commands

Developing

子树复制与粘贴

org-copy-subtree
org-cut-subtree
org-paste-subtree
org-mark-subtree

tags

org-get-tags
它可以区分是否包含继承的tag

org-file-tags

如果未被定义(例如文件未被解析),会通过 (org-element-parse-buffer) 解析整篇内容提取文件级标签。

populate 是什么概念?

(defvar org-file-tags nil
  "List of tags that can be inherited by all entries in the file.
The tags will be inherited if the variable `org-use-tag-inheritance'
says they should be.
This variable is populated from #+FILETAGS lines.")

org-contrib

Org-mode Contributed Packages

readme

这些都是曾经在org中的包

ol-bookmark

links to bookmarks

这东西还挺有用

做了我之前做过的事情

相比之下文件预览 magit 做的更好(至少是放在原目录下)
要是 magit 打开的历史git文件能 store-link 就好了
https://github.com/magit/orgit 这个包
但是它做的事情是链接到 magit buffer 而不是特定版本的文件!

org-mode ecosystem

TODO org-pomodoro

org-pomodoro
SPC t t

org-roam-ql

org-pandoc-import

感觉用不太上,一个简单的 “对一个区域转换成 org” 就已经满足我的需求了

org-noter

用来批注文档的插件

Org-noter 与 DocView、PDF Tools 和 Nov.el 兼容。这些模式可以对 PDF、EPUB、Microsoft Office、DVI、PS 和 OpenDocument 进行注释。

Doom Emacs 中用 SPC n e 来打开专门的批注 frame

它的精确批注是基于点的!
这倒也是一个挺好的解决方案

KeyDescriptionWhere?
iInsert noteDocument buffer
M-iInsert precise noteDocument buffer
qKill sessionDocument buffer
M-pSync previous page/chapterDocument and notes buffer
M-.Sync current page/chapterDocument and notes buffer
M-nSync next page/chapterDocument and notes buffer
C-M-pSync previous notesDocument and notes buffer
C-M-.Sync selected notesDocument and notes buffer
C-M-nSync next notesDocument and notes buffer

i 和 q 不起作用

doomemacs/doomemacs#5886 Keyboard Shortcut “i” in org-noter doesn’t work

可以通过切换到 emacs 模式( C-z )或者临时切换到 emacs 模式( \ )来解决!

我希望他可以和 org-roam 集成

也就是可以不限制它把pdf的批注放到单独的文件里,其实可以设置到特定的 ID node 下

或许可以看看 ORB

但是事实上我觉得把pdf作为 org-mode的附件处理的管理方式并不优

原来这个repo的作者已经去世了,这真的是。。。

weirdNox/org-noter#190 You should know that the creator of this repository ha…

org-pdftools

也是国人的插件 [Emacs PDF笔记体验优化#1] org-pdftools 更精准的PDF links

orgmode 和 pdf-tools 的协作

还有 org-noter-pdftools

doomemacs 中的 org 模块自带这个支持
现在我知道的使用方式就是 SPC n l 存链接,然后 C-c C-l 粘贴
应该有更加精确的链接方式

org-ref

org-mode 模块,用于引用、交叉引用、org-mode 中的参考书目以及与之配套的有用的 bibtex 工具。

有 v2 v3 两个版本?

org-download

截图工具报错

! Couldn't find the maim, scrot or gnome-screenshot executable. org-download-clipboard will not work.

估计得自己配置一下了

实用工具

  • org-download-clipboard

    PC m a p 可以直接粘贴截图(会放到 attachment 下)

  • 它有删除功能!!!

    SPC m a d

org-fc

org-transclusion

想要做到可编辑的嵌入,但是对于 evil mode 来说貌似有点困难
nobiot/org-transclusion#226 any workaround for evil users
并非,其实是因为之前把 :map org-mode-map 写成了 :map (org-mode-map)

#+include#+transclude
nobiot/org-transclusion#83 Have you considered overloading `#+include:`?

需要用 :level n 来设定初始标题层级,不兼容 org-roam

他默认情况下是隐藏属性的,我的 open-roam-refs 就没法用了,有点难受的

live-sync edit

这个 live-sync 功能真 tm 鸡肋
只能对特定元素修改
不如不用这个功能,直接跳过去

我觉得 SPC m u o 直接跳到对应的光标位置都比这样好用

Extensions

它提供了一个简单的扩展框架

TODO 指向文件 ID 的链接自动把 title 属性设置为真正的标题

对应的标签层级也要调整

TODO 如何让 transclude 在导出的时候以类似 include 的方式工作?

org-modern

它的表格美化部分和 valign 不兼容

org-modern-indent

org-supertag ARCHIVE

Blog with Org

Blogs and Wikis with Org

我现在发现,我写的更多是 wiki 而不是博客

lazyblorg

完全使用 python 解析 org 文件

ox-hugoQuartz 搭配

Reference

Aster Hu’s Blog | Asteroid - Publish org-roam notes to personal wiki using ox-hugo and Quartz

图片管理

有一个小问题,ox-hugo 会把图片复制到 static 目录下,而 quartz 并不读这个目录

我们需要把 static/ox-hugo 连到 content/ox-hugo 才能正常显示

我现在对这种解决方案并不看好

我觉得要写完全和它兼容的 org-mode 文件会有过大的心智负担
不能很好得和我的工作流适配

现在想着尝试一下 lazyblorg

TODO 准备尝试二次导出

具体的方案就是先用我基于 tag 导出的那个脚本来先把所有片段导出为可以被 ox-hugo 接受的文件,
然后再用之前的方案导出。

How to contribute

Bastien Guerry(ID 为 bzg)自 2011 年起长期担任 Org Mode 维护者,直到 2024 年 12 月才将主维护权交给 Ihor Radchenko;
即便交棒后,他仍负责 orgmode.org 的网站与问题追踪等基础设施,因此他自己的 Sourcehut 账号天然成了托管这些资源的地方。
(orgmode.org (https://orgmode.org/worg/org-maintenance.html?utm_source=openai))

Org 社区的文档站点 Worg 明确要求从 https://git.sr.ht/~bzg/worg 克隆源码,并由 builds.sr.ht 的 manifest 自动发布到 orgmode.org,这个自动化流水线需要仓库位于 Bastien 可直接管理的 Sourcehut 账号下。
(orgmode.org (https://orgmode.org/worg/worg-about.html?utm_source=openai))

2021 年 Bastien 把原本在 Org 主仓库 contrib/ 目录里的扩展迁出,成立新的 org-contrib 仓库并托管在 git.sr.ht/~bzg/org-contrib,所以自那以后许多周边项目自然也集中到 ~bzg 名下。
(mail.gnu.org (https://mail.gnu.org/archive/html/emacs-orgmode/2021-05/msg00207.html?utm_source=openai))

Sourcehut 推崇邮件驱动的补丁流和 builds.sr.ht 的 CI,这与 Org 一直以来依赖邮件列表提交补丁、使用 git send-email 的流程完全吻合,使得由 Bastien 统一管理的 sr.ht 空间能够同时处理代码托管、补丁评审、CI 与网站部署。
(sourcehut.org (https://sourcehut.org/blog/2020-07-14-setting-up-ci-for-mailing-lists/?utm_source=openai))

简而言之:Org Mode 的关键基础设施和历史资产由 Bastien 持续维护,他选用 Sourcehut 这一与社区工作流匹配的平台,并用自己的 ~bzg 账号集中托管,从而形成了“Org Mode = Sourcehut 上的 ~bzg”这一现象。

Org Mailing list

Footnotes

  1. 光标前面有一般字符,并当前光标不在脚注上

  2. 前缀参数即 C-udoomemacs 中绑定到了 SPC u

  3. 这里的性能可能会有一点问题,很无语

  4. reference: how to markup a quotation? - reddit