I used standard Emacs extension-points to extend org-mode
Emacs: сдвиг парадигмы
Прочитав гайд по расширению Emacs, я выхватил главное: редактор не просто позволяет кастомизацию, а требует её. Он отдаёт в руки функции-ядерные боеголовки вроде advice-add и ждёт, что ты разберёшь его на запчасти и соберёшь обратно, как нужно тебе.
Пример: автосортировка списка прочитанного в Org-режиме по году. Вручную вызывать org-sort-entries надоело.
- Оборачиваем команду в функцию, которую можно вызвать из кода:
(defun org-sort-run ()
(when (and (derived-mode-p 'org-mode) org-sort-option)
(org-sort-entries nil ?r nil nil org-sort-option nil)))
- Вешаем на хук сохранения:
(add-hook 'before-save-hook #'org-sort-run)
Готово, но это «ещё один скрипт». Хочется, чтобы критерий сортировки жил в самом файле.
Добавляем в заголовок:
#+SORT: year
Листаем исходники Org, ищем, как парсятся in-buffer-настройки (+STARTUP → org-startup-options → org-set-regexps-and-options), копируем кусок, вставляем своё ключевое слово SORT, читаем значение, передаём в org-sort-run.
Итого: без форка Org, без плагина, всего 15 строк элиспа, мы навязали режиму поведение, о котором его авторы не думали. Вот она, эмаксовская свобода.