弄了个完美的版本:
(setq ns-use-native-fullscreen nil)
(setq ns-use-fullscreen-animation nil)
(run-at-time "5sec" nil
(lambda ()
(let ((fullscreen (frame-parameter (selected-frame) 'fullscreen)))
;; If emacs has in fullscreen status, maximized window first, drag from Mac's single space.
(when (memq fullscreen '(fullscreen fullboth))
(set-frame-parameter (selected-frame) 'fullscreen 'maximized))
;; Manipulating a frame without waiting for the fullscreen
;; animation to complete can cause a crash, or other unexpected
;; behavior, on macOS (bug#28496).
(when (featurep 'cocoa) (sleep-for 0.5))
;; Call `toggle-frame-fullscreen' to fullscreen emacs.
(toggle-frame-fullscreen))))
- 先设置不准用Mac原生全屏窗口
- 5秒以后, 先检测是不是已经被 Mac 窗口管理器自助主张全屏了,如果已经全屏了,先最大化把Emacs从独立工作区拉回来, 如果Mac没有自作主张就不管窗口状态
- 窗口正常状态后, 调用 toggle-frame-fullscreen 进入全屏状态, 这样以后再调用命令 toggle-frame-fullscreen 也不会出错了.