Как мне получить исходный код .zshrc в emacs? - PullRequest
4 голосов
/ 24 февраля 2012

Когда я запускаю графический интерфейс emacs, PATH не устанавливается в зависимости от моего .zshrc.Как мне получить исходный код .zshrc для его правильной настройки?

Редактировать: я пытаюсь использовать swank-clojure, но не могу найти lein, поскольку он не на PATH.

Ответы [ 6 ]

11 голосов
/ 25 февраля 2012

Отредактировано, чтобы добавить (2014): Теперь в MELPA есть пакет с именем exec-path-from-shell, который решает эту точную проблему.(См. Также Github-репозиторий ).Почти наверняка лучше установить этот пакет, чем копировать и вставлять этот фрагмент.Помимо надлежащего обслуживания, он также поддерживает копирование других переменных окружения из вашей установки оболочки, поэтому любые подпроцессы, запущенные из Emacs, будут работать как положено.


Оригинальный ответ: Вот мойОбходной путь для этой проблемы, которая не требует всегда запуска Emacs из оболочки (меня это тоже беспокоит иногда на моем mac):

(let ((path (shell-command-to-string ". ~/.zshrc; echo -n $PATH")))
  (setenv "PATH" path)
  (setq exec-path 
        (append
         (split-string-and-unquote path ":")
         exec-path)))

Он задает для обоих Emacs представление о среде PATHпеременная (таким образом, она будет унаследована подоболочками) и переменная Lisp exec-path, которая используется для поиска исполняемых файлов из кода Lisp и для некоторых целей автозаполнения.Вам также может понадобиться проверить, что shell-file-name настроен на местоположение вашего двоичного файла zsh вместо значения по умолчанию /bin/bash.

4 голосов
/ 25 февраля 2012

FWIW, эта проблема не характерна для Mac OS X, поскольку она также влияет на системы GNU / Linux, где запуск Emacs из строки меню графического интерфейса пользователя обычно приводит к тому, что Emacs не имеет тот же PATH, что и запущенный изкомандная строкаЭта проблема восходит к первым `xdm '-сценариям Xsession, и хотя их довольно легко исправить (в основном используется сценарий Xsessionwrapper, который выполняет« exec $ SHELL -c Xsession », поэтому оболочка запускается до запуска пользовательского Xsession), здесьмы 20 лет спустя страдаем от той же старой проблемы.И почему-то я не ожидаю, что gdm3 это исправит; - (

1 голос
/ 25 февраля 2012

Mac OS X имеет специальный файл среды , позволяющий устанавливать переменные среды для процесса, запускаемого конкретным пользователем. Это позволяет вам устанавливать переменные среды для приложений с графическим интерфейсом. В вашем случае вы можете использовать это, чтобы установить PATH для любого запускаемого emacs, щелкнув по значку в доке или искателе.

Этот файл находится на

~/.MacOSX/environment.plist

Вы можете создать файл в XCode, но это просто XML, поэтому содержимое файла выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>PATH</key>
    <string>~/bin:/usr/local/bin:/usr/local/sbin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin:</string>
</dict>
</plist>
1 голос
/ 24 февраля 2012

Этот ответ для людей, которые нашли этот вопрос позже и испытывают эту проблему из-за поведения Emacs по умолчанию на Mac,

Если вы работаете на Mac и задаетесь вопросом , как заставить emacs запускаться из оболочки , где он будет загружать ваш настроенный ENV в графическом режиме, а не только в текстовом режиме, тогда запустите его из zsh примерно так:

 /Applications/Emacs.app/Contents/MacOS/Emacs  

Это должно привести к тому, что emacs увидит все ваши настройки оболочки (zsh или другие).

1 голос
/ 24 февраля 2012

Переменная Emacs использует вместо PATH и называется exec-path (C-h v exec-path RET для документации и состояния).exec-path инициализируется с PATH или EMACSPATH.Кажется, вы не запускаете Emacs с вашего zsh, поэтому ваш путь к Emacs не совсем совпадает с указанным в вашей оболочке.

Вы можете попробовать установить exec-path в вашем .emacs или init.el, хотявам придется поддерживать оба.Я не вижу способа напрямую получить конфигурацию вашей оболочки, но, может быть, вы могли бы просто найти свой путь из нее.

0 голосов
/ 28 сентября 2016

Вы также можете указать переменную PATH в файле .zshenv - предпочтительное соглашение для назначения среды для подоболочек.Пока zsh настроен как оболочка вашего пользователя по умолчанию, emacs будет получать ваш .zshenv независимо от того, как вызывается emacs.

...