С аудиторией разобрались. 20% сидящих на Windows это много. Надеюсь, у вас там WSL2 и всё хорошо.
Вернёмся к Emacs. Он не существует как сферический конь в вакууме сам по себе, а работает с теми переменными, которые заданы на уровне окружения. Например, переменная
Когда вы переходите в какой-нибудь каталог и открываете файл, Emacs по-прежнему знает про переменные окружения. Самая важная из них —
Если путь к каталогу с исполняемым файлом линтера не входит в
Emacs пишет:
Это потому, что Sphinx установлен в виртуальном окружении, про которое Emacs ничего не знает.
Виртуальное окружение, как правило, активируется с помощью этой команды:
Эта команда добавляет в
Вы вызываете команду:
Bundler заполняет переменные окружения нужными значениями, а уже потом запускает
THE BAD
Установите
Возможно, это даже не сломает вашу систему. А может быть сломает. Разработчики Debian запретили установку и обновление системных пакетов Python с помощью PIP. Думаю, скоро настанет и очередь Ruby.
THE UGLY
Используйте пакет
THE GOOD
Установите в систему утилиту direnv. А вот как её использовать, и при чём тут Emacs — тема отдельного поста.
#direnv #ruby #python
Вернёмся к Emacs. Он не существует как сферический конь в вакууме сам по себе, а работает с теми переменными, которые заданы на уровне окружения. Например, переменная
HOME
. В *nix-системах это путь к домашнему каталогу. В Windows по умолчанию такой переменной нет, и Emacs вынужден подставить туда хоть что-то. По умолчанию — путь к каталогу с профилем. Ну, вот этот вот, типа C:\Users\mdunaevsky\AppData\Roaming
. Не очень красивое название, правда? Мне больше нравится D:\dunaevsky
. Впрочем, вы можете создать эту переменную сами в настройках ОС.Когда вы переходите в какой-нибудь каталог и открываете файл, Emacs по-прежнему знает про переменные окружения. Самая важная из них —
PATH
. Она хранит список каталогов, в которых нужно выполнять поиск при запуске команд. В Windows эта переменная тоже есть. Поэтому, когда вы смотрите статус Flycheck, то видите там те пути к своим линтерам, которые Emacs смог найти в каталогах, указанных в PATH
.Если путь к каталогу с исполняемым файлом линтера не входит в
PATH
, Emacs (точнее, Flycheck), не сможет использовать его. Разумеется, другие команды тоже не будут работать. Вы вызываете projectile-build-command
:make dirhtml
Emacs пишет:
sphinx-build not found
Это потому, что Sphinx установлен в виртуальном окружении, про которое Emacs ничего не знает.
Виртуальное окружение, как правило, активируется с помощью этой команды:
source .venv/bin/activate
Эта команда добавляет в
PATH
нужные пути, и делает много какой другой работы. Когда вы активируете окружение, то получаете настроенные переменные окружения. Это работает не только с Python. Например, утилита Bundler из мира Ruby делает то же самое: заполняет переменные окружения нужными значениями.Вы вызываете команду:
bundle exec asciidoctor-pdf ...
Bundler заполняет переменные окружения нужными значениями, а уже потом запускает
asciidoctor-pdf
. Вот только использовать его совместно с Flycheck в этом случае не получится, я проверял. Нужно что-то другое.THE BAD
Установите
asciidoctor
в системное окружение с помощью команды:gem install asciidoctor
Возможно, это даже не сломает вашу систему. А может быть сломает. Разработчики Debian запретили установку и обновление системных пакетов Python с помощью PIP. Думаю, скоро настанет и очередь Ruby.
THE UGLY
Используйте пакет
asciidoctor
, входящий в состав дистрибутива. Скорее всего, там будет какое-нибудь старьё, но этот способ даёт хоть какой-то контроль над происходящим.THE GOOD
Установите в систему утилиту direnv. А вот как её использовать, и при чём тут Emacs — тема отдельного поста.
#direnv #ruby #python
👍1