如何从OSX的命令行启动GUI Emacs?

如何从OSX的命令行启动GUI Emacs?

我从http://emacsformacosx.com/下载并安装了Emacs。

我会接受满足以下所有条件的答案:

  1. emacs窗口我的terminal窗口前面打开。
  2. 键入“emacs”将启动一个GUI Emacs窗口。 在该窗口中查找文件将默认从我开始使用Emacs的目录查找。
  3. 当foo.txt存在时键入“emacs foo.txt”将启动一个加载了foo.txt的GUI Emacs窗口。
  4. 当foo.txt不存在时键入“emacs foo.txt”将启动一个名为“foo.txt”的空文本缓冲区的GUI Emacs窗口。 在那个缓冲区中做^ X ^ S会将foo.txt保存在我从Emacs开始的目录中。

调用下面的脚本“emacs”,并将其放在PATH某处:

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

这包括#2,#3和#4。

对于#1,放在你的.emacs文件的某个地方:

 (x-focus-frame nil) 

emacsformacosx.com网站现在有一个如何做的页面 ,这是最重要的片段的来源。 还有更多关于运行emacsclient信息,并将Emacs连接到git mergetool

在shell中,别名命令'emacs'指向OSX emacs应用程序

在我的shell(运行默认的bash)中,我有以下(在我的.bashrc中)

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

然后,在命令行中inputemacs启动emacs应用程序。

但是,我会build议您打开一个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) 

然后你可以input

 ec .bashrc 

将.bashrc的副本加载到现有的emacs会话中!

这在David Caldwell的回答中通过在后台启动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 "$@" & 

在Mountain Lion上,我使用了山本光治的端口https://github.com/railwaycat/emacs-mac-port ,其别名如下:

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

它满足你所有的标准。

大卫·詹姆斯的回应进一步改善了以下作品:

按照说明从http://www.emacswiki.org/emacs/EmacsForMacOS#toc20上的terminal打开文件;

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

结合David Jame的回答,我创build了下面的emax bash脚本,并将其放在〜/ bin的path中

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

警告 :为了让emacs以名称模式打开Dired中的当前目录,您需要使用

 emax . 

环境:

  • OS X Yosemite版本10.10.2
  • GNU Emacs 24.4.2(x86_64-apple-darwin14.0.0,NS apple-appkit-1343.14)的2014-11-13

我假设你:

  • 在login时启动emacs守护进程
  • 在你的.emacs中有(服务器启动)
  • 不要介意有很多单独的emacs运行副本

如果是这样,那么我认为这符合原来的四个标准,再加上一个:

  1. emacs窗口在我的terminal窗口前面打开。

它总是会打开到前景(与X焦点框架)。

  1. 键入“emacs”将启动一个GUI Emacs窗口。 在该窗口中查找文件将默认从我开始使用Emacs的目录查找。

它将以直接模式打开一个现有的emacs窗口。

  1. 当foo.txt存在时键入“emacs foo.txt”将启动一个加载了foo.txt的GUI Emacs窗口。

如果emacs已经在运行并且有一个服务器,那么它将在现有的窗口中打开并且到达前台。

  1. 当foo.txt不存在时键入“emacs foo.txt”将启动一个名为“foo.txt”的空文本缓冲区的GUI Emacs窗口。 在那个缓冲区中做^ X ^ S会将foo.txt保存在我从Emacs开始的目录中。

正确。

一个额外的:

input命令后控制立即返回到terminal会话。

〜/斌/ 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 

按照这个指导,用ebcs包来pipe理自己的包: http ://www.emacswiki.org/emacs/EmacsForMacOS用brew安装–cocoa emacs之后,应该启动.app版本来获取gui,在我的情况下/usr/local/Cellar/emacs/24.3/Emacs.app/Contents/MacOS/Emacs

这里的其他答案不适合我。 特别是在我的机器上,bash脚本

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

总是在主目录中打开emacs。 为了让它在当前的工作目录中打开,我必须这样做

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

代替。

按照以下步骤编译Emacs:

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

而你的成就! 这可能有助于下载和安装XQuartz,但这只是我的意见。