Org-mode. Пакет org-habit-ng
Org-mode. Пакет org-habit-ng
2026-01-28
·
4 мин. для прочтения
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 Использование мастера
- Мастер для создания описания повторений:
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 |

Authors
Профессор кафедры теории вероятностей и кибербезопасности
Работаю профессором на кафедре теории вероятностей и кибербезопасности Российского университета дружбы народов им. Патриса Лумумбы.
Научные интересы относятся к области теоретической физики и математического моделирования.