Как заархивировать все задачи DONE с помощью одной команды

Для архивации задач DONE я использую

C-c C-x a

команда. Недостатком является то, что мне приходится вручную перемещать задачи DONE одну за другой, а затем архивировать их.

Как заархивировать все задачи DONE с помощью одной команды.


person Talespin_Kit    schedule 09.08.2011    source источник
comment
Только что заметил, что запуск M-x org-archive-subtree C-x-z (продолжайте нажимать z) близок к решению одной команды. Не уверен, что это кому-то поможет :)   -  person bgs    schedule 28.10.2015


Ответы (5)


Вы можете написать функцию, используя org-map-entries:

(defun my-org-archive-done-tasks ()
  (interactive)
  (org-map-entries 'org-archive-subtree "/DONE" 'file))
person madalu    schedule 10.08.2011
comment
Это пропуск четных подзаголовков при архивировании. Похоже, следует использовать переменную org-map-continue-from (я не понял, как их использовать). Вот текст из справки После оценки курсор переместится в конец строки (предположительно заголовка обрабатываемой записи) и оттуда продолжится поиск....В таких случаях можно указать позицию откуда искать следует продолжить, заставив FUNC установить переменную `org-map-continue-from' в желаемую позицию в буфере. - person Talespin_Kit; 05.12.2011
comment
Как упомянул @Talespin_Kit, в этом ответе есть ошибка, пропускающая каждую вторую запись DONE. Ответ Стефана ниже исправляет это, и у меня он работает правильно. - person Daniel Dinnyes; 10.05.2015
comment
Если в этом ответе есть ошибка, разве он не должен быть помечен как принятый ответ и вместо него должен быть принят тот, который работает? - person Adrian; 08.03.2020
comment
я должен добавить это в org-hook? - person alper; 30.07.2020

Вы можете выполнить массовое архивирование (или повторно заархивировать/изменить задачи и т. д.) в представлении повестки дня.

http://orgmode.org/manual/Agenda-commands.html#Agenda-commands

Если вы вызываете Org-Agenda из буфера, который хотите заархивировать, вы можете временно ограничить его только этим буфером и просматривать только записи todo и фильтровать только DONE.

C-c a < t
N r

Где N соответствует ярлыку для вашего состояния DONE (со состояниями по умолчанию это будет 2)

Затем вам просто нужно отметить все нужные заголовки и объемный архив.

m (mark for bulk action)
B a (or B $ for arch->sibling)
person Jonathan Leech-Pepin    schedule 09.08.2011
comment
Спасибо за ответ. Небольшое предложение. Пожалуйста, исправьте сокращение организационной повестки дня как C-ca вместо C-c C-a, так как новички в основном следуют организационному руководству, в котором C-ca используется как сокращение организационной повестки дня. - person Talespin_Kit; 10.08.2011
comment
@Talespin_Kit Упс, это должно было быть C-c, я просто неправильно написал. Спасибо, что поймали это. - person Jonathan Leech-Pepin; 10.08.2011
comment
@ I82Much переместите курсор на строку с элементом, который вы хотите отметить, и нажмите m. - person Sven Koschnicke; 21.01.2014
comment
В организационном режиме версии 8.2.3c это B $ для архива и B A для архива -> одноуровневый. - person Sven Koschnicke; 21.01.2014
comment
это слишком ручная работа, а также она не работает должным образом, если у вас установлены org-agenda-todo-ignore-scheduled, org-agenda-todo-ignore-deadline или org-agenda-todo-ignore-with-date (поскольку датированные элементы вообще не будут перечислены в буфере задач) - person Daniel Dinnyes; 10.05.2015
comment
Они будут перечислены, когда вы используете N r (где N — это состояние для перечисления), так как оно будет получать состояния готовности, они все равно не будут игнорироваться. - person Jonathan Leech-Pepin; 11.05.2015
comment
Bulk: [$]arch [A]rch->sib [t]odo [+/-]tag [s]chd [d]eadline [r]efile [S]catter [f]unction в организации 9.1 - person azzamsa; 10.06.2018
comment
Если вы хотите отметить все записи, нажмите * вместо m - person Robin Moffatt; 23.01.2020

Вот исправленная версия фрагмента madalu. Обратите внимание, что эта версия также работает только с текущим поддеревом (измените «дерево» обратно на «файл», чтобы работать со всем файлом).

(defun org-archive-done-tasks ()
  (interactive)
  (org-map-entries
   (lambda ()
     (org-archive-subtree)
     (setq org-map-continue-from (org-element-property :begin (org-element-at-point))))
   "/DONE" 'tree))
person Stefan van der Walt    schedule 20.11.2014
comment
Это правильный ответ. Кроме того, если вы используете область 'agenda вместо 'file, то она будет применяться ко всем зарегистрированным файлам повестки дня. Идеально! - person Daniel Dinnyes; 10.05.2015
comment
для тех, кто столкнулся с ошибкой. Цепочка косвенных функций Symbol содержит цикл: схема-показать-все, установка пакета схема-магия и перезапуск emacs решили эту проблему. - person palash kulshreshtha; 28.03.2018
comment
Я изменил 'tree на 'agenda. Однако, если я помечаю задачу как выполненную, ничего не происходит. Даже вызов функции не архивирует ее. Вы знаете, почему это могло произойти? - person math; 12.10.2018
comment
Какие состояния есть в нашем оргфайле, и как вы отмечаете задачи как выполненные? У меня #+TODO: TODO(t) NEXT(n) | DONE(d). - person Stefan van der Walt; 18.10.2018
comment
Это удаляет все, даже если это не /DONE - person alper; 30.07.2020
comment
@alper Если это так, то это должно быть недавнее изменение, потому что я использую это уже много лет. - person Stefan van der Walt; 01.08.2020
comment
@alper, изменив /DONE на /+DONE, исправляет это для меня - person whoever; 30.01.2021

Также из http://orgmode.org/manual/Moving-subtrees.html#Moving-subtrees

C-u C-c C-x C-s

Проверьте, можно ли переместить в архив какие-либо прямые дочерние элементы текущего заголовка. Для этого каждое поддерево проверяется на наличие открытых записей TODO. Если ничего не найдено, команда предлагает переместить его в расположение архива. Если при вызове этой команды курсор не находится на заголовке, будут проверены деревья уровня 1.

person George Moutsopoulos    schedule 01.02.2017
comment
похоже, что мне нужно делать C-x h каждый раз, чтобы выделить весь текст, тогда я должен делать C-u C-c C-x C-s - person agent18; 17.07.2019

Если вы хотите сделать это в исходном буфере организации (а не в представлении повестки дня организации), и если они следуют друг за другом, вы можете выбрать их всех в регионе и применить команду (например, Cc Ct d ).

Нужна только настройка:

;; Some commands act upon headlines in the active region.
(setq org-loop-over-headlines-in-active-region 'start-level)
person fniessen    schedule 20.11.2014