如何从OSX的命令行启动GUI Emacs?
如何从OSX的命令行启动GUI Emacs?
我从http://emacsformacosx.com/下载并安装了Emacs。
我会接受满足以下所有条件的答案:
- emacs窗口在我的terminal窗口前面打开。
- 键入“emacs”将启动一个GUI Emacs窗口。 在该窗口中查找文件将默认从我开始使用Emacs的目录查找。
- 当foo.txt存在时键入“emacs foo.txt”将启动一个加载了foo.txt的GUI Emacs窗口。
- 当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运行副本
如果是这样,那么我认为这符合原来的四个标准,再加上一个:
- emacs窗口在我的terminal窗口前面打开。
它总是会打开到前景(与X焦点框架)。
- 键入“emacs”将启动一个GUI Emacs窗口。 在该窗口中查找文件将默认从我开始使用Emacs的目录查找。
它将以直接模式打开一个现有的emacs窗口。
- 当foo.txt存在时键入“emacs foo.txt”将启动一个加载了foo.txt的GUI Emacs窗口。
如果emacs已经在运行并且有一个服务器,那么它将在现有的窗口中打开并且到达前台。
- 当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,但这只是我的意见。