編集org-heading-regexp
(2013 年 12 月 15 日): 変数(内で定義されている)に基づいてソリューションを更新org.el
し、(存在する場合) 期限を含む 2 行目を含めるようにその変更を加えましたlawlist-org-heading-regexp
。regexp-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-highlight
しisearch-dehighlight
、 と をコメント化しましhighlight-regexp
たunhighlight-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)))))))