Hacker News Digest

Тег: #elisp

Постов: 6

How I am deeply integrating Emacs (joshblais.com)

Joshua Blais глубоко интегрирует Emacs в свою рабочую среду, используя его для практически всех задач, кроме работы с видео. Он выбрал Hyprland в качестве оконного менеджера, отмечая его простоту настройки и отсутствие лагов в Wayland-режиме, в отличие от GNOME, где приходилось запускать Emacs в X11. Его цель — создать бесшовную среду, где мысли мгновенно превращаются в действия.

Автор рассматривал EXWM как оконный менеджер, но отказался от идеи из-за однопоточности Emacs (риск зависания всей системы) и привязки к X11, в то время как развитие Linux движется к Wayland. Для ускорения workflows он создал кастомный лаунчер на Go, который ускорил его работу в 10 раз. Текущая настройка включает vterm в качестве терминала по умолчанию, универсальный лаунчер, org mode для заметок, менеджер паролей, почту, чтение лент и музыку — всё внутри Emacs.

by signa11 • 06 ноября 2025 г. в 07:09 • 208 points

ОригиналHN

#emacs#hyprland#wayland#org-mode#elisp#go#linux#x11

Комментарии (146)

  • Спор о влиянии инструментов на творчество: одни утверждают, что свобода от инструментов раскрывает потенциал профессионалов, другие считают это заблуждением, подчеркивая важность качества инструментов.
  • Критика дистрибутивов типа Doom Emacs и Spacemacs: пользователи отмечают их полезность для новичков, но указывают на ограничения при глубокой кастомизации и конфликт с личными предпочтениями.
  • Технические ограничения Emacs: обсуждение проблем с EXWM (конфликт клавиш, однопоточность) и TRAMP для удаленной разработки, а также сравнение с современными редакторами вроде Helix.
  • Философия кастомизации: Emacs ценится за возможность полной настройки через Elisp, но это требует времени и усилий, что отпугивает некоторых пользователей.
  • Альтернативы и будущее: предложения о создании единого универсального редактора, критика текущей модели с множеством "окон в окнах" и поиск баланса между простотой и гибкостью.

I used standard Emacs extension-points to extend org-mode (edoput.it)

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 строк элиспа, мы навязали режиму поведение, о котором его авторы не думали. Вот она, эмаксовская свобода.

by Karrot_Kream • 12 сентября 2025 г. в 20:53 • 181 points

ОригиналHN

#emacs#elisp#org-mode

Комментарии (26)

  • Участники обсуждают Emacs как мощный, но трудоёмкий инструмент, который «отдаётся» только при долгосрочном использовании и постоянной доработке.
  • Сходятся во мнении: чем дольше им пользуешься, тем выше окупаемость вложенного времени, поскольку каждая доработка накапливается и ускоряет работу с текстом, файлами и внешними системами.
  • Некоторые признают, что «делают всё не так» — пишут корявый elisp, лишь бы работало, и со временем это «патинируется» в устойчивую конфигурацию.
  • Упоминают конкретные хаки: сохранение раскладки окон, быстрый переход к предыдущим точкам редактирования, интерактивная доработка кода в чате с Claude.
  • Часть пользователей всё же считает кривую обучения слишком крутой: годами не хватает IDE-фич, поэтому Emacs остаётся лишь для org-mode и периодических попыток «всё-таки пересесть».
  • Старая шутка звучит как аксиома: «Emacs учится всю жизнь — чем раньше начнёшь, тем дольше займёт».

A beginner's guide to extending Emacs (blog.tjll.net)

Краткий путь от Spacemacs к своему конфигу: как за 200 строк Elisp добавить автодополнение ref-ов в reStructuredText

Проблема: в Sphinx-доке сотни .. _code_example: и я не помню ни одного. Нужно M-. → список → выбрал → вставил.

0. Emacs готов быть поломан

  • Всё документировано, встроенный C-h f/C-h v покажет исходники.
  • advice-add, define-derived-mode, completion-at-point-functions — ядерные кнопки; нажал — получил power.

1. Берём нужные куски

  • rst-mode уже есть.
  • completion-at-point уже умеет списки.
  • Осталось написать backend, который возвращает список всех .. _xxx: из *.rst проекта.

2. Одна функция — один пулл

(defun rst-collect-refs ()
  "Возвращает alist (ref . file) для всех *.rst ниже `project-root'."
  (let ((refs nil))
    (projectile-map-project-files
     (lambda (f)
       (when (string-suffix-p ".rst" f)
         (with-temp-buffer
           (insert-file-contents f)
           (while (re-search-forward "^\\.\\. _\\([^:]+\\):" nil t)
             (push (cons (match-string-no-properties 1) f) refs))))))
    refs))

3. Подсовываем в CAPF

(defun rst-ref-capf ()
  (when (looking-back ":ref:`\\([^`]*\\)?" (line-beginning-position))
    (let ((refs (rst-collect-refs))
          (beg (match-beginning 1)))
      (list beg (point)
            (mapcar #'car refs)
            :annotation-function
            (lambda (s) (format "  (%s)" (cdr (assoc s refs))))))))
(add-hook 'rst-mode-hook
          (lambda ()
            (add-hook 'completion-at-point-functions
                      #'rst-ref-capf nil t)))

4. Украшательства (по желанию)

  • company-mode + company-capf → всплывающее меню.
  • marginalia → красивые аннотации.
  • which-key → подсказки команд.

5. Итого

20 минут, 40 строк «моего» кода, 160 строк boilerplate.
Emacs живёт 40 лет, но всё ещё позволяет за вечер сделать IDE под себя.

by ibobev • 12 сентября 2025 г. в 15:32 • 113 points

ОригиналHN

#emacs#elisp#sphinx#restructuredtext#projectile#company-mode#marginalia#which-key

Комментарии (13)

  • В Emacs всё — вызов функции: даже нажатие клавиши вызывает elisp-функцию, которую можно переопределить.
  • Встроенные describe, apropos, info и пакет helpful позволяют быстро понять, «что под капотом», и начать не только конфигурировать, но и расширять редактор.
  • Пользователи активно интегрируют LLM: через gptel просят Claude 4.1 отвечать в org-файл, версионируют диалоги и думают над собственным chat-mode.
  • Doom/Spacemacs дают «готовое мнение» для переходящих с Vim, но рано или поздно приходится дорабатывать конфиг самостоятельно.
  • Главный совет: не бояться экспериментировать — в Emacs конфигурация и полноценное программирование различаются только глубиной погружения.

Emacs as your video-trimming tool (xenodium.com) 🔥 Горячее

Emacs как обрезчик видео

Марцин Борковский показал, как вырезать фрагменты прямо из редактора. Автору тоже часто нужно обрезать скринкасты, поэтому он вдохновился и написал video-trimmer-mode (~300 строк Elisp).

  • Использует ffmpeg для всей тяжёлой работы.
  • Показывает превью и позволяет задавать начало/конец кадрами.
  • Код живёт в dotsies и обновляется.

Если пригодилось — поддержите автора на GitHub Sponsors или купите его macOS/iOS-приложения.

by xenodium • 19 августа 2025 г. в 16:22 • 277 points

ОригиналHN

#emacs#elisp#ffmpeg#video-editing

Комментарии (142)

  • Автор показал, как обрезать видео прямо в Emacs, используя ffmpeg и 300 строк Elisp.
  • Пользователи спорят: «круто, но зачем?» vs «если ты уже живёшь в Emacs, то это естественно».
  • Плюсы: всё текстом, клавиатурное управление, можно автоматизировать, не надо выходить из среды.
  • Минусы: GUI всё-таки удобнее для точного выбора кадров; для разовой задачи проще спросить LLM нужную команду ffmpeg.
  • Сторонники Emacs считают его не редактором, а полноценной программной средой (или «ОС»), где легко интегрировать любые инструменты.

Efrit: A native elisp coding agent running in Emacs (github.com)

efrit — агент для написания кода на чистом Elisp, работающий прямо в Emacs.
Он читает/пишет буферы, запускает команды, ищет документацию, тестирует и рефакторит код, используя только встроенные средства Emacs и внешние процессы.

Возможности

  • Понимает структуру проекта (файлы, зависимости, тесты).
  • Пишет новые функции, классы, тесты, документацию.
  • Исправляет баги и предлагает улучшения.
  • Работает в фоне и может действовать по хукам (сохранение, коммит).

Установка

(use-package efrit
  :straight (:host github :repo "steveyegge/efrit"))

Запуск: M-x efrit-mode в нужном буфере или (efrit-global-mode 1) для всей сессии.

Команды

  • efrit-suggest-improvements — предложения по коду.
  • efrit-write-tests — сгенерировать тесты.
  • efrit-explain-region — объяснить выделенный фрагмент.

Конфигурация

(setq efrit-model "gpt-4o-mini"
      efrit-max-tokens 4000
      efrit-auto-save t)

Статус
Альфа-версия; API может меняться. Пул-реквесты и issue приветствуются.

by simonpure • 08 августа 2025 г. в 19:20 • 140 points

ОригиналHN

#elisp#emacs#steveyegge#github#llm#code-generation#code-refactoring

Комментарии (29)

  • Пользователи обсуждают новый Emacs-пакет Efrit (от Steve Yegge) для AI-ассистента внутри редактора.
  • Уточняют, что «efrit» — это игра слов: «e» (emacs) + «ifrit» (разновидность джинна).
  • Сравнивают с gptel: Efrit пока заточен под Anthropic, в то время как gptel поддерживает множество бэкендов.
  • Кто-то уже запустил Efrit c Gemini через прокси, другие жалуются на ошибки и отсутствие документации.
  • Параллельно идёт спор о «современном» способе конфигурировать Emacs: bedrock, doom, ручной минимализм vs «сделать из Emacs VS Code».

Claude Code IDE integration for Emacs (github.com) 🔥 Горячее 💬 Длинная дискуссия

Claude Code IDE для Emacs

Обзор

  • Интеграция с Claude Code CLI через MCP создает двусторонний мост между Claude и Emacs.
  • Claude получает доступ к возможностям Emacs: LSP, проекты, Elisp-функции, что делает его «понимающим Emacs» помощником в вашем рабочем процессе.

Возможности

  • Автоопределение проекта и управление сессиями
  • Терминал с цветом (vterm/eat)
  • Реализация MCP для IDE-интеграции
  • Инструменты для файлов, состояния редактора и рабочего пространства
  • Расширяемый сервер MCP для Emacs-команд (xref, tree-sitter, project и др.)
  • Диагностики Flycheck/Flymake
  • Расширенный дифф с ediff
  • Поддержка tab-bar и отслеживание выделений/буферов

Интеграция инструментов Emacs

  • LSP через xref (eglot, lsp-mode) для навигации по коду
  • Tree-sitter для анализа AST
  • Imenu для структуры символов
  • Project для операций на уровне проекта
  • Любую команду/функцию Emacs можно выставить как MCP-инструмент: поиск и рефакторинг по проекту, доступ к режимам, выполнение кастомного Elisp.

Скриншоты

  • Осведомленность об активном файле — знает, какой файл открыт
  • Контекст выделения — работает с выделенным текстом
  • Продвинутый дифф с диагностикой — ediff и доступ к ошибкам/предупреждениям
  • Автоматические упоминания текста — вставка ссылок на выделение в диалог
  • Восстановление сессии — продолжение разговоров с флагом –resume

Установка Предварительные требования

  • Emacs 28.1 или новее

by kgwgk • 06 августа 2025 г. в 13:17 • 772 points

ОригиналHN

#emacs#lsp#elisp#vim#llm#ast#ide#tree-sitter#github

Комментарии (261)

  • AI-инструменты вроде Claude Code делают Emacs/Vim конкурентоспособными: вместо самостоятельной реализации сложных IDE-функций редакторы просто интегрируются с готовыми агентами.
  • Пользователи хвалят Emacs за полный доступ к состоянию редактора и возможность «на лету» менять поведение через Elisp, что идеально подходит для AI-агентов.
  • Уже существует несколько реализаций интеграции (claude-code.el, eca, claude-code-emacs и др.); споры идут, какая из них лучше, но все признают, что встраивание в Emacs ускоряет рабочий процесс.
  • Проблемы: сложность конфигурации, риск утечки чувствительных данных, привязка к конкретному провайдеру и необходимость локального запуска для приватности.