【问题标题】:Setup a personal wiki in Emacs Org-mode在 Emacs Org-mode 中设置个人 wiki
【发布时间】:2014-10-31 07:13:27
【问题描述】:

我想在 org 模式下设置个人 wiki。

到目前为止,我已经尝试了这两种方法。我的第一次尝试是使用单个“Scientific Notebook.org”文件。我所有的笔记都在这里面——每一个都有自己的标题、日期和标签(与博客文章的格式相同)。然后我打开 org-velocity 来快速浏览文件。

但这产生了两个问题:首先,我在笔记中使用了很多数学(LaTeX 预览是我想要我们组织的原因之一)。但是这些需要很长时间才能加载,我无法尝试打开包含数千个条目的文件的图像(所有条目都充满了数学!!)

我遇到的另一个问题是标签。我喜欢使用很多多词标签来交叉引用我的笔记。但是 org-mode 将它们包装在缓冲区中的方式使我的标题完全无法理解。另外(也许只是我,但是)我发现 CamelCase 真的很难阅读,尤其是在遇到类似的情况时:

:monotonicTransformations:homogeneousFunctions:orderedSets:proofs:

现在我的第二次尝试是使用 Deft。在这里,我将每个笔记分解为自己的 .org 文件,并创建了一个专用的 ~/org/ 文件夹来保存我的 wiki。但这就是我卡住的地方:

1) 你如何设置自动链接,以便在一个注释中输入“foo bar”,创建一个到“foo bar.org”的链接?这可以用无线电目标来完成吗?如果没有,是否可以覆盖此语法 [[foo bar]] 以在 ~/org/ 目录中的所有文件中搜索标题?我尝试将 Wiki.el 添加为次要模式,但没有骰子...

2) 如何标记单个文件?然后,您如何提取所有标签的列表并使用它来过滤您的笔记列表?我已阅读该书签+ 可让您进行文件标记。但我在在线文档中迷失了方向......

我很想听听其他人是如何解决这些问题的,您正在使用哪些次要模式,工作流程和键盘快捷键或其他模式!

谢谢!

-亚当

【问题讨论】:

    标签: emacs elisp org-mode wiki


    【解决方案1】:

    我将a simplistic code 用于维基。 因为这就是 wiki 对我的意义:一种 快速 对事物进行分类的方法。 结构如下:

    • 每个主题都有自己的组织文件
    • 每个主题都有自己的标题
    • 所有组织文件都在一个目录中
    • 您可以跳转到文件,或使用helm 创建一个新文件

    就是这样。我发现需要将任何东西链接到任何东西,跳转到主题功能 绰绰有余。这是它的外观:

    一旦进入某个主题,我可以使用worf 跳过主题。 这是它的外观:

    【讨论】:

      【解决方案2】:

      在我看来,只有一个便笺文件更加灵活和兼容。然而,即使是中等大小的文件,它也会变得很慢。多个小文件很快,但它们需要更多的努力来设置,并且它们只能在该设置中工作。

      单一文件解决方案

      为了加快速度,请考虑将 org-startup-with-latex-preview 设置为 nil(或将 #+STARTUP: nolatexpreview 添加到您的文件中)。

      标签不仅在用于关键字时会变得混乱,而且随着文件的增长,使用它们也会变得相当缓慢。我玩过一些自定义函数,但现在大部分时间都避免使用标签。相反,我使用 flat 层次结构、类别,并以其他方式依赖于发生和组织发生(例如 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)
      

      请注意,我没有测试过这么多。

      实际上,我建议不要使用它,除非您真的需要它。虽然制作花哨的扩展很诱人,但最好让你的笔记尽可能简单。如果您将所有内容都放在一个文件中,您可以根据需要使用记事本或谷歌文档或其他任何方式编辑您的笔记。

      【讨论】:

      • 感谢您如此详细的回复!我以前没有见过[[file:]][[./]] 快捷方式。不过我想知道,是否有办法将 org-mode 对 [[this idea]] 的搜索范围从当前缓冲区扩大到当前目录?
      • 您能否将多个类别应用于标题?再次感谢!
      • 我已经更新了我的答案。不,您不能有多个类别。真的,搜索和发生几乎是我需要几 MB 笔记的全部内容。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-24
      • 1970-01-01
      • 2011-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多