Org-roam. Пакет folgezett

2026-10-30 · 4 мин. для прочтения
blog

Org-roam. Пакет folgezett.

Содержание

1 Общая информация

2 Что делает

  • Пакет перехватывает процесс org-roam-capture.
    • Когда вы создаете новую заметку, Emacs спрашивает: Это начало новой цепочки (1), ответвление (branch) или продолжение (continue).
  • Записывает идентификатор в свойство FOLGEZETTEL_ID .
  • Пакет использует точки для разделения (например, 1.1 → 1.1a → 1.1a1 ).
  • Луман писал слитно ( 1a1).
  • Точки добавляются для сортировки.
  • Опционально может переименовывать файл, добавляя ID в начало имени (например, 1.1a-название.org ).
    • Для просмотра в Dired.

3 Функции

  • folgezett-reparent-subtree
    • Если ветка должна быть перенесена под другую заметку-родителя, эта команда автоматически пересчитает ID у всех дочерних заметок.
  • folgezett-goto-parent, folgezett-list-children
    • Быстрое перемещение вверх и вниз по иерархии.

4 Настройка пакета

4.1 Чистый emacs

;; Загружаем пакет только после org-roam
(with-eval-after-load 'org-roam

  ;; Подключаем пакет
  (require 'folgezett)

  ;; Добавлять ID в начало имени файла (например: "1.1a Система.org")
  (setq folgezett-include-id-in-filename t)

  ;; "Виртуальные" ссылки на родителя в базе данных.
  ;; Если t, то дочерние заметки будут появляться в буфере Backlinks у родителя,
  ;; хотя в самом тексте файла ссылки на родителя НЕ будет (файл остается чистым).
  ;; Требует выполнения M-x org-roam-db-sync после включения.
  (setq folgezett-db-link-parent t)

  ;; Показывать ID в буфере поиска (M-x org-roam-node-find)
  (setq folgezett-show-id-in-completions t)

  ;; Метка для экспорта (при генерации Hugo/PDF и т.д.)
  ;; Если хотите видеть "Previous: [[...]]" в экспорте, оставьте "Previous"
  ;; Если не нужно — установите в nil
  (setq folgezett-export-parent-label "Previous")

  ;; Активация пакета

  ;; Запускаем режим, который добавляет хуки в org-roam-capture
  (folgezett-setup)

  ;; Настройка клавиш (Keybindings)

  ;; Создаем префиксную карту для Zettelkasten
  (define-prefix-command 'ecf/folgezettel-map)
  (global-set-key (kbd "C-c n z") 'ecf/folgezettel-map)

  ;; Создание и управление ID
  (define-key ecf/folgezettel-map (kbd "a") #'folgezett-assign-id)        ; Назначить ID вручную
  (define-key ecf/folgezettel-map (kbd "d") #'folgezett-remove-id)        ; Удалить ID

  ;; Реструктуризация
  (define-key ecf/folgezettel-map (kbd "r") #'folgezett-reparent)         ; Сменить родителя (только у этой заметки)
  (define-key ecf/folgezettel-map (kbd "R") #'folgezett-reparent-subtree) ; Сменить родителя + пересчитать всю ветку детей

  ;; Навигация
  (define-key ecf/folgezettel-map (kbd "p") #'folgezett-goto-parent)      ; Перейти к родителю (Up)
  (define-key ecf/folgezettel-map (kbd "c") #'folgezett-list-children)    ; Выбрать из списка детей (Children)
  (define-key ecf/folgezettel-map (kbd "t") #'folgezett-show-tree))       ; Показать глобальное дерево (Tree)

4.2 С использованием general

(require 'general)

;; ==========================================
;; ЗАГРУЗКА И НАСТРОЙКА FOLGEZETT
;; ==========================================
(with-eval-after-load 'org-roam
  (require 'folgezett)

  ;; Настройка переменных
  (setq folgezett-include-id-in-filename t
        folgezett-db-link-parent t
        folgezett-show-id-in-completions t
        folgezett-export-parent-label "Previous")

  ;; Активация пакета
  (folgezett-setup)

  ;; ==========================================
  ;; КЛАВИАТУРНЫЕ СОЧЕТАНИЯ (префикс C-c n z)
  ;; ==========================================
  (general-define-key
   :prefix "C-c n z"
    ;; --- Создание и управление ID ---
    "a" #'("Assign ID" . folgezett-assign-id)
    "d" #'("Remove ID" . folgezett-remove-id)

    ;; --- Реструктуризация ---
    "r" #'("Reparent" . folgezett-reparent)
    "R" #'("Reparent subtree" . folgezett-reparent-subtree)

    ;; --- Навигация ---
    "p" #'("Goto parent" . folgezett-goto-parent)
    "c" #'("List children" . folgezett-list-children)
    "t" #'("Show tree" . folgezett-show-tree))

5 Команды

  • Все команды доступны через префикс C-c n z:
КлавишаКомандаНазначение
C-c n z afolgezett-assign-idНазначить Folgezettel-ID существующей заметке. Открывает диалог выбора якоря.
C-c n z dfolgezett-remove-idУдалить все Folgezettel-свойства из заметки и убрать ID из имени файла.
C-c n z rfolgezett-reparentПеренести текущую заметку под нового родителя. Меняется только её ID.
C-c n z Rfolgezett-reparent-subtreeПеренести заметку и переписать ID у всех её потомков.
C-c n z pfolgezett-goto-parentМгновенный переход к родительской заметке.
C-c n z cfolgezett-list-childrenОткрыть список всех прямых дочерних заметок для выбора.
C-c n z tfolgezett-show-treeОткрыть специальный буфер *Folgezettel Tree* со всей иерархией базы.

6 Workflow

  • Пакет автоматически перехватывает org-roam-capture.
  • Вы вызываете org-roam-capture (обычно C-c n i).
  • В минибуфере появляется диалог: Folgezettel anchor:
  • Выбираете существующую заметку (или [New chain — top-level note] для новой темы).
  • Нажимаете одну букву:
    • b — branch (создать ветку внутри, например 1.1 → 1.1a)
    • c — continue (создать сестринскую заметку, например 1.1 → 1.2)
  • ID автоматически записывается в свойство :FOLGEZETTEL_ID:,
  • Если включена опция folgezett-include-id-in-filename, файл переименовывается в формат 1.1a Название.org.
Дмитрий Сергеевич Кулябов
Authors
Профессор кафедры теории вероятностей и кибербезопасности
Работаю профессором на кафедре теории вероятностей и кибербезопасности Российского университета дружбы народов им. Патриса Лумумбы. Научные интересы относятся к области теоретической физики и математического моделирования.