(setq lexical-binding t) (setq ns-use-native-fullscreen nil) (defun ns-toggle-frame-fullscreen () "Perform non-native fullscreen neatly on macOS." (interactive) (if (frame-parameter nil 'ns-use-native-fullscreen) (toggle-frame-fullscreen) (let ((fullscreen (frame-parameter nil 'windowed-params))) (cond (fullscreen (let ((auto-hide-menu-bar (cdr (assq 'ns-auto-hide-menu-bar (frame-parameter nil 'windowed-params)))) (windowed-params (cdr (frame-parameter nil 'windowed-params)))) (set-frame-parameter nil 'windowed-params nil) (modify-frame-parameters nil windowed-params) (setq ns-auto-hide-menu-bar auto-hide-menu-bar))) (t (let ((old-params (list (cons 'ns-auto-hide-menu-bar ns-auto-hide-menu-bar) (assq 'undecorated (frame-parameters)) ;(assq 'fullscreen (frame-parameters)) (assq 'width (frame-parameters)) (assq 'height (frame-parameters)) (assq 'top (frame-parameters)) (assq 'left (frame-parameters))))) (setq ns-auto-hide-menu-bar t) (modify-frame-parameters nil `((undecorated . t) (top . 0) (left . 0) (windowed-params . ,old-params))) (set-frame-size nil (display-pixel-width) (display-pixel-height) t)))))))