Hacker News Digest

12 сентября 2025 г. в 20:53 • edoput.it • ⭐ 181 • 💬 26

OriginalHN

#emacs#elisp#org-mode

I used standard Emacs extension-points to extend org-mode

Emacs: сдвиг парадигмы

Прочитав гайд по расширению Emacs, я выхватил главное: редактор не просто позволяет кастомизацию, а требует её. Он отдаёт в руки функции-ядерные боеголовки вроде advice-add и ждёт, что ты разберёшь его на запчасти и соберёшь обратно, как нужно тебе.

Пример: автосортировка списка прочитанного в Org-режиме по году. Вручную вызывать org-sort-entries надоело.

  1. Оборачиваем команду в функцию, которую можно вызвать из кода:
(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)))
  1. Вешаем на хук сохранения:
(add-hook 'before-save-hook #'org-sort-run)

Готово, но это «ещё один скрипт». Хочется, чтобы критерий сортировки жил в самом файле.

Добавляем в заголовок:

#+SORT: year

Листаем исходники Org, ищем, как парсятся in-buffer-настройки (+STARTUPorg-startup-optionsorg-set-regexps-and-options), копируем кусок, вставляем своё ключевое слово SORT, читаем значение, передаём в org-sort-run.

Итого: без форка Org, без плагина, всего 15 строк элиспа, мы навязали режиму поведение, о котором его авторы не думали. Вот она, эмаксовская свобода.