OSXのコマンドラインからGUI Emacsを起動するにはどうすればよいですか?
http://emacsformacosx.com/ からEmacsをダウンロードしてインストールしました。
次の基準をすべて満たす回答を受け入れます。
次のスクリプト「emacs」を呼び出して、PATH
のどこかに配置します。
#!/bin/sh
/Applications/Emacs.app/Contents/MacOS/Emacs "$@"
#2、#3、#4をカバーしています。
#1の場合、これを.emacsファイルのどこかに置きます。
(x-focus-frame nil)
emacsformacosx.com サイトに How-Toページ が追加されました。これは、トップスニペットの由来です。 emacsclient
の実行とgit mergetool
へのEmacsの接続に関する詳細情報があります。
シェルで、コマンド「emacs」にエイリアスを設定して、OSX emacsアプリケーションを指すようにします
私のシェル(デフォルトのbashを実行)には、次のものがあります(私の.bashrcに)
alias emacs='open -a /Applications/Emacs.app $1'
次に、コマンドラインでemacsと入力すると、emacsアプリケーションが起動します。
ただし、emacsのコピーを開いて、そのまま実行することをお勧めします。その場合、ファイルを既存のemacsのコピーにロードする場合は、.bashrcに以下を配置してemacsclientを使用できます。
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セッションにロードするには!
これは David Caldwellの答え をEmacsをバックグラウンドで起動することで改善します:
#!/bin/sh
$(/Applications/Emacs.app/Contents/MacOS/Emacs "$@") &
他の回答で述べたように、これは#2、#3、#4を対象としています。 #1の場合、これを.emacsファイルのどこかに配置します:(x-focus-frame nil)
。
以下はnot動作しないことに注意してください-コマンドラインで指定されたディレクトリでEmacsを起動しません(例:emacs .
)
# NOT RECOMMENDED
#!/bin/sh
/Applications/Emacs.app/Contents/MacOS/Emacs "$@" &
私はあなたのどちらかを仮定しています:
もしそうなら、これは元の4つの基準に加えてもう1つを満たすと思います:
- Emacsウィンドウが端末ウィンドウの前に開きます。
常に前面に開きます(x-focus-frameを使用)。
- 「emacs」と入力すると、GUI Emacsウィンドウが起動します。そのウィンドウでファイルを検索すると、デフォルトでEmacsを起動したディレクトリが検索されます。
既存のemacsウィンドウをdiredモードで開きます。
- Foo.txtが存在するときに「emacs foo.txt」と入力すると、foo.txtがロードされたGUI Emacsウィンドウが起動します。
Emacsがすでに実行されており、サーバーがある場合、既存のウィンドウで開き、フォアグラウンドになります。
- Foo.txtが存在しないときに「emacs foo.txt」と入力すると、「foo.txt」という名前の空のテキストバッファーを持つGUI Emacsウィンドウが起動します。そのバッファーで^ X ^ Sを実行すると、foo.txtがEmacsを起動したディレクトリに保存されます。
正しい。
もう1つ:
コマンドを入力すると、すぐに制御がターミナルセッションに戻ります。
〜/ 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 を次のエイリアスで使用しています。
alias emacs=/Applications/Emacs.app/Contents/MacOS/Emacs
そして、それはあなたのすべての基準を満たします。
このガイドに従って、homebrewパッケージマネージャーでemacsを作成しました。 http://www.emacswiki.org/emacs/EmacsForMacOS with brew install --cocoa emacsその後、.appバージョンを起動してgui、私の場合は/usr/local/Cellar/emacs/24.3/Emacs.app/Contents/MacOS/Emacs
David Jamesの応答をさらに改善すると、次のように動作します。
http://www.emacswiki.org/emacs/EmacsForMacOS#toc2 にある端末からファイルを開くための指示に従って
open -a /Applications/Emacs.app <file-name>
これをDavid Jameの応答と組み合わせて、次のemaxbashスクリプトを作成し、〜/ binのパスに配置しました
#!/bin/bash
(open -a /Applications/Emacs.app "$@") &
Caveat:emacsにDired by nameモードで現在のディレクトリを開かせるには、使用する
emax .
環境:
ここでの他の答えは私にとってはうまくいきませんでした。特に、私のマシンでは、bashスクリプト
#!/bin/sh
/Applications/Emacs.app/Contents/MacOS/Emacs "$@"
常にホームディレクトリでemacsを開きます。現在の作業ディレクトリで開くために、私はしなければなりませんでした
#!/bin/sh
/Applications/Emacs.app/Contents/MacOS/Emacs "$PWD/$@"
代わりに。
この問題に対する非常に複雑な解決策の多くがここに投稿されています。自明ではないように見えるので、それは公平です。
しかし、この解決策は私にとって非常にうまく機能します。
ec() {
emacsclient -n $@ 2> /dev/null
if [[ $? == 1 ]]; then
open -a Emacs.app -- $@
fi
}
ec file [...]
ec
引数をemacsclientに渡し、続行する前にemacsを待機(-n
)しないでください。2> /dev/null
)1
([[ $? == 1 ]]
)次の手順に従ってEmacsをコンパイルします。
./configure --with-x --prefix=/usr
make
Sudo make install
これで完了です! XQuartzをダウンロードしてインストールすると役立つかもしれませんが、それは私の意見です。
これは、osx上のemacs/emacsclientを開くための私のスクリプトです。
#!/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