2

終了マークが付けられている特定の todo に存在する場合と存在しない場合がある、 または:eventというタイトルのタグを削除する手を誰か私に与えてください。:event:

追加のタグが存在しない場合、削除されるフォームは:event:です。右側に追加のタグが追加されている場合、削除されるフォームは:event- 他のタグに接続されたコロンが残る必要があるためです - たとえば、:smith_john: 一部の todo であっても、すべての todo にこの関数を使用したいtodoのタグは含まれません。event

通常の検索と置換では、todo リスト内のこの 1 つの特定のタスクだけに限定されないため、これは少し注意が必要です。状態の変更に関連するタグの削除機能は認識していますが、独自の削除機能を使用したいと考えています。

: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.

以下は、todo を としてマークするために使用する関数です。これは、Toodledo と同期すると、より一般的にorNoneと呼ばれるものと同等であると理解されます。上記のタスクの単語は、カレンダーのイベントに使用するために選択した Toodledo の todo 状態であり、この単語は、将来の期限があるタスクに使用するものです。completeddoneReferenceNext 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編集:誰かがこの方法で特定の todo を閉じるための完全なソリューションに興味がある場合に備えて、上記の関数で使用されるクリーンアップ関数を次に示します。

(defun delete-trailing-blank-lines-at-end-of-file ()
       "Deletes all blank lines at the end of the file, even the last one"
       (interactive)
       (save-excursion
         (save-restriction
           (widen)
           (goto-char (point-max))
           (delete-blank-lines)
           (let ((trailnewlines (abs (skip-chars-backward "\n\t"))))
             (if (> trailnewlines 0)
                 (progn
                   (delete-char trailnewlines)))))))

(defun lawlist-org-cleanup ()
(interactive)
(save-excursion 
(replace-regexp "\n+\\*\\* " "\n\n** " nil (point-min) (point-max))
(replace-regexp "\n+\\* " "\n\n\n* " nil (point-min) (point-max))
(replace-regexp "\n\t\s*" "\n   " nil (point-min) (point-max)) )
(delete-trailing-blank-lines-at-end-of-file) )
4

4 に答える 4

2

ポイントが見出しにある限り、次のように動作するはずです。

(when (search-forward-regexp ":event\\|event:" (line-end-position) t)
  (replace-match "")
  (when (and (looking-at ":$\\|: ") (looking-back " "))
     (delete-char 1)))
于 2013-08-11T11:02:01.707 に答える
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タグの現在の状態を切り替えるか、オプションの引数 (この場合は ) が指定されている場合は'onorに設定します。'off'off

最初の関数は特定のタグに対して一般的ですが、2 番目の関数は目的の「イベント」タグに固有です。

または、次をフックとして使用できます。

(add-hook 'org-after-todo-state-change-hook '(lambda ()
                                               (zin/org-remove-tag "event")))
于 2013-08-13T12:57:16.663 に答える
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))))
于 2013-08-12T08:09:09.953 に答える