1

関数(org-heading-components)(org-element-property)は、星の数と優先度の整数を生成します。見出し全体を変数として保存し、re-search-forward(または同様の関数) を使用してその見出しに戻りたいのですが、整数が見つからない場合に発生する問題を予見しています。見出し全体を変数として保存する必要があります。これは、重複したタイトルの todo エントリがよくありますが、他のコンポーネントは異なるためです。

たとえば、次の todo:

** Active [#A] Ask the geniuses on stackoverflow how to do this.  :lawlist:

で評価すると、(org-heading-components)次のようになります。

(2 2 "Active" 65 "Ask the geniuses on stackoverflow how to do this." ":lawlist:")

したがって、それを変数として保存し、後で使用する場合、 は と同じではなく、 と同じではないre-search-forwardため、問題が発生します。2 2**65[#A]

(defun lawlist ()
(interactive)
  (let* (
        (beg (point))
        (complete-heading (org-heading-components) ))
  * * *
  (goto-char (point-min))
  (re-search-forward complete-heading nil t) ))
4

3 に答える 3

2

次のように出力を変換できるはずです。

  • 最初の # は現在のレベル (星の数)
  • 2 番目の数字は削減された見出しレベルで、org-odd-levels-onlyが設定されている場合に適用されますが、これは出力に関するものではありません。
  • 藤堂キーワード
  • 優先文字 (65 は A の ASCII コードです)
  • 見出しテキスト
  • タグまたは nil

以下は、バッファに示されている見出し文字列を返します。では動作しませんre-search-forwardが、動作しsearch-forwardます (文字をエスケープしません)。

(defun zin/search-test ()
  (interactive)
  (let ((head (org-element-interpret-data (org-element-at-point))))
    (message "%s" (format "%s" (car (split-string head "\n"))))))

これは変数に設定しません。目的の変数を設定する適切な関数でラップする必要があります。次に(search-forward <var> nil t)、それを見つけられない場合にエラーになることなく、それを照合するために使用します。

于 2013-10-28T15:19:14.160 に答える
0

編集org-heading-regexp(2013 年 12 月 15 日): 変数(内で定義されている)に基づいてソリューションを更新org.elし、(存在する場合) 期限を含む 2 行目を含めるようにその変更を加えましたlawlist-org-heading-regexpregexp-quoteこのリビジョンには、スーパーユーザーで @Drew から教えてもらっ た気の利いた機能も含まれています: https://superuser.com/questions/688781/how-to-highlight-string-and-unhighlight-string-in-buffer- make-overlay?noredirect=1#comment874515_688781  (buffer-substring-no-properties beg end)は、文字列を変数として設定するために使用されます。

編集(2013 年 12 月 17 日): と を追加isearch-highlightisearch-dehighlight、 と をコメント化しましhighlight-regexpunhighlight-regexp。より複雑な関数でポイントを移動すると、highlight-regexp文字列全体が確実に強調表示されません。これは、画面が更新されていないか、他の要因 (hl-line-mode など) が原因である可能性があります。 ) -- さまざまなものを配置sit-for 0しても問題は解決しませんでしたhighlight-regexp--isearch-highlightよりうまく機能します。

編集(2014 年 1 月 6 日): 星からメモの最後までの todo 全体の任意の要素に一致する完全な正規表現については、この関連スレッドも参照してください:   https://stackoverflow.com/a/20960301/2112489

(require 'org)

(defvar lawlist-org-heading-regexp
  "^\\(\\*+\\)\\(?: +\\(.*?\\)\\)?[ \t]*\\(\n.*DEADLINE.*$\\)"
    "Match headline, plus second line with a deadline.")

(defun example ()
(interactive)
  (switch-to-buffer (get-buffer-create "foo"))
  (org-mode)
  (insert "* Example\n\n")
  (insert "** Active [#A] This is an active todo. :lawlist:\n")
  (insert "   DEADLINE: <2013-12-15 Sun 08:00>  SCHEDULED: <2013-12-15 Sun>\n\n")
  (insert "** Next-Action [#B] This is an inactive todo. :lawlist:\n")
  (insert "   DEADLINE: <2013-12-16 Mon 08:00>  SCHEDULED: <2013-12-16 Mon>")
  (goto-char (point-min))
  (sit-for 2)
  (re-search-forward (regexp-quote "** Active [#A] "))
  (sit-for 2)
  (let ((init-pos (point)))
    (org-back-to-heading t)
    (let* (
          lawlist-item-whole
          lawlist-item-partial
          (beg (point)))
      (if (and
            (looking-at org-heading-regexp)
            (and (looking-at lawlist-org-heading-regexp) (match-string 3)))
        (re-search-forward lawlist-org-heading-regexp nil t)
        (re-search-forward org-heading-regexp nil t))
      (let ((end (point)))
        (setq lawlist-item-whole (buffer-substring-no-properties beg end))
        (setq lawlist-item-partial (buffer-substring-no-properties beg init-pos))
        (re-search-backward (regexp-quote lawlist-item-whole) nil t)
        ;; (highlight-regexp (regexp-quote lawlist-item-whole))
        (isearch-highlight beg end)
        (sit-for 2)
        ;; (unhighlight-regexp (regexp-quote lawlist-item-whole))
        (isearch-dehighlight)
        (re-search-forward (regexp-quote lawlist-item-partial) nil t) 
        (sit-for 2)
        (kill-buffer "foo")))))

編集(2013 年 10 月 27 日): 最終的な回答に向けた進化プロセスの歴史的部分として一時的に保存されている以前のソリューション。ただし、これはもはや推奨される方法ではありません。

(defun lawlist-org-heading-components ()
  (org-back-to-heading t)
  (if (let (case-fold-search) (looking-at org-complex-heading-regexp))
    (concat
      (cond
        ((equal (org-match-string-no-properties 1) "**")
          "^[*][*]")
        ((equal (org-match-string-no-properties 1) "*")
          "^[*]"))
      (cond
        ((and (match-end 2) (aref (match-string 2) 1))
          (concat " " (org-match-string-no-properties 2))))
      (cond
        ((and (match-end 3) (aref (match-string 3) 2))
          (concat " \\" (org-match-string-no-properties 3))))
      (cond
        ((and (match-end 4) (aref (match-string 4) 3))
          (concat " " (org-match-string-no-properties 4))))
      (cond
        ((and (match-end 5) (aref (match-string 5) 4))
          (concat " " (org-match-string-no-properties 5)))))))
于 2013-10-27T21:00:23.940 に答える