Да, точно. В документации к org-todo и org-todo-keywords написано, что первая перебирает то, что указано во второй. Что делает org-todo-keywords-1 я затрудняюсь понять т.к. к ней вообще никакой документации нет...
В документации не написано, что ее можно изменять динамически. Вот ты попробовал и не получилось. В этом Emacs Lisp не виноват, так написан org-mode. Эта переменная, скорее всего, читается один раз при инициализации режима, переписывается в каком-то виде в какую-то внутреннюю переменную, которая в org-todo используется в дальнейшем. Я в код не смотрел, но, скорее всего, именно так.
org-mode-restart is an interactive compiled Lisp function.
(org-mode-restart)
Restart Org-mode, to scan again for special lines.
Also updates the keyword regular expressions.
задача казалась тривиальной: чтобы статус задачи с «WAITING» всегда переключался на «TODO»... ~~"
Кстати вы не знаете, как сделать отображение затраченого на выполнение задачи времени? В идеале я хочу, чтобы оно отображалось в отдельном поле, например:
и еще одна деталь, я потихоньку переписываю стандартные функции clojure на emacs lisp. Не подскажете, что на emacs lisp есть для отложеных вычислений и распараллеливания?
задача казалась тривиальной: чтобы статус задачи с «WAITING» всегда переключался на «TODO»... ~~"
Не вижу сложностей, но только я не понимаю одного: как ты ставишь статус «WAITING»? Обычным C-c C-t? А что происходить должно, когда ты потом нажимаешь еще раз C-c C-t? А какие еще состояния у тебя есть? Как выглядит алгоритм работы?
Другими словами, зачем динамически подмахивать? Разве нельзя просто список '(sequence «state1» «state2» .... «WAITING» «DONE») сделать? Тогда у тебя будет после «WAITING» твой «DONE»
т.е. я динамически переопределяю org-todo-keywords-1, как советовал provaton. Токо оно еще не совсем работает: рекурсивн опереключает WAITING и TODO... ~~"
Объясни, плиз, на словах, что ты хочешь сделать. Я вообще не понимаю. Как должно быть? Ты же пишешь выше, что хочешь после WAITING чтобы был TODO. Почему это не подходит:
т.е. я динамически переопределяю org-todo-keywords-1
Ну и вдогонку. Идея лезть во внутренние переменные - это от безнадеги. Если тебе хочется манипулировать каким-то хитрым способом с TODO, то пользуйся штатными методами - через хуки. Есть несколько хуков. Например, есть org-trigger-hook. Ты можешь словить событие переключения статуса задачи и сделать org-todo на любой другой статус в зависимости от каких-то условий. Например, так:
Но этот код тоже будет циклить между TODO, DONE и WAITING, на QUOTE никогда не попадет, но это ничего удивительного, так как ты сам такую логику странную закладываешь. Твое желание, как я и написал выше, исполняется обычным методом без всяких хаков.
Как это словами описать? Потому что то, что ты описал, совершенно другое. И тот код, который ты попытался написать, тоже делает совсем не это. И я до сих пор не понимаю, что ты хотел.