Как запустить графический интерфейс Emacs из командной строки в OSX?
Я загрузил и установил Emacs с http://emacsformacosx.com/ .
Я приму ответ, соответствующий всем следующим критериям:
- Окно emacs открывается перед окном моего терминала.
- При вводе «emacs» открывается окно графического интерфейса пользователя Emacs. Поиск файлов в этом окне по умолчанию будет искать в каталоге, откуда я запустил Emacs.
- Ввод «emacs foo.txt» при наличии foo.txt запускает окно Emacs с графическим интерфейсом пользователя с загруженным foo.txt.
- Ввод «emacs foo.txt», когда foo.txt не существует, запускает окно Emacs с графическим интерфейсом пользователя с пустым текстовым буфером с именем «foo.txt». Выполнение ^ X ^ S в этом буфере сохранит foo.txt в каталоге, из которого я запустил Emacs.
macos
emacs
command-line
Йохан Валлес
источник
источник
emacsclient -c -a "" "$@"
commandОтветы:
Назовите следующий сценарий "emacs" и поместите его
PATH
где-нибудь:#!/bin/sh /Applications/Emacs.app/Contents/MacOS/Emacs "$@"
Это касается № 2, № 3 и № 4.
Для №1 поместите это где-нибудь в свой файл .emacs:
(x-focus-frame nil)
На сайте emacsformacosx.com теперь есть страница с практическими рекомендациями , откуда взялся верхний фрагмент. Там есть дополнительная информация о запуске
emacsclient
и подключении Emacsgit mergetool
.источник
~/foo
и хочу открытьbar.txt
набираю ,gmacs bar.txt
но он создает новый файл на~/bar.txt
вместо открытия~foo/bar.txt
. Я делаю что-то неправильно?В вашей оболочке используйте псевдоним команды emacs, чтобы указать на приложение OSX emacs
В моей оболочке (запущенной по умолчанию bash) у меня есть следующее (в моем .bashrc)
alias emacs='open -a /Applications/Emacs.app $1'
Затем при вводе emacs в командной строке запускается приложение emacs.
Однако я бы порекомендовал вам открыть копию emacs и просто держать ее в рабочем состоянии. Если это так, и вы хотите загрузить файл в существующую копию emacs, вы можете использовать emacsclient, поместив следующее в свой .bashrc:
Затем добавьте следующее в свой файл .emacs, чтобы запустить сервер emacs (который принимает вызовы emacsclient)
;;======================================== ;; start the emacsserver that listens to emacsclient (server-start)
Затем вы можете ввести
чтобы загрузить копию .bashrc в существующий сеанс emacs!
источник
Это улучшает ответ Дэвида Колдуэлла, запустив Emacs в фоновом режиме:
#!/bin/sh $(/Applications/Emacs.app/Contents/MacOS/Emacs "$@") &
Как указано в другом ответе, это касается № 2, № 3 и № 4. Для # 1, поместить это где - то в вашем файле .emacs:
(x-focus-frame nil)
.Обратите внимание, что следующее не работает для меня - он не запускает Emacs в каталоге, указанном в командной строке (например,
emacs .
)# NOT RECOMMENDED #!/bin/sh /Applications/Emacs.app/Contents/MacOS/Emacs "$@" &
источник
Я полагаю, вы тоже:
Если это так, то я думаю, что это удовлетворяет исходным четырем критериям плюс еще один:
он всегда будет открываться на передний план (с x-focus-frame).
Он откроет существующее окно emacs в режиме dired.
Если emacs уже запущен и имеет сервер, он откроется в существующем окне и выйдет на передний план.
Верный.
Один дополнительный:
Управление возвращается в сеанс терминала сразу после ввода команды.
~ / bin / emacs
#!/bin/bash EMACSPATH=/Applications/Emacs.app/Contents/MacOS # Check if an emacs server is available # (by checking to see if it will evaluate a lisp statement) if ! (${EMACSPATH}/bin/emacsclient --eval "t" 2> /dev/null > /dev/null ) then # There is no server available so, # Start Emacs.app detached from the terminal # and change Emac's directory to PWD nohup ${EMACSPATH}/Emacs --chdir "${PWD}" "${@}" 2>&1 > /dev/null & else # The emacs server is available so use emacsclient if [ -z "${@}" ] then # There are no arguments, so # tell emacs to open a new window ${EMACSPATH}/bin/emacsclient --eval "(list-directory \"${PWD}\")" else # There are arguments, so # tell emacs to open them ${EMACSPATH}/bin/emacsclient --no-wait "${@}" fi # Bring emacs to the foreground ${EMACSPATH}/bin/emacsclient --eval "(x-focus-frame nil)" fi
источник
В Mountain Lion я использую порт Ямамото Мицухару https://github.com/railwaycat/emacs-mac-port со следующим псевдонимом:
и он удовлетворяет всем вашим критериям.
источник
Простое решение ...
Здесь размещено множество очень сложных решений этой проблемы. Это справедливо, потому что это кажется нетривиальным.
Однако это решение мне очень подходит.
ec() { emacsclient -n $@ 2> /dev/null if [[ $? == 1 ]]; then open -a Emacs.app -- $@ fi }
Применение
Распаковываем что происходит:
ec
аргументы в emacsclient и не (-n
) ждать emacs перед продолжением.2> /dev/null
)1
([[ $? == 1 ]]
)источник
Только что собрал emacs с менеджером пакетов homebrew согласно этому руководству: http://www.emacswiki.org/emacs/EmacsForMacOS с brew install --cocoa emacs После этого нужно запустить версию .app, чтобы получить графический интерфейс, который в моем случае был /usr/local/Cellar/emacs/24.3/Emacs.app/Contents/MacOS/Emacs
источник
Дальнейшее улучшение ответа Дэвида Джеймса для меня работает следующим образом:
Согласно инструкциям по открытию файла с терминала, которые можно найти на http://www.emacswiki.org/emacs/EmacsForMacOS#toc20
объединив это с ответом Дэвида Джейма, я создал следующий сценарий emax bash и поместил его на свой путь в ~ / bin
#!/bin/bash (open -a /Applications/Emacs.app "$@") &
Предостережение : чтобы заставить emacs открывать текущий каталог в режиме Dired по имени , вам необходимо использовать
Окружающая среда:
источник
Другие ответы здесь не совсем сработали для меня. В частности, на моей машине сценарий bash
#!/bin/sh /Applications/Emacs.app/Contents/MacOS/Emacs "$@"
всегда открывает emacs в домашнем каталоге. Чтобы открыть его в текущем рабочем каталоге, мне пришлось сделать
#!/bin/sh /Applications/Emacs.app/Contents/MacOS/Emacs "$PWD/$@"
вместо.
источник
Скомпилируйте Emacs, выполнив следующие шаги:
Готово! Может помочь загрузка и установка XQuartz, но это только мое мнение.
источник
Это мой сценарий для открытия emacs / emacsclient на osx.
#!/bin/bash # Ensure (server-start) is added in your emacs init script. EMACS=/Applications/MacPorts/Emacs.app/Contents/MacOS/Emacs EMACSCLIENT=/Applications/Macports/Emacs.app/\ Contents/MacOS/bin/emacsclient # test if client already exsit. $EMACSCLIENT -e "(frames-on-display-list)" &>/dev/null # use emacsclient to connect existing server. if [ $? -eq 0 ]; then $EMACSCLIENT -n "$@" # open emacs.app instead. else `$EMACS "$@"` & fi
источник
Во всем вышеперечисленном при использовании "open" убедитесь, что вы используете параметр "--args"
Не делайте этого:
alias emacs='open -a /Applications/Emacs.app $1'
Вместо этого:
alias emacs='open -a /Applications/Emacs.app --args $1'
эта
--args
опция не позволяет "open" использовать различные опции, предназначенные для Emacs.источник
Верхний ответ хорош, но я хотел , чтобы Emacs обрабатывать , чтобы работать в фоновом режиме , так что я все еще мог использовать мою оболочку. Этот ответ, похоже, делал то, что я хотел, но не запускал emacs в правильном каталоге, что означало, что требовались абсолютные пути (или хаки для добавления
pwd
к путям, которые не работали во всех случаях). Более того, простое использование&
означало, что если я убью терминал, emacs также будет убит.Я решил использовать
screen
и функцию bash, и следующее решение работает для меня на macOS 10.15.6 и emacs 26.2, установленных сbrew
:function emacs() { screen -d -m /Applications/Emacs.app/Contents/MacOS/Emacs "$@" }
источник
screen
отбросил меня, теперь, когда я читаю внимательнее, я понимаю, что ты прав Мои извинения @ gsingh2011.