用 org-mode 写配置一段时间之后的想法

这个文件为例子:

多用表格会让导出的内容美观很多。

code block 的变量甚至可以跨文件引用,平时要维护的 org 可以做到非常清爽。只定义变量,使用变量的逻辑放到其它的文件。

注释段落很实用,方便从几个选项中切换。比如这个文件中两种字体风格的选择。

用 checkbox 作为开关很方便,C-c C-c 切换很顺手。

4 个赞

一直用org管理配置文件,省事很多,就一个大的org,按目录分级,反正也不在乎启动时间,一般最多也就每天启动一两次,而且说实话,10多秒和1s,真没太大区别

说实话没怎么看懂……

这个文件里面的表格和列表本身就是配置,改配置的时候就是改这些内容。

细说checkbox作为开关?

以前没写过 elisp,折腾了一会。下面这个很基本的代码能设置字符串的值了。希望这里有个 package 之类的。

#+name: table1
|-------------------+--------------------------|
| one/test-variable | test something for babel |
| two/test-varaible | test variable two        |
|-------------------+--------------------------|

#+begin_src emacs-lisp
  (defun eval-couple (variable value)
    (set (intern variable) value))

  (defun eval-table (table)
    (append '() table)
    (mapcar (lambda (couple)
  	    (apply 'eval-couple couple))
  	  table))
#+end_src

#+begin_src emacs-lisp :var tbl=table1
  (eval-table tbl)
#+end_src

我是选择装一些 theme 然后从中选一些用快捷键循环。

  • theme1
  • theme2
  • theme3 这样。

我的配置里面也是这么做。我觉得几行的代码不需要包了。

  (defun meomacs-load-vars-from-pass (&rest ignore)
    (dolist (row pass-table)
        (let ((var-name (intern (car row)))
              (entry-name (cadr row)))
          (set var-name (password-store-get entry-name)))))

有意思,虽然我不用 org 写配置,但是这个思路可以抄。

找到一个可以用 markdown 写的 https://github.com/joakimmj/md-tangle

其实就是个文件生成器。注释多的话,可以考虑。

不过没有 elisp 能读 org 表格这么优雅。

感觉还可以做得更智能的,比如说对于一些设定 key map 的设定 face attribute 的,这些都会有很多重复的命令,如果能有 macro 能够读取表格,然后可以调用任意的指定的命令的话会很方便。

| face            | :family        | :height |
|-----------------+----------------+---------|
| 'variable-pitch | Source Serif 4 |     200 |
| 'default        | Fira Code      |     200 |

use some macro ⇒

#+begin_src emacs-lisp
  (set-face-attribute 'variable-pitch nil
  		    :family "Source Serif 4"
  		    :height 200)

  (set-face-attribute 'default nil
  		    :family "Fira Code"
  		    :height 200)
#+end_src

是的,但是如果真的要做的很完善的话,我觉得需要找个办法提高输入的准确性,比如补全。

不然 face variable command 这些名字相比在 elisp buffer 中更容易打错的。

用org-table自定义yasnippets,非常简洁。

#+name: org-yasnippets
| key     | template                                    | name                            |
|---------+---------------------------------------------+---------------------------------|
| date    | #+DATE:`(format-time-string "%Y-%m-%d")`$0  | Add date keyword                |
| author  | #+AUTHOR:${1:`user-full-name`}              | Add Author keyword              |
| filetag | #+FILETAGS:                                 | File tag                        |
| tblfm   | #+TBLFM: $0                                 | tbflm                           |

#+BEGIN_SRC emacs-lisp :var data=org-yasnippets
(yas-define-snippets 'org-mode data)
#+end_src

没用 org mode 毕竟只是写给自己看的 comment 就够了

只要目录分级的话 最近用 outli-mode 蛮好的

放在 config dir 的 .dir-locals.el


((nil . ((eval . (outli-mode)))))
2 个赞

够用是一回事儿, 体验提升是另一回事儿, 两件事儿不冲突. outline 是一回事儿, org 文学编程是另一回事儿, 两件事儿也不冲突.