Хотя я видел много SO вопросов относительно архивирования поддеревьев, я использую org-journal для создания ежедневного файла каждый день с шаблоном (например, 2018-09-14.org
), который затем записываю задачи в предварительном порядке.шаблон для личного, рабочего или что вы проходите через различные состояния, пока они не будут закончены DONE
или отменены KILL
(я считаю, что этот подход работает для меня, поскольку он также позволяет мне визуально увидеть в виде повестки дня, какС тех пор, как началось выполнение задачи, долго).
Я пытаюсь написать интерактивную функцию, которая:
- обрабатывает список всех моих файлов повестки дня .org и
- , если он обнаруживает все
TODO
s и DONE
или KILL
в файле (или их нет), - предлагает мне y, n, пропустить, чтобы переместить весь файл вего
whatever.org_archive
(начинающий видеть замедления с 5-месячным построением повестки дня при использовании режима org).
Я предполагаю, что кто-то другой уже использует подобный подход (потому чтоEmacs) но было интересно, еслиНикто не мог указать мне на подобную функцию или подход, который был бы полезен для выяснения этого.Погугление и избиение на elisp до сих пор были непродуктивными.
=== Месяц спустя === Ну, самообучение немного помогло, но сейчас я нахожусь в точке, где работают 3 независимые функции,но по какой-то причине я получаю сообщение об ошибке при вызове последней функции.
Тем не менее, я получаю сообщение об ошибке в строке 28 с недопустимой функцией: при вызове rename-file-buffer-to-org-archive
.Если кто-то может увидеть, в чем проблема, это решает мой вариант использования (и, возможно, кто-то другой, именно поэтому я вставил его сюда).
(defun archive-done-org-journal-files ()
"Cycles all org files through checking function."
(interactive)
(save-excursion
(mapc 'check-org-file-finito (directory-files "~/Desktop/test_archives/" t ".org$"))
))
(defun check-org-file-finito (f)
"Checks TODO keyword items are DONE then archives."
(interactive)
(find-file f)
;; Shows open Todo items whether agenda or todo
(let (
(kwd-re
(cond (org-not-done-regexp)
(
(let ((kwd
(completing-read "Keyword (or KWD1|KWD2|...): "
(mapcar #'list org-todo-keywords-1))))
(concat "\\("
(mapconcat 'identity (org-split-string kwd "|") "\\|")
"\\)\\>")))
((<= (prefix-numeric-value) (length org-todo-keywords-1))
(regexp-quote (nth (1- (prefix-numeric-value))
org-todo-keywords-1)))
(t (user-error "Invalid prefix argument: %s")))))
(if (= (org-occur (concat "^" org-outline-regexp " *" kwd-re )) 0)
((rename-file-buffer-to-org-archive)
(kill-buffer (current-buffer)))
(kill-buffer (current-buffer))
)))
(defun rename-file-buffer-to-org-archive ()
"Renames current buffer and file it's visiting."
(interactive)
(let ((name (buffer-name))
(filename (buffer-file-name))
)
(if (not (and filename (file-exists-p filename)))
(error "Buffer '%s' is not visiting a file!" name)
(let ((new-name (concat (file-name-sans-extension filename) ".org_archive")))
(if (get-buffer new-name)
(error "A buffer named '%s' already exists!" new-name)
(rename-file filename new-name 1)
(rename-buffer new-name)
(set-visited-file-name new-name)
(set-buffer-modified-p nil)
(message "File '%s' successfully archived as '%s'."
name (file-name-nondirectory new-name)))))))