Emacs. Пакет universal sidecar

2026-10-12 · 3 мин. для прочтения
blog computer-science

Emacs. Пакет universal sidecar.

Содержание

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

  • Репозиторий:

  • Доступен в MELPA.

  • universal-sidecar — это пакет для Emacs, который создаёт боковой буфер (sidecar), показывающий контекстную информацию о текущем активном буфере.

  • Позволяет выводить в отдельной панели различные секции с данными.

  • Пакет требует magit (точнее, magit-section).

2 Загрузка

(require 'universal-sidecar)

3 Базовая настройка

3.1 Активация и деактивация

  • M-x universal-sidecar-toggle : открыть/закрыть sidecar-буфер для текущего фрейма.
  • M-x universal-sidecar-insinuate — автоматически обновлять sidecar.
  • M-x universal-sidecar-uninsinuate — отменить автоматическое обновление.
(universal-sidecar-insinuate)

3.2 Имя буфера

  • Формат имени sidecar-буфера задаётся переменной universal-sidecar-buffer-name-format, которая должна содержать %F — описание фрейма:
(setq universal-sidecar-buffer-name-format "*Sidecar: %F*")

3.3 Таймер обновления

  • Если universal-sidecar-enable-timer не nil, sidecar будет обновляться по таймеру простоя.
  • Время настраивается через universal-sidecar-refresh-time:
(setq universal-sidecar-enable-timer t
      universal-sidecar-refresh-time 1.0) ; секунды

3.4 Игнорирование буферов

  • Буферы можно исключить из отображения в sidecar с помощью регулярного выражения universal-sidecar-ignore-buffer-regexp или хука universal-sidecar-ignore-buffer-functions:
(setq universal-sidecar-ignore-buffer-regexp "^ \\*Minibuf")

4 Настройка секций

  • Секции — это блоки информации, отображаемые в sidecar.
  • Они задаются переменной universal-sidecar-sections.

4.1 Добавление секции

(add-to-list 'universal-sidecar-sections 'buffer-git-status)
  • add-to-list добавляет элемент в начало списка.
  • Можно использовать setq с явным списком:
(setq universal-sidecar-sections
      '(buffer-git-status
        buffer-file-name
        buffer-major-mode))

4.2 Передача аргументов

  • Некоторые секции принимают ключевые аргументы.
  • Например, buffer-git-status поддерживает :show-renames (по умолчанию t).
  • Чтобы отключить отображение переименований:
(setq universal-sidecar-sections
      '((buffer-git-status :show-renames nil)
        buffer-file-name))

4.3 Встроенные секции

  • Пакет предоставляет несколько готовых секций:
    • buffer-git-status — статус Git для текущего файла.
    • buffer-file-name — имя файла.
    • buffer-major-mode — основной режим.
    • buffer-minor-modes — активные минорные режимы.
    • buffer-position — позиция курсора.
    • buffer-project — информация о проекте (если используется project.el).

4.4 Создание собственной секции

  • Секция — это функция, которая принимает буфер и вставляет информацию с помощью magit-section:
(defun my/sidecar-buffer-size (buffer)
  "Показать размер BUFFER в байтах."
  (magit-insert-section (sidecar-buffer-size)
    (magit-insert-heading "Размер буфера:")
    (insert (format "%s байт" (buffer-size buffer)))))

(add-to-list 'universal-sidecar-sections 'my/sidecar-buffer-size)

5 Настройка отображения

5.1 Формат ID буфера

  • Имя sidecar-буфера в списке буферов формируется с помощью universal-sidecar-buffer-id-format и universal-sidecar-buffer-id-formatters.
  • Последняя — это alist пар символ/функция, где функция принимает буфер и возвращает строку:
(setq universal-sidecar-buffer-id-format "%f")
(setq universal-sidecar-buffer-id-formatters
      '((?f . (lambda (buf) (buffer-name buf)))))

5.2 Шрифтофикация

  • Для подсветки секций используйте universal-sidecar-fontify-as.
  • Макрос позволяет временно установить буфер-локальные переменные перед включением режима:
(universal-sidecar-fontify-as my-section
  ((my-local-var t))
  (emacs-lisp-mode))

6 Продвинутая настройка

6.1 Автоматическое открытие sidecar

  • Можно настроить автоматическое открытие sidecar при входе в определённые режимы:
(add-hook 'prog-mode-hook
          (lambda ()
            (unless (get-buffer-window universal-sidecar-buffer-name-format)
              (universal-sidecar-toggle))))

6.2 Интеграция с project.el

  • Если вы используете project.el, можно добавить секцию с информацией о проекте:
(add-to-list 'universal-sidecar-sections 'buffer-project)

6.3 Настройка universal-sidecar-advise-commands

  • Переменная universal-sidecar-advise-commands содержит список команд, после выполнения которых sidecar должен обновляться.
  • Можно дополнить её своими командами:
(add-to-list 'universal-sidecar-advise-commands 'my-command)
Дмитрий Сергеевич Кулябов
Authors
Профессор кафедры теории вероятностей и кибербезопасности
Работаю профессором на кафедре теории вероятностей и кибербезопасности Российского университета дружбы народов им. Патриса Лумумбы. Научные интересы относятся к области теоретической физики и математического моделирования.