94

OSX のコマンドラインから GUI Emacs を起動するにはどうすればよいですか?

http://emacsformacosx.com/から Emacs をダウンロードしてインストールしました。

次の基準をすべて満たす回答を受け付けます。

  1. ターミナル ウィンドウの前にemacs ウィンドウが開きます。
  2. 「emacs」と入力すると、GUI Emacs ウィンドウが起動します。そのウィンドウでファイルを検索すると、デフォルトで Emacs を起動したディレクトリが検索されます。
  3. foo.txt が存在するときに「emacs foo.txt」と入力すると、foo.txt がロードされた GUI Emacs ウィンドウが起動します。
  4. foo.txt が存在しないときに「emacs foo.txt」と入力すると、GUI Emacs ウィンドウが起動し、「foo.txt」という名前の空のテキスト バッファが表示されます。そのバッファで ^X^S を実行すると、Emacs を起動したディレクトリに foo.txt が保存されます。
4

14 に答える 14

116

次のスクリプト「emacs」を呼び出して、PATHどこかに配置します。

#!/bin/sh
/Applications/Emacs.app/Contents/MacOS/Emacs "$@"

それは#2、#3、および#4をカバーしています。

#1 については、これを .emacs ファイルのどこかに入れます。

(x-focus-frame nil)

emacsformacosx.comサイトには、トップ スニペットの元となったHow-To ページがあります。emacsclientEmacsの実行と への接続に関する詳細情報がありgit mergetoolます。

于 2013-05-29T09:20:00.210 に答える
71

シェルで、OSX emacs アプリケーションを指すようにコマンド「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 セッションにロードするには!

于 2012-04-16T17:31:27.530 に答える
10

これは、バックグラウンドで Emacs を起動することにより、 David Caldwell の回答を改善します。

#!/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 "$@" &
于 2014-10-25T18:17:07.247 に答える
5

次のいずれかを想定しています。

  • ログイン時に emacs デーモンを開始する
  • .emacs に (server-start) を含める
  • 実行中の emacs の個別のコピーがたくさんあることを気にしないでください

もしそうなら、これは元の 4 つの基準に加えて、もう 1 つの基準を満たすと思います。

  1. ターミナル ウィンドウの前に emacs ウィンドウが開きます。

常に前景に開きます (x-focus-frame を使用)。

  1. 「emacs」と入力すると、GUI Emacs ウィンドウが起動します。そのウィンドウでファイルを検索すると、デフォルトで Emacs を起動したディレクトリが検索されます。

dired モードで既存の emacs ウィンドウを開きます。

  1. foo.txt が存在するときに「emacs foo.txt」と入力すると、foo.txt がロードされた GUI Emacs ウィンドウが起動します。

emacs がすでに実行されており、サーバーがある場合は、既存のウィンドウで開き、最前面に表示されます。

  1. foo.txt が存在しないときに「emacs foo.txt」と入力すると、「foo.txt」という名前の空のテキスト バッファを含む GUI Emacs ウィンドウが起動します。そのバッファで ^X^S を実行すると、Emacs を起動したディレクトリに foo.txt が保存されます。

正しい。

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
于 2016-07-08T22:50:15.650 に答える
4

David Jamesの応答をさらに改善すると、次のように機能します。

http://www.emacswiki.org/emacs/EmacsForMacOS#toc20にある端末からファイルを開く手順に従ってください

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

これを David Jame の応答と組み合わせて、次のemax bash スクリプトを作成し、パス~/binに配置しました

#!/bin/bash
(open -a /Applications/Emacs.app "$@") &

警告: emacs が現在のディレクトリをDired by nameモードで開くには、以下を使用する必要があります。

emax .

環境:

  • OS X Yosemite バージョン 10.10.2
  • 2014-11-13 の GNU Emacs 24.4.2 (x86_64-apple-darwin14.0.0、NS apple-appkit-1343.14)
于 2015-03-27T00:38:24.610 に答える
4

このガイドに従って、自作パッケージマネージャーで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

于 2014-02-17T13:58:50.313 に答える
1

ここでの他の答えは、私にとってはうまくいきませんでした。特に、私のマシンでは、bash スクリプト

#!/bin/sh
/Applications/Emacs.app/Contents/MacOS/Emacs "$@" 

常にホーム ディレクトリで emacs を開きます。現在の作業ディレクトリで開くには、次のことを行う必要がありました

#!/bin/sh
/Applications/Emacs.app/Contents/MacOS/Emacs "$PWD/$@"

代わりは。

于 2015-05-22T16:13:33.867 に答える
0

一番上の答えは良いのですが、シェルを引き続き使用できるように、emacs プロセスをバックグラウンドで実行したかったのです。この回答は私が望んでいるように見えましたが、正しいディレクトリでemacsを開始しませんでした。つまり、絶対パスが必要でした(またはpwd、すべての場合に機能しないパスに追加するためのハック)。さらに、単純に使用&すると、ターミナルを強制終了すると、emacs も強制終了されます。

私はscreenbash 関数を使用することにしました。次のソリューションは、macOS 10.15.6 と emacs 26.2 がインストールされている場合に機能しますbrew

function emacs() {
    screen -d -m /Applications/Emacs.app/Contents/MacOS/Emacs "$@"
}

コマンド ライン フラグの意味については、-d -m一緒に使用すると特別な意味を持つため、基本的に 1 つのコマンド ライン フラグと考えることができます。説明はマンページにあります:

画面を「分離」モードで起動します。これにより、新しいセッションが作成されますが、接続されません。これは、システムの起動スクリプトに役立ちます。

于 2020-09-11T23:55:37.217 に答える