我可以用Emacs打开一个文件,没问题。但是我已经习惯了Linux上的Emacs,在这里键入emacs test.cpp &
会打开一个新的Emacs框架,而使终端免费。但是,在OS X上,当我尝试使用打开一个新框架时emacs test.cpp &
,终端显示已创建一个进程,但窗口无法弹出。如果按Ctrl+ C,终端将显示“已停止”,但是我看到该进程仍在运行,因为可以在任务监视器中看到它。
如何解决这个问题呢?谢谢!
这里的问题是,emacs
Linux上的命令通常只是Emacs二进制文件本身,除非您-nw
在命令行上指定,否则它会打开一个新框架(对于X11或其他GUI窗口,它是Emacs所说的)。相比之下,emacs
Homebrew提供的命令是一个调用的shell脚本/usr/local/Cellar/emacs/24.3/Emacs.app/Contents/MacOS/Emacs -nw "$@"
(用安装的版本代替24.3
)。因此,Homebrew版本作为终端应用程序启动。
您可以制作一个仅运行的Shell脚本,/usr/local/Cellar/emacs/24.3/Emacs.app/Contents/MacOS/Emacs "$@"
它的行为将与您预期的一样,除了您将启动Mac应用程序的全新实例之外,这将导致Dock上显示一个额外的Emacs图标。这样的事情不被认为是“类似Mac的”,但这不是世界末日。
在不同的操作系统上广泛使用的另一种解决方案是,使一个Emacs进程成为服务器,然后用于emacsclient
从命令行打开文件。Emacsclient可以在当前终端,新框架(GUI窗口)或Emacs的现有实例中打开文件。对于要作为服务器运行的Emacs实例,只需要您M-x server-start
在其中运行或放入(server-start)
您的init文件(〜/ .emacs或〜/ .emacs.d / init.el)中即可。
我的Emacs配置包含以下代码段,当我启动GUI应用程序时,它将自动启动服务器模式:
(when (display-graphic-p)
(server-start))
然后,一旦Emacs运行(您可以在登录后在“系统偏好设置”>“用户和组”>“登录项”中使其自动启动),键入emacsclient -nw test.cpp
以在终端中打开文件,或emacsclient test.cpp &
在现有框架中打开文件,或emacsclient -c test.cpp &
打开新框架。 。(请注意,如果您在现有框架中打开它,则使用C-x #
来关闭缓冲区而不关闭框架,这与相对C-x C-c
。)
请注意,emacsclient
我刚才给出的终端命令没有使用,&
而GUI命令却使用了。&
在命令行的末尾将流程置于后台,这意味着它不会垄断您的终端。出于任何原因(可能是因为在后台运行全屏终端应用程序都不明智),当您使用调用Emacs的终端版本时&
,它只是挂起了自身。如果C-z
在Emacs中按一下,也会发生同样的事情。要将其放回前台,请键入fg
(实际上您可以有多个后台进程,在这种情况下fg
,除非您指定了工作说明符,否则只需选择最新的进程即可;请参见bash的手册页(man bash
)并搜索JOB CONTROL
如果您对详细信息感兴趣)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句