OSX下如何让Emacs常驻及单独打开一个编辑窗口?

有时候直接修改FTP的远程文件,选择用emacs打开,貌似要打开2个窗口,一个是刚启动的样子,一个才是载入了文件后的编辑窗口。 2个问题: 1、每次新载入emacs比较慢,我上了spacemacs的,有没有办法加快载入速度呢? 2、能否像Atom等其他编辑器,编辑文件时候直接打开编辑窗口,而不是先启动一个再新开一个窗口做编辑?

多谢。

1 个赞

搜索 daemon 和 Emacsclient。可能要用到一点 Apple Script

然后对重度Emacs用户来说比较合理的做法是直接用Emacs内置的文件管理系统搜索并打开文件,在作业时完全脱离外在图形界面环境的文件管理系统。 也就是说,一直开着一个Emacs。

1 个赞

你的这两个问题基本上是关联的…

第一个的解决方法是保持后台一直开着 Emacs,这样下次再打开的时候可以在这个 Emacs 里直接打开或者开新的 frame,速度自然就变快了…

而如何保持… 第二个问题,官方的 NS port 现在是什么状况我不是很清楚,毕竟有段时间没用了。Mac port 在这种情况下不会打开新 frame,而是会直接在已有的 frame 内打开,至少我是比较接受这个特性的。

更 "Mac"一点的做法是在最后一个 frame 也被关闭的时候 App 并不直接退出,而是在后台继续运行(Cmd-q 的时候才会真正退出);下次被用来打开文件的时候再开新 frame。

这个我见过做的最好的实现是 Aquamacs,不过很难以 patch 的形式移植到主线和其他分支上;而 Aquamacs 因为设计思想的关系似乎喜欢的人不是很多。Mac port 的作者很明确的表示他完全没有思路要怎么实现这个… 官方的 NS port 配合 emacsclient 和 emacs --daemon 勉强能有类似的功能但是好像 bug 不少。

有人折腾过一个 Emacs Pseudo-Daemon,我也曾经把它移植到 Mac port 过,讲真,重度使用的时候并不是特别好用_(:_」∠)_

我目前的做法是稍微改变一下自己的使用习惯:

  1. 在图形界面下面运行的时候加一个退出时候的警报,免得自己手快把整个程序退出了
  2. 平时用完 Emacs 的时候随手 Cmd-h 隐藏窗口
  (if window-system
      (setq confirm-kill-emacs 'y-or-n-p)
    )
2 个赞

我可能明白楼主的意思,每次打开新的文件保证在同一个窗口(Frame)下,而不是新开一个窗口。下面是我的解决方法。

首先要启动server

(use-package server
  :ensure nil
  :defer t
  :config
  (autoload 'server-running-p "server")
  (unless (server-running-p) (server-start)))

这样就算是从Emacs.app启动,也会自动开一个服务了

然后保证每次通过emacsclient 去连接 (注意不要加 -c)

用automator 新建一个App,/bin/bash pass input as arguments

for f in "$@"
do
	/usr/local/bin/emacsclient -n "$f"
done

不加-c,就能连接到已经存在的那个Frame,不新开了

修改文件的默认启动App,比如说.el 文件默认双击是Emacs.app打开的,现在全部修改为第二部新建的这个App名字。


这样就行了,还有一点点缺陷,比如当Emacs.app没有启动的时候文件双击不能打开什么的,但是基本的使用没啥问题了。

2 个赞

本来想提的解决方案里面是这样的:

tell application "Terminal"  
try  
set frameVisible to do shell script "/Applications/Emacs.app/Contents/MacOS/bin/emacsclient -e '(<= 2 (length (visible-frame-list)))'"  
if frameVisible is not "t" then  
do shell script "/Applications/Emacs.app/Contents/MacOS/bin/emacsclient -c -n"  
end if  
on error  
do shell script "/Applications/Emacs.app/Contents/MacOS/Emacs --daemon"  
do shell script "/Applications/Emacs.app/Contents/MacOS/bin/emacsclient -c -n"  
end try  
end tell  
tell application "Emacs" to activate  

很明显就不会有这个问题了

当然不怕开机速度变慢可以直接用lauchd开机启动Emacs。

2 个赞

明白了,感谢各位。