Org-mode. Пакет org-habit-ng
Org-mode. Пакет org-habit-ng.
Содержание
1 Общая информация
- Репозиторий: https://codeberg.org/Trevoke/org-habit-ng
- Расширяет стандартный org-mode за счёт введения собственного DSL.
- Для меня наиболее интересна возможность задания количества повторений и время, после которого завершается работа привычки.
2 Другие пакеты
- Другие пакеты тоже могут реализовать подобную функциональность.
2.1 org-repeat-by-cron
- Репозиторий: https://github.com/TomoeMami/org-repeat-by-cron.el
2.2 org-reschedule-by-rule
- Репозиторий: https://github.com/Raemi/org-reschedule-by-rule
3 Шаблоны правил
RRULE— это стандарт для календарного повторения (RFC 5545).
3.1 Суточные и недельные графики
- Простейшие закономерности повторяются через фиксированные интервалы.
FREQзадает базовую единицу измерения (день, неделя, месяц, год).INTERVALумножает его.- Фильтр
BYDAYдля выбора конкретных дней.
| Что нужно | Правило |
|---|---|
| Каждый день | FREQ=DAILY |
| Каждые 3 дня | FREQ=DAILY;INTERVAL=3 |
| Каждую неделю | FREQ=WEEKLY |
| Каждые 2 недели | FREQ=WEEKLY;INTERVAL=2 |
| Пн, Ср, Пт | FREQ=WEEKLY;BYDAY=MO,WE,FR |
| Только по выходным | FREQ=WEEKLY;BYDAY=SA,SU |
3.2 Ежемесячные модели
BYDAYс числовым префиксом означает «N-е вхождение» «Этот будний день месяца».- Отрицательные числа отсчитываются с конца.
| Что нужно | Правило |
|---|---|
| 15-го числа каждого месяца | FREQ=MONTHLY;BYMONTHDAY=15 |
| Последний день месяца | FREQ=MONTHLY;BYMONTHDAY=-1 |
| 2-я суббота | FREQ=MONTHLY;BYDAY=2SA |
| В прошлую пятницу | FREQ=MONTHLY;BYDAY=-1FR |
| Первый будний день | FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=1 |
3.3 Годовые модели
| Что нужно | Правило |
|---|---|
| Каждый год 1 января | FREQ=YEARLY;BYMONTH=1;BYMONTHDAY=1 |
| Последнее воскресенье декабря | FREQ=YEARLY;BYMONTH=12;BYDAY=-1SU |
| День уплаты налогов (15 апреля) | FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=15 |
4 Гибкость в реальных условиях
4.1 Гибкие окна
Некоторые привычки не требуют строгого соблюдения графика. Например, “Поливать растения каждые 3 дня” — это действительно означает “примерно каждые 3 дня”:
* TODO Water plants SCHEDULED: <2024-01-15 Mon> :PROPERTIES: :STYLE: habit :RECURRENCE: FREQ=DAILY;INTERVAL=3;X-FLEXIBILITY=1 :END:X-FLEXIBILITY=1означает, что завершение на 1 день раньше или позже по-прежнему отображается как «Вовремя».
4.2 Повторение
- По умолчанию следующее событие рассчитывается с момента завершения.
- Но некоторые привычки следует придерживаться графика независимо от того, когда вы их завершите. их.
- Прием лекарств по установленному графику, например:
* TODO Take medication SCHEDULED: <2024-01-15 Mon> :PROPERTIES: :STYLE: habit :RECURRENCE: FREQ=DAILY;X-REPEAT-FROM=scheduled :END:
| Значение | Смысл |
|---|---|
completion | Далее — с момента, когда вы отметите «ГОТОВО» (по умолчанию). |
scheduled | Следующая дата с запланированной даты |
scheduled-future | Как и планировалось, но раньше никогда не было запланировано. |
4.3 Индивидуальные периоды предупреждения
В случае привычек с длительными интервалами вам могут понадобиться более ранние предупреждения:
* TODO Quarterly review SCHEDULED: <2024-01-15 Mon> :PROPERTIES: :STYLE: habit :RECURRENCE: FREQ=MONTHLY;INTERVAL=3;X-WARN=2w :END:X-WARN=2w: предупреждение о привычке появится за 2 недели до запланированной даты.
4.4 Прекращение действия: Ограниченные привычки
- Некоторые привычки не остаются навсегда.
- Например, 30-дневный челлендж:
* TODO 30-day challenge SCHEDULED: <2024-01-01 Mon> :PROPERTIES: :STYLE: habit :RECURRENCE: FREQ=DAILY;COUNT=30 :END:
| Параметр | Значение |
|---|---|
COUNT=N | Остановиться после N событий |
UNTIL=YYYYMMDD | Остановиться после этой даты |
- Я это же делаю с помощью org-edna (но сложнее и не полностьб реализую данный функционал).
5 Редактирование
- Для заголовка, описывающего привычку, необходимы две вещи:
- свойство
:STYLE: habit; - метка времени
SCHEDULED. Повторитель в метке времени не требуется.
- свойство
5.1 Панель редактирования
Создаёт новую привычку.
Чтобы изменить привычку, которая уже имеет правило
RECURRENCE, используйте мастер, который сначала считывает существующее правило.Наведите курсор на заголовок, описывающий привычку, откройте панель:
M-x org-habit-ng-authorПолучим меню.
Также предварительный просмотр в реальном времени правила, которое вы создаете, плюс несколько следующих реальных дат.
- Данные обновляется каждый раз, когда вы нажимаете клавишу, поэтому вы видите эффект каждого выбора по мере его совершения.
Выбор модели повтора (
s):- по расписанию (On a schedule);
- несколько раз за период (So many times each period);
- Хотя бы через определенные промежутки времени (At least every so often);
- Несколько раз в течение скользящего окна (So many times in a rolling window).
Для привычки, выполняемой по расписанию:
f: изменяет частоту;i: устанавливает интервал;d: открывает многофункциональный переключатель для будних дней (еженедельный);m: открывает подменю дня/порядкового номера месяца;o: подменю года;l/y: установить поздний/ранний допуск (X-FLEX-AFTER/X-FLEX-BEFORE);~: переключает ближайший день недели (X-SKIP), отображается только в том случае, если правило является ежемесячным/ежегодным правилом выбора дня месяца;e: устанавливает границуCOUNTилиUNTIL;n: временной интервал для сезонных месяцев;k: добавляет диапазон отпусков;g: загружает рабочий пример;RET: сохраняет расписание;q: сбрасывает панель.
Конфигурация месяцев.
- В подменю месяца (
m) можно получить доступ к набору порядковых дней недели, а не одному единственному (с помощью пошагового интерфейса). - Переместите курсор порядкового номера с помощью
1234l(последний), затем нажмите букву дня недели (u m t w h f s= Вс..Сб), чтобы переключать эту пару порядковый номер-день недели.
- В подменю месяца (
Например: установите курсор на
2и нажмитеt, затем установите его на4и нажмитеtеще раз, и панель будет сформирована:FREQ=MONTHLY;INTERVAL=1;BYDAY=2TU,4TU- Это означает: каждый месяц во второй и четвертый вторник.
5.2 Использование мастера
Мастер для создания описания повторений:
M-x org-habit-ng-set-recurrenceМастер настройки пошагово описывает каждый вариант и показывает предварительный просмотр перед сохранением.
Если заголовок уже содержит
RECURRENCEсвойство, которое вы можете изменить или очистить его.
6 Сводное описание
6.1 Полный набор компонентов RRULE
6.1.1 Частоты
| Частота | Значение |
|---|---|
SECONDLY | Каждые N секунд |
MINUTELY | Каждые N минут |
HOURLY | Каждые N часов |
DAILY | Каждые N дней |
WEEKLY | Каждые N недель |
MONTHLY | Каждые N месяцев |
YEARLY | Каждые N лет |
6.1.2 Параметры
| Параметр | Ценности | Значение |
|---|---|---|
INTERVAL | Число (по умолчанию 1) | Повторять каждые N периодов |
BYDAY | ПН, ВТ, СР, ЧТ, ПТ, СБ, ВС | Конкретные дни недели |
BYDAY | 2SA, -1FR | N-й рабочий день (отрицательное число = от конца) |
BYMONTHDAY | 1-31, -1 до -31 | День месяца (отрицательное число = от конца месяца) |
BYMONTH | 1-12 | Конкретные месяцы |
BYSETPOS | 1, -1 и т. д. | Позиция в сете (первая, последняя) |
COUNT | Число | Остановиться после N событий |
UNTIL | ГГГГММДД | Остановить после истечения срока годности |
6.1.3 Расширения org-habit-ng
| Расширение | Ценности | Значение |
|---|---|---|
X-REPEAT-FROM | завершение, запланированное, запланированное на будущее | Основа для следующего события |
X-WARN | Nd, Nw, Nh (дни, недели, часы) | Предупредительный период |
X-FLEXIBILITY | Число (дней) | Льготный период вокруг даты платежа |
6.2 Команды
| Командование | Описание |
|---|---|
org-habit-ng-mode | Включение/отключение дополнительного режима |
org-habit-ng-set-recurrence | Интерактивный мастер для RRULE |
