Как запустить графический интерфейс Emacs из командной строки в OSX?

Как запустить графический интерфейс Emacs из командной строки в OSX?

Я загрузил и установил Emacs из http://emacsformacosx.com/.

Я приму ответ, отвечающий всем следующим критериям:

  • Окно emacs открывается перед моим терминальным окном.
  • Набрав "emacs", запускается окно GUI Emacs. Поиск файлов в этом окне по умолчанию будет выглядеть в каталоге, откуда я начал Emacs.
  • Ввод "emacs foo.txt", когда foo.txt существует, запускает окно GUI Emacs с загруженным foo.txt.
  • Набрав "emacs foo.txt", когда foo.txt не существует, запускается окно GUI Emacs с пустым текстовым буфером с именем "foo.txt". Выполнение ^ X ^ S в этом буфере сохранит foo.txt в каталоге, откуда я начал Emacs.

Ответ 1

Вызвать следующий script "emacs" и поместить его в PATH где-нибудь:

#!/bin/sh
/Applications/Emacs.app/Contents/MacOS/Emacs "[email protected]"

Это охватывает # 2, # 3 и # 4.

Для # 1 поместите это где-нибудь в файл .emacs:

(x-focus-frame nil)

На веб-сайте emacsformacosx.com есть страница How-To, в которой находится верхний фрагмент пришли из. Там больше информации о запуске emacsclient и подключении Emacs до git mergetool.

Ответ 2

В вашей оболочке alias команда emacs указывает на приложение OSX emacs

В моей оболочке (работает по умолчанию bash) у меня есть следующее (в моем .bashrc)

alias emacs='open -a /Applications/Emacs.app $1'

Затем, ввод emacs в командной строке запускает приложение emacs.

Однако я бы рекомендовал вам открыть копию emacs и просто продолжить работу. В этом случае, и вы хотите загрузить файл в существующую копию emacs, вы можете использовать emacsclient, поместив следующее в свой .bashrc:

alias ec='/Applications/Emacs.app/Contents/MacOS/bin/emacsclient'

Затем добавьте следующее в ваш файл .emacs, чтобы запустить сервер emacs (который получает вызовы emacsclient)

;;========================================
;; start the emacsserver that listens to emacsclient
(server-start)

Затем вы можете ввести

ec .bashrc

загрузить копию .bashrc в существующий сеанс emacs!

Ответ 3

Это улучшает ответ Дэвид Колдуэлл, запустив Emacs в фоновом режиме:

#!/bin/sh
$(/Applications/Emacs.app/Contents/MacOS/Emacs "[email protected]") &

Как указано в другом ответе, это охватывает # 2, # 3 и # 4. Для # 1 поместите это где-нибудь в файл .emacs: (x-focus-frame nil).

Обратите внимание, что для меня работает не - он не запускает Emacs в каталоге, указанном в командной строке (например, emacs .)

# NOT RECOMMENDED
#!/bin/sh
/Applications/Emacs.app/Contents/MacOS/Emacs "[email protected]" &

Ответ 4

На Mountain Lion я использую порт Yamamoto Mitsuharu https://github.com/railwaycat/emacs-mac-port со следующим псевдонимом:

alias emacs=/Applications/Emacs.app/Contents/MacOS/Emacs

и он удовлетворяет всем вашим критериям.

Ответ 5

Дальнейшее улучшение ответа Дэвида Джеймса: для меня работает следующее:

В соответствии с инструкциями, чтобы открыть файл с терминала, найденного в http://www.emacswiki.org/emacs/EmacsForMacOS#toc20

open -a /Applications/Emacs.app <file-name>

Объединив это с ответом David Jame, я создал следующий emax bash script и поместил его в свой путь в ~/bin

#!/bin/bash
(open -a /Applications/Emacs.app "[email protected]") &

Caveat: чтобы emacs открывал текущий каталог в режиме Dired by name, вам нужно использовать

emax .

Окружающая среда:

  • OS X Yosemite Version 10.10.2
  • GNU Emacs 24.4.2 (x86_64-apple-darwin14.0.0, NS apple-appkit-1343.14) от 2014-11-13

Ответ 6

Я предполагаю, что вы либо:

  • Запустите демон emacs при входе в систему
  • У вас (сервер-старт) в вашем .emacs
  • Не возражайте, если у вас будет много отдельных экземпляров emacs.

Если это так, то я думаю, что это удовлетворяет исходным четырем критериям, плюс еще одно:

  • Окно emacs открывается перед моим терминальным окном.

он всегда будет открыт для переднего плана (с x-focus-frame).

  1. Набрав "emacs", запускается окно GUI Emacs. Поиск файлов в этом окне по умолчанию будет выглядеть в каталоге, откуда я начал Emacs.

Он откроет существующее окно emacs в режиме ожидания.

  1. Набрав "emacs foo.txt", когда foo.txt существует, запускается окно GUI Emacs с загруженным foo.txt.

Если emacs уже запущен и имеет сервер, он откроется в существующем окне и выйдет на передний план.

  1. Набрав "emacs foo.txt", когда foo.txt не существует, запускается окно GUI Emacs с пустым текстовым буфером с именем "foo.txt". Выполнение ^ X ^ S в этом буфере сохранит foo.txt в каталоге, откуда я начал 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 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

Ответ 7

Просто созданный emacs с менеджером пакетов homebrew в соответствии с этим руководством: http://www.emacswiki.org/emacs/EmacsForMacOS с brew установить - cocoa emacs После этого нужно запустить версию .app, чтобы получить gui, что в моем случае было/usr/local/Cellar/emacs/24.3/Emacs.app/Contents/MacOS/Emacs

Ответ 8

Другие ответы здесь не совсем сработали для меня. В частности, на моей машине bash script

#!/bin/sh
/Applications/Emacs.app/Contents/MacOS/Emacs "[email protected]" 

всегда открывает emacs в домашнем каталоге. Чтобы заставить его открываться в текущем рабочем каталоге, мне пришлось делать

#!/bin/sh
/Applications/Emacs.app/Contents/MacOS/Emacs "$PWD/[email protected]"

вместо.

Ответ 9

Скомпилируйте Emacs в соответствии со следующими шагами:

./configure --with-x --prefix=/usr
make
sudo make install

И ваше дело! Это может помочь загрузить и установить XQuartz, но это только мое мнение.

Ответ 10

Это мой script для открытого 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 "[email protected]"
# open emacs.app instead.
else
    `$EMACS "[email protected]"` &
fi