任何人都可以请我帮我删除标题为:event
或:event:
的标记,这些标记可能会或可能不会出现在标记为已完成的特定待办事项中。
如果没有其他标记,则要删除的表单为:event:
。如果右边附加了一个附加标记,那么要删除的表单是:event
- 因为连接到另一个标记的冒号需要保留 - 例如,:smith_john:
我想将此功能用于所有待办事项,即使某些待办事项不包含event
标记。
这有点棘手,因为正常的搜索和替换不仅限于todo列表中的这一个特定任务。我知道有关状态变化的标签删除功能,但我更喜欢使用自己的删除功能。
以下是附加到另一个标记的:event
示例:
** Reference [#A] smith @ meeting; 08/09/2013; 8:30 a.m. :event:smith_john:
DEADLINE: <2013-08-09 Fri 08:30 > SCHEDULED: <2013-08-09 Fri >
:PROPERTIES:
:ToodledoID: 335265357
:ToodledoFolder: EVENTS
:Hash: 4a6b6cc7fbefa9b7695b12247bf84d15
:END:
These are some notes relating to the client named John Smith.
以下是不包含:event
或:event:
标记的任务示例。 none
函数应该能够像上面的任务一样关闭它。
** Next Action [#D] 0 @ kid's birthday -- 07/18/1993 :lawlist:
DEADLINE: <2014-07-18 Fri >
:PROPERTIES:
:ToodledoID: 332902470
:ToodledoFolder: TASKS
:Hash: e7cf177f187d47c8fa8ca882f2725305
:END:
These are some notes relating to a task without an event tag.
以下是我用来将待办事项标记为None
的函数,当与Toodledo同步时,它将被理解为等同于通常称为completed
或{{1 }}。上面任务中的单词done
是Toodledo todo状态,我选择用于我日历上的事件,单词Reference
是我用于未来截止日期的任务。
Next Action
编辑:以下是上述(defun none (&optional default-heading)
(interactive)
(let ((lawlist-item default-heading)
result)
(unless lawlist-item
(condition-case nil
(progn
(org-back-to-heading t)
(setq lawlist-item (elt (org-heading-components) 4)))
)
)
(org-todo "None")
(org-priority ?E)
(org-schedule 'remove)
(org-deadline 'remove)
(org-set-property "ToodledoFolder" "DONE")
(setq org-archive-save-context-info nil)
(setq org-archive-location "/Users/HOME/.0.data/*TODO*::* DONE")
(org-archive-subtree)
(goto-char (point-min))
(re-search-forward "^\* DONE" nil t)
(condition-case err
(progn
(org-sort-entries t ?a)
(lawlist-org-cleanup) ) ;; a custom pagination function.
(error nil))
(re-search-forward lawlist-item nil t)
(beginning-of-visual-line)
(org-cycle-hide-drawers 'all)
))
函数中使用的清理函数,以防万一有人对以这种方式关闭特定待办事项的完整解决方案感兴趣:
none
答案 0 :(得分:2)
只要点在标题上,以下内容应该有效:
(when (search-forward-regexp ":event\\|event:" (line-end-position) t)
(replace-match "")
(when (and (looking-at ":$\\|: ") (looking-back " "))
(delete-char 1)))
答案 1 :(得分:1)
您可能会对以下内容感兴趣:
;; remove redundant tags of headlines (from David Maus)
(defun leuven--org-remove-redundant-tags ()
"Remove redundant tags of headlines in current buffer.
A tag is considered redundant if it is local to a headline and inherited by
a parent headline."
(interactive)
(when (eq major-mode 'org-mode)
(save-excursion
(org-map-entries
'(lambda ()
(let ((alltags (split-string
(or (org-entry-get (point) "ALLTAGS") "")
":"))
local inherited tag)
(dolist (tag alltags)
(if (get-text-property 0 'inherited tag)
(push tag inherited) (push tag local)))
(dolist (tag local)
(if (member tag inherited) (org-toggle-tag tag 'off)))))
t nil))))
答案 2 :(得分:1)
如果您只想在状态更改为DONE
(或等效)时删除标记,则可以使用以下内容:
(defun zin/org-remove-tag (tag)
"Removes `TAG' from current list of tags if present when todo
state is DONE."
(when (org-entry-is-done-p)
(org-toggle-tag tag 'off)))
(defun zin/remove-event ()
"Removes `event' from list of tags when state is set to done."
(zin/org-remove-tag "event"))
(add-hook 'org-after-todo-state-change-hook 'zin/remove-event)
(org-entry-is-done-p)
将返回标题的DONE
状态,如果未标记为已完成,则返回NIL。 org-toggle-tag
将切换标记的当前状态,或者如果提供可选参数(在本例中为'on
),则设置为'off
或'off
。
第一个函数对于任何给定标记都是通用的,而第二个函数特定于您想要的“事件”标记。
或者,您可以使用以下内容作为您的钩子:
(add-hook 'org-after-todo-state-change-hook '(lambda ()
(zin/org-remove-tag "event")))
答案 3 :(得分:0)
虽然接受的答案很有效,但以下代码段使用org-mode
函数来完成相同的结果 - org-set-tags-to
可以使用字符串或列表作为其可选参数;并且,没有参数删除所有标签。
(let (tags)
(save-excursion
(org-back-to-heading t)
(setq tags (org-element-property :tags (org-element-at-point))))
(when (and tags (member "event" tags))
(setq tags (delete "event" tags))
(org-set-tags-to tags)))