Macos 如何以Emacs作为默认值切换全屏?

Macos 如何以Emacs作为默认值切换全屏?,macos,emacs,Macos,Emacs,我使用的是来自的mac emacs,启动emacs时需要单击最大化图标 如何将最大化的emacs窗口设置为默认值?Ryan McGeary的maxframe.el在Aquamacs和emacs.app上都很适合我。我是通过EmacsWiki找到的:。该页面介绍了一个补丁版本,现在是404页面,但最初的版本似乎运行良好。像这样启动emacs emacs -mm 这是我编写和使用的函数。当您连续按F11时,emacs将在4种模式下切换: (defun switch-fullscreen nil

我使用的是来自的mac emacs,启动emacs时需要单击最大化图标


如何将最大化的emacs窗口设置为默认值?

Ryan McGeary的
maxframe.el
在Aquamacs和emacs.app上都很适合我。我是通过EmacsWiki找到的:。该页面介绍了一个补丁版本,现在是404页面,但最初的版本似乎运行良好。

像这样启动emacs

emacs -mm

这是我编写和使用的函数。当您连续按F11时,emacs将在4种模式下切换:

(defun switch-fullscreen nil
  (interactive)
  (let* ((modes '(nil fullboth fullwidth fullheight))
         (cm (cdr (assoc 'fullscreen (frame-parameters) ) ) )
         (next (cadr (member cm modes) ) ) )
    (modify-frame-parameters
     (selected-frame)
     (list (cons 'fullscreen next)))))

(define-key global-map [f11] 'switch-fullscreen)
在中给出的答案对我有用(使用GNU Emacs v24.2.1)。要重新启动,请在
.emacs
文件中定义以下函数:

(defun x11-maximize-frame ()
  "Maximize the current frame (to full screen)"
  (interactive)
  (x-send-client-message nil 0 nil "_NET_WM_STATE" 32 '(2 "_NET_WM_STATE_MAXIMIZED_HORZ" 0))
  (x-send-client-message nil 0 nil "_NET_WM_STATE" 32 '(2 "_NET_WM_STATE_MAXIMIZED_VERT" 0)))
为方便起见,可以将命令绑定到键。我使用
C-z
键,否则会最小化帧,我不需要它,但当我意外击中它时,总是觉得很烦人:

(global-set-key (kbd "C-z") 'x11-maximize-frame)

正如我在回答中添加的注释中所指出的,使用此命令在正常帧状态和最大化状态之间反复循环,但有一点麻烦:在这两种状态之间,有一种奇怪的状态,帧几乎是垂直最大化的,但不是垂直最大化的。但这是一个小问题。

简单的答案是将以下内容添加到您的
自定义设置变量中:-

(custom-set-variables
 ;; custom-set-variables was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 ...
 '(initial-frame-alist (quote ((fullscreen . maximized))))
 ...
 )
下面给出了我想要的解决同一问题的方法。TL;博士

我面临同样的问题,但在所有应用程序中,而不仅仅是在Emacs中。为此,我将Mac上的快捷键cmd-m全局绑定到缩放菜单选项,该选项通常是绿色最大化按钮的菜单选项。但是,Emacs不提供缩放菜单选项,该选项通常位于窗口菜单项下。因此,我最终得出以下结论

我昨晚刚把下面的内容编好

;; This defines cmd-m to do the same as clicking the green titlebar button
;; usually meant for the "Window -> Zoom" menu option in Mac apps
(defun zoom () "zoom, same as clicking the green titlebar button in Mac app windows"
  (interactive)
  (set-frame-parameter
   nil 'fullscreen
   (pcase (frame-parameter nil 'fullscreen)
     (`nil 'fullheight)
     (`fullheight 'maximized)
     (`fullboth (ding) 'fullboth)
     (`fullscreen (ding) 'fullscreen)
     (_ nil))))
(global-set-key (kbd "s-m") 'zoom)
代码最后一行中的这个键盘快捷键与我最初描述的全局到Mac cmd+m键绑定非常匹配。你可以根据自己的喜好定制。我习惯按cmd-m启动大多数应用程序,直到它适合屏幕,Emacs就是其中之一。因此,我不必为
初始帧列表设置而烦恼

今晚,我通过添加以下代码来完成我想要的功能集

;; This defines ctrl-cmd-f to do the same as clicking the toggle-fullscreen titlebar
;; icon usually meant for the "View -> Enter/Exit Full Screen" menu option in
;; Mac apps
(defun toggle-fullscreen() "toggle-fullscreen, same as clicking the
 corresponding titlebar icon in the right hand corner of Mac app windows"
  (interactive)
  (set-frame-parameter
   nil 'fullscreen
   (pcase (frame-parameter nil 'fullscreen)
     (`fullboth nil)
     (`fullscreen nil)
     (_ 'fullscreen))))
(global-set-key (kbd "C-s-f") 'toggle-fullscreen)
; For some weird reason C-s-f only means right cmd key!
(global-set-key (kbd "<C-s-268632070>") 'toggle-fullscreen)
;;这将定义ctrl-cmd-f,以执行与单击切换全屏标题栏相同的操作
;; 图标通常用于中的“查看->进入/退出全屏”菜单选项
;; Mac应用程序
(defun toggle-fullscreen()”切换全屏,与单击
Mac应用程序窗口右角对应的标题栏图标“
(互动)
(设置帧参数)
零全屏
(pcase(帧参数nil'全屏)
(`FULLAND nil)
(`全屏无)
(全屏)
(全局设置键(kbd“C-s-f”)'全屏切换)
; 出于某种奇怪的原因,C-s-f只表示右cmd键!
(全局设置键(kbd“”)全屏切换)
几点注意:-

  • 如果您只是从这段代码中学习使用
    pcase
    ,请小心不要犯与我相同的错误,将后引号误读为文档中的引号
  • fullscreen
    fullboth
    的别名,并不像后者那样用词不当,因为后者是指它的意思,因此我不仅将这种情况作为
    (帧参数nil'fullscreen)
    的值来处理,而且每当我想
    将帧参数设置为
    fullboth

  • HTH

    您是否尝试过查看Emacs Wiki,例如和?它们可能已经过时,也可能没有过时,我没有Mac电脑,所以无法测试;今天,我从中构建了一个新的Emacs,并发现了更好的结果,包括适当的OSX全屏支持。希望这有帮助@Eric Fail——添加OSX标签的问题在于,这些人对Emacs一无所知,并且倾向于否决投票并投票关闭,因为他们是错误的目标受众。@lawlist,我不确定我是否完全理解这个问题。你能再详细介绍一下吗?@Eric Fail——我刚刚经历了一段不愉快的经历,在这里论坛的参与者们快速地向下投票,然后投票结束。许多人要么订阅感兴趣的特定标签,要么将喜爱的标签加入书签并监视新活动。我个人的看法是,如果许多监控OSX标签的人不太关心如何最大化Emacs框架的话。大多数享有很高声誉的论坛参与者只需删除标签,什么也不说,因此,如果他们对此有强烈的感觉,我将把它留给他们。这对我来说没什么大不了的,我只是想让你知道。你真的能像对待非emacs windows一样获得最大化的覆盖率吗。我只能将窗口扩展到默认单空格字体的全字符宽度和高度的倍数。在我的(Ubuntu/GNU Emacs 23.1.1)系统上,这会在RHS和底部留下大约半个字符宽的边框。。我可以完全扩展窗口的唯一方法是通过窗口管理器的系统菜单的最大化选项(在左上角)PS:我找到了另一个SO答案,它有一个适用于我的Linux X-Windows系统的方法:。。。。取消那个!!,它不起作用。。它使垂直方向最大化太多。。。但是,这两种方法一起起作用(奇怪……也许有一天我会弄明白为什么?……但现在它起作用了(在它困扰我一个月之后)……谢谢maxframe的建议Jon O。你也可以通过emacs包管理器和Melpa获得maxframe。@Arkell抱歉,但你不能在emacs 24(emacs Formacos)上这样做。maxframe和Melpa(不管是什么)不显示在emacs包中manager@Peter.O您好,我有一个类似的问题:您能在那里共享您的工作代码吗?这对我来说很好,只是有一个麻烦。当我达到
    fullboth
    模式时,框架会覆盖屏幕上的所有内容;也就是说,WM窗口标题栏消失,我的XFCE面板也消失人工鱼