Ink

Contents related to tech, hobby, etc

[leaf]:customで動的に生成したリストを使う

|

[leaf]:customで動的に生成したリストを使う

conao3/leaf.elに於いて、動的な値を :custom キーワードに与えるにはバッククォートを使う必要があります。 (conao3さんのQiita記事 「Emacs入門から始めるleaf.el入門」にも記載があります。

(leaf foo
  :custom
  `(foo-variable . ,(+ 3 3)))

(backquoteについては info:elisp#Backquote を参照すると良いと思います。)

先の事例では、リストではない値を割り当てていましたが、リストを割り当てる場合は 少しトリッキーになります。

`(org-agenda-list . ',(directory-files "~/Documents/org" ))

(org-agenda-list quote (foo.org bar.org))

Org babelで実行して RESULTS を見てみると変な感じがしますが、動いているぽい。 ' でクォートしてあげないと、完全に一つのリストになってしまいます。 これの理屈としては、恐らくバッククォートを用いたことで以下のように展開され:

(org-agenda-list . ("path1" . ("path2" . nil)))

これはつまりリストの構成と同じなのでくっついてしまうんでしょうね。

ちなみに、CDRがリストならDotted pair表示にはならないらしい (info:elisp#Dotted Pair Notationより) のでDotted pairの表示じゃないのは正常なようです。

When printing a list, the dotted pair notation is only used if the CDR of a cons cell is not a list.

まぁ普通のリストになっちゃうからそれはそうだよねっていう。

まだわからないこと

  • (org-agenda-files quote ("path1" "path2")) と続いているが、なぜ quote がそこにあって動くのか?

  • そもそも dotted Pairじゃなくしたらダメ...?(これはleafの仕様の話になってきます