← На главную

Emacs с Elisp превращают любую внешнюю утилиту в гибкий сервис

10.07.2026 08:21 · hackernews

Emacs часто называют операционной системой. Это не совсем так, но он умеет управлять программами и утилитами поверх ядра ОС. Встроенный доступ к системным сервисам (файловая система, сеть) и умение запускать сторонние программы превращают Emacs в универсального клиента. Пользователи могут закрывать почти все свои задачи прямо в нём — отсюда и идея «жить только в Emacs».

Клиент-серверная модель тут работает так: клиент отправляет запрос, сервер возвращает ответ. Клиент отвечает за три вещи: пользовательский интерфейс (UI), связь с сервером (Client Edge) и локальное хранение данных (Local Database). Для каждого из этих пунктов Emacs предоставляет встроенные библиотеки — от работы с сетью до парсинга JSON. Если же есть готовая консольная утилита, она становится «сервисом»: Emacs просто дёргает её через shell.

Всё это пишется на языке Elisp. Он динамический, код можно менять на лету, что позволяет гибко комбинировать библиотеки и шелл-команды.

В статье есть конкретный пример — клиент для сервиса погоды wttr.in. Функция wttr запрашивает у пользователя локацию, собирает URL через wttr--request-url, передаёт его в fetch-json-as-hash-table. Та скачивает страницу через url-retrieve-synchronously, срезает HTTP-заголовки и парсит JSON в hash-таблицу Elisp. Функция wttr--report-message достаёт из этой таблицы название региона, страны, температуру в Цельсиях и Фаренгейтах и описание погоды. Всё это выводится в мини-буфер. Весь файл wttr.el занимает 67 строк.

Автор предлагает и альтернативу: если не хочется писать сложный Elisp, можно сделать Python-скрипт weather, а в Emacs — всего одну короткую функцию, которая вызывает его через shell-command-to-string. Shell-команда в таком случае и есть «сервис».

Итог простой: в Emacs любой внешний ресурс или утилита превращается в сервис, а Elisp позволяет связывать их быстрыми и гибкими клиентами.

Читать оригинал →