Resources
Worg
Manual
这部分放的应该是单纯的对 manual 的笔记
Document Structure
关于 Visibility
标题的 :VISIBILITY: 属性很好用!
我可以毫无心理负担地把长文本复制进来
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,默认就是创建脚注
-
在脚注上,就是来回跳转
-
在其他地方就是唤起一个操作菜单
key action s Sort the footnote definitions by reference sequence. r Renumber the simple ‘fn:N’ footnotes. S Short for first r, then s action. n Rename all footnotes into a ‘fn:1’ … ‘fn:n’ sequence. d Delete the footnote at point, including definition and references.
-
Images
-
DONE 怎么用文本设置图像大小?
org文档调整行内显示图片的尺寸 - Org-mode - Emacs China
用这样的东西
#+ATTR_ORG: :width 400
-
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.
- Produce a preview image of the LaTeX fragment at point and overlay it over the source code.
-
Using CDLaTeX to enter math in org-mode
理论上是好用的,但是为什么上下标
_和^没有按照我设想的工作呢?
找到了解决方案,org 的 +pretty 模块中 org-modern 配置的 :init 里有设置org-pretty-entities为 t
现在自己重新配了 pretty 配置,没有问题了-
但是我同时有想要保留非 latex 环境中的这个功能。。。
比如打单个希腊字母的时候有这东西就很方便 μ φ 这样的
-
Tables
doomemacs 前导键: SPC m b
| key | explanation |
|---|---|
| ( | previous table cell |
| ) | next table cell |
| { | beginning of table |
| } | end of table |
| M-h / M-l | move table column left / right |
| M-k / M-j | move table column up / down |
| vae | select table cell |
| vaE | select table row |
| var | select whole table |
TAB 和 S-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
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
info 文件就是 texinfo 格式的
我们可以用
org-texinfo-export-to-texinfo 来导出
org-texinfo-export-to-info 来导出
ODT Export
应该可以用这个转换到 DOCX
Publishing
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
SPC m d t 和 C-c . 是激活的
C-c ! 是不激活的
不知道为什么时间范围不能在 agenda 里优雅地显示
Clocking Work Time ATTACH
同一时间只能存在一个 clock
- 单任务专注:人同一时间只能专注做一件事
- 避免多任务陷阱:多任务会降低效率和质量
- 时间不重叠:实际时间资源不可能同时分配给多个任务
- 当你开始新任务时,自动结束前一个任务的计时
- 强制你明确当前在做什么
- 鼓励完成当前任务再转换
用这个东西还可以做到更方便的跳转!
在记录你花费的时间的同时可以作为一个 jump list
-
Functions
org-clock-timestamps-up
org-clock-timestamps-down
org-resolve-clocks
org-clock-goto
org-clock-cancel
org-clock-report
org-evaluate-time-range
org-set-effort
org-clock-modify-effort-estimate
org-clock-mark-default-task
org-clock-in
org-clock-in-last
org-clock-out
+org/toggle-last-clock
- 它有什么用? ARCHIVE
Effort Estimates
Org-mode 中的 effort 是任务预估工作量的概念:
-
基本概念
- 预估时间:任务预计需要多长时间完成
- 工作量单位:通常用时间表示(如 1h, 2d, 30min)
- 规划工具:帮助任务安排和时间管理
-
设置 Effort
* TODO 写报告 :PROPERTIES: :Effort: 2h :END: * TODO 项目设计 :PROPERTIES: :Effort: 1d :END: -
快速设置
SPC m c E org-set-effort 设置 effort
SPC m c e org-clock-modify-effort-estimate 修改当前 clock 对应的 effort(只在clock激活时有用) -
在 Agenda 中显示
- 可以看到预估时间 vs 实际时间对比
- 在 agenda view 中设置 effort c e
- 在 agenda view 中通过 effort 来筛选条目(只显示大于或小于一定effort的条目) s e
-
Column View
COLUMNS: %25ITEM %TODO %3PRIORITY %TAGS %Effort{:} %CLOCKSUM
以表格形式显示任务、优先级、effort 和实际用时 -
实用价值
- 时间规划:合理安排一天的任务
- 工作量评估:项目时间预算
- 效率分析:预估 vs 实际用时对比
- 容量规划:避免安排过多任务
-
与 Clock 结合
- Effort = 预估时间
- Clock = 实际时间
- 对比两者帮助改善时间预估能力
这样可以更科学地管理时间和任务。
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 对任务取消计时
org-agenda-goto-calendar 和 org-calendar-goto-agenda
共用 g c 快捷键,很方便
有 Diary 集成
但是我选择的方案是 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
分为两种 archive
一种是移动到单独的 org-archive 文件,一种是打上 ARCHIVE tag
-
作用
快速“收档”已完成或不再活跃的条目,把主文件保持简洁。
归档后仍可检索:被移到归档文件或 ARCHIVE 抽屉中,搜索/agenda 可选是否包含。
保留原时间戳、属性、笔记,避免直接删除导致信息丢失。
可按日期树归档,形成按年月日分层的历史记录,方便回顾。
-
常用命令
:C-c C-x C-a / C-c $ (org-archive-subtree): 按当前条目的 ARCHIVE 规则归档。
C-c C-x C-s / SPC m s A (org-archive-subtree-default): 使用全局 org-archive-location 规则归档(默认 “%s_archive::”)。
C-c C-x a / SPC m s a (org-toggle-archive-tag): 给条目加 ARCHIVE tag,agenda 默认跳过。
C-c C-x A (org-archive-to-archive-sibling): 把内容移到同文件同级的“archive sibling”。
-
配置要点
- org-archive-location 设置目标位置与格式,例如:
- “%s_archive::” → 将整个子树移到同名 _archive.org 文件。
- “%s::datetree/” → 在同一文件的日期树下存放。
- org-archive-save-context-info 控制记录哪些上下文信息(时间、路径等)。
- agenda 过滤:org-agenda-skip-archived-trees 、org-agenda-archives-mode 控制是否显示归档项。
- 自动化:结合 org-expiry 或自定义 hooks,在状态变为 DONE 后自动归档。
- org-archive-location 设置目标位置与格式,例如:
-
使用场景示例
每周清理已完成任务,保持当前项目视图简短。
将历史会议记录移入日期树归档,方便按日期回溯。
对长期参考信息用 archive sibling 方式,既不干扰当前大纲又留在同文件。
Hyprlinks
Radio Targets
Org 可以自动将普通文本中出现的某些目标名称转换为链接。
因此,无需显式创建链接,文本即可连接到其位置的目标。
无线目标由三个尖括号包围。 例如,目标‘ My Target ’会使普通文本中每次出现的‘ my target ’激活为链接。
Org 文件仅在首次加载到 Emacs 中时自动扫描无线目标。
要在编辑过程中更新目标列表,请将光标置于目标上或目标处按下 C-c C-c 。
这东西在记课堂笔记的时候真tm好用,一些重要性没有达到需要新建标题的专有名词就可以用这种形式形成链接
Handling Links
-
裸链接
还有这种形式的链接 Hyprlinks
这是裸链接,加尖括号是为了防止标点干扰(可能中间有空格之类的)
-
CUSTOM_ID
这里提到了 CUSTOME_ID 把跳转范围限制在了当前文件中,这其实是非常好用的
解决的问题是标题可能会被修改让标题链接失效的问题
-
关于 org-id-link-consider-parent-id
我还可以对不希望有全局 ID 的标题设置相对父标题的链接,这可以避免全局id污染,但是也就没有双向链接的功能了
对标题的链接和对 custom_id 的链接都行
在只有 CUSTOM_ID 的情况下,它会存两个链接,一个是相对于文件的(这个是在前,有点违背我的直觉),一个是相对于最近的有全局ID的父节点的
在同时有全局 ID 和 CUSTOM_ID 的情况下,只会记录两个链接,一个是全局id的链接,一个是相对于文件的自定义id的链接
-
org-store-link
org-store-link… powerful and flexible | THIS IS EMACS
org-store-link SPC n l SPC m l s
-
HOLD 我希望能通过加一个 C-u 前缀直接在侧面打开
相关函数:
但是仔细想想这个需求又是伪需求,手动把窗口划分好其实是更优的方案,也不会多费多少事
但是对 pdf 预览来说很不方便,一般来说有复用已打开的相同文件的buffer来说更常用
Search Options in File Links
-
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 的颜色就行了
-
org-mode 的代码块高亮是如何实现的?
How does org-mode implement syntax highlighting for code blocks?
It uses cc-mode.
It copes the text to a temporary buffer, highlights it using the major mode that is associated with the language, and copies back the highlighting.org-mode 对长代码块直接编辑的性能极差! 这就可以理解了
想必也是有解决办法的,比如在超过一定大小后增加自动刷新的时间间隔
-
并不是 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。
工作流程:
-
动态函数生成:为每种语言创建两个函数:
- org-babel-edit-prep:LANG - org-babel 的标准钩子函数
- lsp—org-babel-edit-prep:LANG - 内部 LSP 启用函数
-
临时文件处理:
(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 需要知道文件类型)
-
LSP 激活:(lsp-deferred) 延迟启动 LSP 服务器
-
智能集成:
- 如果已存在 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
-
Tangle
这是文学编程的术语
-
Noweb
Noweb - Wikipedia
这是一个文学编程工具,支持 TeX、LaTeX、HTML 和 troff 后端,并适用于任何编程语言。在这里存在的意义是: org-mode 中要 include 代码块使用的是 noweb 样式的语法
Noweb Reference Syntax (The Org Manual)
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-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
- TODO 如何让所有网站都自动允许进行 org-protocol 跳转?
org 核心组件
org-element
这是一个 org-mode 中的重要概念
Docstrings from ‘org-element.el’
现在默认启用缓存,缓存目录在 org-persist-directory 找到
org-babel
一般简称 ob
关于代码块的详细信息应该查看 Working with Source Code
关于 org-babel-tangle-jump-to-org
需要有 :comment link 标签
key bindings
Active key bindings in code blocks:
| Key binding | Function |
|---|---|
| C-c C-c | org-babel-execute-src-block |
| C-c C-o | org-babel-open-src-block-result |
| M-UP | org-babel-load-in-session |
| M-DOWN | org-babel-pop-to-session |
Active key bindings in Org mode buffer:
| Key binding | Function |
|---|---|
| C-c C-v p | org-babel-previous-src-block |
| C-c C-v n | org-babel-next-src-block |
| C-c C-v t | org-babel-tangle |
| C-c C-v f | org-babel-tangle-file |
| C-c C-v u | org-babel-goto-src-block-head |
| C-c C-v g | org-babel-goto-named-src-block |
| C-c C-v r | org-babel-goto-named-result |
| C-c C-v e | org-babel-execute-maybe |
| C-c C-v o | org-babel-open-src-block-result |
| C-c C-v v | org-babel-expand-src-block |
| C-c C-v b | org-babel-execute-buffer |
| C-c C-v s | org-babel-execute-subtree |
| C-c C-v d | org-babel-demarcate-block |
| C-c C-v c | org-babel-check-src-block |
| C-c C-v j | org-babel-insert-header-arg |
| C-c C-v l | org-babel-load-in-session |
| C-c C-v i | org-babel-lob-ingest |
| C-c C-v I | org-babel-view-src-block-info |
| C-c C-v z | org-babel-switch-to-session-with-code |
| C-c C-v a | org-babel-sha1-hash |
| C-c C-v h | org-babel-describe-bindings |
| C-c C-v x | org-babel-do-key-sequence-in-edit-buffer |
C/C++
-
ob-C-stdin
在这里发现的 reddit
GitHub - cxa/ob-C-stdin: Support the standard input header argument `:stdin <…已经放到配置文件里了
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
如何自定义链接?
大多数 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))))))IDEA org-link 美化
虽然现在有 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中的包
ol-bookmark
links to bookmarks
这东西还挺有用
ol-git-link
做了我之前做过的事情
相比之下文件预览 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
它的精确批注是基于点的!
这倒也是一个挺好的解决方案
| Key | Description | Where? |
|---|---|---|
i | Insert note | Document buffer |
M-i | Insert precise note | Document buffer |
q | Kill session | Document buffer |
M-p | Sync previous page/chapter | Document and notes buffer |
M-. | Sync current page/chapter | Document and notes buffer |
M-n | Sync next page/chapter | Document and notes buffer |
C-M-p | Sync previous notes | Document and notes buffer |
C-M-. | Sync selected notes | Document and notes buffer |
C-M-n | Sync next notes | Document 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
我现在发现,我写的更多是 wiki 而不是博客
lazyblorg
完全使用 python 解析 org 文件
与 ox-hugo 和 Quartz 搭配
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”这一现象。