Ada*_*dam 12 emacs wiki elisp org-mode
我想在org-mode中设置一个个人wiki.
到目前为止,我已尝试过这两种方式.我的第一次尝试是使用单个"Scientific Notebook.org"文件.这就是我的所有笔记 - 每个都有自己的标题,日期和标签(格式与博客文章相同).然后我打开org-velocity快速浏览文件.
但是这产生了两个问题:首先,我在笔记中使用了大量数学(LaTeX预览是我想要我们组织的原因之一).但这些需要花费很长时间才能加载,我无法尝试打开一个包含数千个条目的文件(所有文件都填充数学!!)
我遇到的另一个问题是标签.我喜欢使用很多多字标签来交叉引用我的笔记.但是org-mode的方式将这些包装在缓冲区中,使我的标题完全无法理解.另外(也许只是我,但是)我发现CamelCase真的很难读,特别是在遇到类似的东西时:
:monotonicTransformations:homogeneousFunctions:orderedSets:proofs:
Run Code Online (Sandbox Code Playgroud)
现在我的第二次尝试是与Deft.在这里,我将每个音符分解为自己的.org文件,并创建一个专用的〜/ org /文件夹来保存我的wiki.但这就是我陷入困境的地方:
1)如何设置自动链接,以便在一个注释中键入"foo bar",创建一个指向"foo bar.org"的链接?这可以通过无线电目标完成吗?如果没有,是否可以覆盖此语法[[foo bar]]来搜索〜/ org /目录中所有文件的标题?我尝试将Wiki.el添加为次要模式,但没有骰子......
2)如何标记单个文件?那么你怎么能拿出所有标签的列表并使用它来过滤你的笔记列表呢?我读过书签+让你做文件标记.但是我在网上的文档中迷失了......
我很想知道其他人如何解决这些问题,你正在使用的小模式,工作流程和键盘快捷键或其他mods!
谢谢!
-亚当
在我看来,只有一个笔记文件更加灵活和兼容。然而,即使是中等大小的文件,它也会变得很慢。多个小文件速度很快,但需要更多的精力来设置,并且它们只能在该设置中工作。
为了加快速度,请考虑设置org-startup-with-latex-preview为零(或添加#+STARTUP: nolatexpreview到您的文件中)。
标签不仅在用于关键字时变得混乱,而且随着文件的增长,使用它们也会变得相当慢。我尝试过一些自定义函数,但现在大多数时候都避免使用标签。相反,我使用平面层次结构、类别,并以其他方式依赖于发生和组织发生(例如M-x org-occur begin_proof)。
链接到其他文件的 org 语法相当简单:[[./this idea.org][this idea]] . 如果这太麻烦,那么编写一个用适当的链接替换活动区域的函数应该很容易。
如果您想链接[[this idea]]到文件“this idea.org”,您可以添加一个函数org-open-at-point-functions并自己处理它。
至于标签,您不标记文件本身,而是标记单个顶级标题。这当然意味着您所有的烦恼都将被标记回来。再次,我建议不要使用标签。只需确保文件在正确的位置包含正确的关键字并使用occur和朋友即可。
编辑:示例“org-open-at-point-function”
如果您想在目录中的所有文件中搜索模糊链接,而不仅仅是当前缓冲区,则可以使用钩子来实现org-open-at-point-functions。这是一个例子:
(defvar my-link-search-directory "/my/notes/directory/")
(defun my-open-link-function ()
"Open link, interpreting it a the name of a headline."
(let* ((el (org-element-context))
(type (first el))
(link-type (plist-get (cadr el) :type))
(path (let ((path-1 (plist-get (cadr el) :path)))
(when (stringp path-1)
(org-link-unescape path-1)))))
(when (and (eql type 'link)
path
(string= link-type "fuzzy"))
(let* ((path (regexp-quote path))
(result
(delq nil
(org-map-entries
(lambda ()
(when (string-match
path
(org-get-heading))
(list (buffer-file-name) (point))))
nil
;; Here we set the scope.
;; 'agenda would search in all agenda files.
;; We want a list of all org files in `my-link-search-directory'.
(directory-files
my-link-search-directory
t "[.]org\\'")))))
(when result
(when (> (length result) 1)
(message "Warning: multiple search results for %s" path))
(let ((file (caar result))
(pos (cadar result)))
(find-file file)
(goto-char pos)))))))
(add-hook
'org-open-at-point-functions
'my-open-link-function)
Run Code Online (Sandbox Code Playgroud)
请注意,我还没有测试过这么多。
事实上,我建议不要使用它,除非你真的需要它。虽然制作精美的扩展很诱人,但最好让笔记尽可能简单。如果您将所有内容都放在一个文件中,则可以根据需要使用记事本或谷歌文档或其他任何方式编辑笔记。
| 归档时间: |
|
| 查看次数: |
4919 次 |
| 最近记录: |