1

私は組織モードを使用しており、現在の日付で名前が付けられた見出しの下に TODO を配置するキャプチャ テンプレートを設定しようとしています。たとえば、今日 (12/12/12) の場合、見出しは次のようになります。

*** Dec 12

だから私は自分のテンプレートでこれを試しました:

 '(org-capture-templates (quote
                          (
                           ;;; note: this template works
                           ("d" "Defect" entry (file+headline "~/doc/org/defects.org" "Open") "** TODO %^{Defect}")
                           ;;; this template does not
                           ("t" "Todo" entry (file+headline "~/doc/org/timesheet.org"  (format-time-string "%h %e")) "**** TODO %i%?"))))

ただし、wrong-type-argument stringp例外があります。スタックトレースの一部を次に示します。

Debugger entered--Lisp error: (wrong-type-argument stringp (format-time-string "%h %e"))
  regexp-quote((format-time-string "%h %e"))
  (format org-complex-heading-regexp-format (regexp-quote hd))
  (re-search-forward (format org-complex-heading-regexp-format (regexp-quote hd)) nil t)
  (if (re-search-forward (format org-complex-heading-regexp-format ...) nil t) (goto-char (point-at-bol)) (goto-char (point-max)) (or (bolp) (insert "\n")) (insert "* " hd "\n") (beginning-of-line 0))
 ... snip ...

組織モードの質問ではなく、より一般的な Emacs Lisp の問題だと感じていますが、それが何であるかはわかりません。format-time-string を括弧に入れると、Lisp はそれを文字列として認識しないという趣旨のことを言っている投稿 (もう一度見つけることはできません) に出くわしました。評価すると、挿入しない限り何も印刷されないため、これは十分に真実のようです。しかし、挿入したくありません-式を評価して文字列として使用したいのです。 もう 1 つの質問で、フォーマットされた文字列を文字列として表示するには何かをしなければならないと、同様に考えています。

4

1 に答える 1

1

引用符が多すぎて、呼び出しが評価されないようです。quoteあなたが言ったように、文字列は機能するので、その中の文字列を準引用符とコンマに変更してみることができます。また、フォーマットを見ると、この変数はリストのリストであり、リストのリストのリストがあるようです。私の推測はこれです:

`(org-capture-templates (
                         ("t" "Todo" entry (file+headline "~/doc/org/timesheet.org" ,(format-time-string "%h %e")) "**** TODO %i%?")))

テンプレート形式についてはわかりませんが、評価された値で実際のリストを生成するには、関数呼び出しが評価されていることを確認する必要があります。

于 2012-12-17T00:13:53.597 に答える