组织议程正则表达式搜索类别

2024-01-03

我喜欢使用以下方式构建我的组织模式项目:CATEGORY:财产,但类别似乎不被认可org-agenda-filter-by-regexp(势必=)。当查看相当大的 TODO 项目列表时,能够将列表缩小到匹配的类别会很有帮助。

我知道我可以使用org-agenda-filter-by-category (<),但该命令必须在类别条目上执行。

有没有办法用正则表达式过滤组织议程包括类别?

下面的函数执行我想要的功能,但是我无法让它工作org-agenda调度程序作为自定义议程命令。

(defun rnkn/org-category-match (str)
  "Org Agenda match TODO headlines matching :CATEGORY: property STR."
  (interactive "sCategory: ")
  (org-tags-view t (concat "CATEGORY={" str "}")))

Type M-x org-agenda RET m然后输入正则表达式——例如,PropertyDrawerName={regex}


上一个答案(在原始发布者编辑问题之前)--当前版本org-element-property / org-element-headline-parser使用全部大写字母作为属性抽屉参数:

(defun example-one ()
(interactive)
  (require 'org-element)
  (let* (
     (org-todo-keywords '((sequence "Active(a)" "Next Action(n)" "Reference(r)"  "Someday(s)" "Delegated(d)" "|" "None(N)") ))
     (sample-todo (concat
       "* TASKS\n\n"
       "** Active [#A] smith @ drawer-one (fishing) | drawer-two (tennis). :lawlist:\n"
       "   DEADLINE: <2013-12-21 Sat 17:00>  SCHEDULED: <2013-12-21 Sat>\n"
       "   :PROPERTIES:\n"
       "   :DRAWER-ONE:  fishing\n"
       "   :DRAWER-TWO:  tennis\n"
       "   :END:\n\n"
       "** Next Action [#B] doe @ drawer-one (football) | drawer-two (bowling). :fred:\n"
       "   DEADLINE: <2013-12-22 Sun 08:30>  SCHEDULED: <2013-12-22 Sun>\n"
       "   :PROPERTIES:\n"
       "   :DRAWER-ONE:  football\n"
       "   :DRAWER-TWO:  bowling\n"
       "   :END:\n\n"
       "* EVENTS\n\n"
       "** Reference [#C] john @ drawer-one (fishing) | drawer-two (sky-diving). :george:\n"
       "   DEADLINE: <2013-12-23 Mon 10:15>  SCHEDULED: <2013-12-23 Mon>\n"
       "   :PROPERTIES:\n"
       "   :DRAWER-ONE:  fishing\n"
       "   :DRAWER-TWO:  sky-diving\n"
       "   :END:\n\n"
       "* UNDATED\n\n"
       "** Someday [#D] jane @ drawer-one (basket-ball) | drawer-two (bowling). :sam:\n"
       "   DEADLINE: <2013-12-24 Tues 12:00>  SCHEDULED: <2013-12-24 Tues>\n"
       "   :PROPERTIES:\n"
       "   :DRAWER-ONE:  basket-ball\n"
       "   :DRAWER-TWO:  bowling\n"
       "   :END:")))
     (if (get-buffer "foo.org")
       (progn
         (switch-to-buffer "foo.org")
         (erase-buffer)
         (delete-other-windows))
       (switch-to-buffer (get-buffer-create "foo.org")))
     (org-mode)
     (insert sample-todo)
     (goto-char (point-min))
     (or (y-or-n-p (format "For this example work, you must save this buffer as a file.  Proceed with example?"))
         (error "Canceled."))
     (write-file "~/Desktop/foo.org" t)
     (let* (
         (filename (buffer-file-name))
         (org-agenda-files (list filename))
         (org-agenda-only-exact-dates t)
         (org-agenda-show-all-dates nil)
         (org-deadline-warning-days 0)
         (org-agenda-time-grid nil)
         (org-agenda-span 'month)
         (org-agenda-entry-types '(:deadline))
         (month "12")
         (year "2013")
         (org-agenda-start-day (concat year "-" month "-" "01"))
         (drawer-content (read-string "basket-ball | bowling | fishing | football | sky-diving | tennis:  " nil))
         (org-agenda-skip-function (lambda ()
           (org-back-to-heading t)
           (let* (
               (element (org-element-at-point))
               (drawer-one (org-element-property :DRAWER-ONE element))
               (drawer-two (org-element-property :DRAWER-TWO element)))
             (cond
               ((not (or
                     (equal drawer-one drawer-content)
                     (equal drawer-two drawer-content)))
                 (org-end-of-subtree t))
               (t nil) )) )))
     (org-agenda-list))))

(defun example-two ()
(interactive)
  (let* (
      (drawer (read-string "Select a property drawer (e.g., ToodledoFolder):  "))
      (drawer-content (read-string (concat "Select the content of the " drawer " property drawer (e.g., EVENTS):  "))))
    (org-tags-view nil (concat drawer "=\"" drawer-content "\"" ))))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

组织议程正则表达式搜索类别 的相关文章

随机推荐