Emacs 在 Mac 下实现“后台”运行

在 Mac 上的 app 大多有一个特性:当你关闭窗口时不完全退出,而是后台运行;当你按下Cmd-Q之后应用才会彻底退出。然后 Emacs 并没有这个特性…… 我在偶然之中发现了一个可以实现类似特性的方案,目前未发现与普通 macOS 应用有区别

方案

首先,我要声明我用的是 spacemacs (master) | emacs-mac-port 25.2.1 | macOS Sierra 10.12.5

  • 在 .spacemacs 中开启 server 设置 dotspacemacs-persistent-server t
  • 在 user-config 中加入这一条语句 (global-set-key (kbd "s-q") 'spacemacs/prompt-kill-emacs)
  • 现在你就可以用 Cmd-q彻底退出 Emacs;用 C-x C-c 关闭窗口。当然你还可以添加 Cmd-w 关闭窗口之类的快捷键

一些其他的东西。。。

  • 当然,如果不是 Spacemacs 应该也可以?欢迎尝试并回复效果
  • 如果不用 mac-port 那样体验会打折:无法点击 dock 的 icon 打开窗口/关闭窗口后双击文件不能直接在 emacs 中打开/(或者可能有更多)

欢迎来报错……

  • 我知道 Emacs 一般常驻后台……我只是提供一个选项……
1 个赞

跟系统的 Command+H 的效果相比如何?

Command-H 隐藏最前面的应用的窗口

https://support.apple.com/zh-cn/HT201236

1 个赞

看起来是用这个命令做到的,我试了下更 Command+H 还是有区别的,两者执行之后处在最前面的应用不同。

不用 Cmd-H 的原因是如果 Emacs 的快捷键和其他 app 不一样会让人感到有些分裂 我用这个纯粹是习惯 我习惯于在后台运行 server,这样应用在后台就不会退出(也就是 C-x C-c 无法退出)于是我就想到这正好就是 Mac 的逻辑

然而 C-x C-c 不退出不符合 Emacs 逻辑。这点让我有点不舒服。

然后 Emacs 的 Window Frame 机制让 Conmand w 该干什么很纠结。

把它映射成 Cmd-H (笑) kill-buffer 也可以

Cmd H 是直接被系统截取的(不信可以 C-h 查看),不好直接设置。

我的设置是 Cmd Q 退出,K kill current buffer,W delete window, Cmd Shift W delete frame。Cmd T create new frame,N split window

加个 osx 的 layer 不有这样的功能了么:joy:

并不可以😂。