如何在启动时在Windows上最大化Emacs?

这让我疯狂:我只是希望Emacs最大限度地发挥我在启动时的任何屏幕分辨率。 理想情况下,我喜欢跨平台(Windows和Linux)解决scheme,可以在任何屏幕分辨率下工作,但我甚至无法使用Windows XP甚至是硬编码的大小。

这是我试过的:

  1. 用适当的高度/宽度设置初始帧
  2. 设置默认帧一列表
  3. (Windows特定的东西)发送消息到emacs窗口告诉它最大化通过(w32-send-sys-command 61488)
  4. 试过这个我在某处find的function:

     (defun toggle-fullscreen () "toggles whether the currently selected frame consumes the entire display or is decorated with a window border" (interactive) (let ((f (selected-frame))) (modify-frame-parameters f `((fullscreen . ,(if (eq nil (frame-parameter f 'fullscreen)) 'fullboth nil)))))) 
  5. 尝试在我的init文件的开始和结束上述方法,以尝试消除其他初始化事件的干扰。

不幸的是,以上都没有工作! 对于上面的一些,我可以看到我的emacs窗口正确resize,然后再恢复到较小的默认大小。 如果在初始化后运行上面的方法,emacs窗口会正确resize。 这个世界正在发生什么?

[PS还有其他SO问题,但没有答案工作]


更新:

答案让我觉得我的init文件中的其他东西是造成这个问题。 而且的确如此! 经过一番尝试,我find了罪魁祸首。 如果我注意到下面的一行,一切都很完美:

 (tool-bar-mode -1) 

工具栏与世界上最大化窗口有什么关系?

所以现在的问题是:我怎么能禁用工具栏(毕竟,emacs的工具栏是丑陋的,占用宝贵的屏幕房地产),并最大限度地提高我的init文件中的窗口? 这可能是一个工具栏干扰窗口大小的错误?

澄清:(工具栏模式-1)closures工具栏,但是这条线会干扰最大化Emacs窗口。 所以如果我尝试把function最大化窗口和closures工具栏,最大化的部分将失败; 如果工具栏部分被注释掉了,那么最大化部分就可以正常工作。 甚至不用我使用什么解决scheme(在我列出的4个之中)。


解决scheme:(或者至less现在对我有用)

这可能是Emacs中的一个错误。 解决方法是通过registry禁用工具栏,而不是在.emacs中。 将以下内容保存为.reg文件,然后在Windows资源pipe理器中执行该文件:

 Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\GNU\Emacs] "Emacs.Toolbar"="-1" 

(这个解决scheme是OtherMichaelbuild议的一个工作版本)。

我在一年之后发现了一个答案 ,说明你必须操纵registry来做正确的事情:

要启动Emacs最大化,把这行放在〜/ .emacs文件的末尾:

 (w32-send-sys-command 61488) 

如果你不想使用Emacs工具栏,你可以在你的〜/ .emacs文件中添加一行(tool-bar-mode -1) [注意:原始页面的值为0],但是Emacs在这里不会完全最大化情况 – 工具栏占用的房地产已经丢失。 您必须禁用registry中的工具栏才能恢复:

 [HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs\Emacs.Toolbar] @="0" 

如果你看看W32SendSys命令代码中的EmacsWiki,你会发现61488最大化当前帧

这是为我工作的最简单的修复方法:

 (w32-send-sys-command #xf030) (add-hook 'window-setup-hook (lambda () (tool-bar-mode -1))) 

伙计,怎么了

emacs -mm

这启动Emacs完全最大化。 把它放在你的捷径中,这取决于你使用的窗口pipe理器; 我自己只是在我的。* shrc中别名。

在一个不同的但不是不相关的说明中,我实际上启动了Emacs,如果它已经启动,所选的文件在我现有的Emacs会话中作为一个新的缓冲区打开:

 if [ "$(pidof emacs)" ] ; then emacsclient "$@" else emacs -mm "$@" fi 

我把它放在〜/ bin / e中,然后用“e”来启动Emacs。 我右键单击文件pipe理器中的文本文件,select“打开另一个程序”并input“e”,现在我只需双击文件,它们都在同一个会话中整齐地打开。

而且一切都很好,而且很好听:)

在X.org上,系统调用是(因为你最初问的是一个跨平台的解决scheme):

 (defun x11-maximize-frame()
   “最大化当前帧(全屏)”
   (互动)
   (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)))

首先,感谢关于(tool-bar-mode -1)bug的提示; 救了我很多麻烦! 我宁愿保留在.emacs文件中的所有内容(对于我来说,没有registrymods),所以如果你在最大化之前打开工具栏,然后再closures它,你可以很好地最大化:

 (defun maximize-current-frame () "Resizes the current frame to fill the screen" (interactive) ;; There is a bug in tool-bar-mode that prevents it from being ;; maximized, so turn it on before maximizing. ;; See http://stackoverflow.com/questions/815239/how-to-maximize-emacs-on-windows-at-startup) (tool-bar-mode 1) (w32-send-sys-command 61488) (tool-bar-mode -1) ) 

解决这个问题的另一种方法是延迟之间

 (menu-bar-mode -1) (tool-bar-mode -1) (tooltip-mode -1) (scroll-bar-mode 1) 

和set-frame- *函数。 例如:

  (tool-bar-mode -1) (when window-system (run-at-time (format "%d sec" 1) nil '(lambda () (set-frame-position (selected-frame) 1 1))) (run-at-time (format "%d sec" 2) nil '(lambda () (set-frame-width (selected-frame) 150 t))) (run-at-time (format "%d sec" 3) nil '(lambda () (set-frame-height (selected-frame) 60 t))) ) 

延迟set-frame- *函数也是必不可less的!

这在Emacs 24.5.1 (i686-pc-mingw32)上可靠工作:

 (add-to-list 'initial-frame-alist '(fullscreen . maximized)) 

嘿 – 很好的function! 感谢张贴

我认为它可能不适合你,因为你的代码看起来像你的init文件中的其他地方。 在创build框架之后,将应用默认的框架列表。 我删除了大小和位置的元素,你的function在emacs启动时效果很好。

  (setq default-frame-alist (list (cons 'left 350) (cons 'top 0) (cons 'width 80) (cons 'height 45) ...... 

如果您真的想在没有窗口镶边(标题栏和最大/最小/closuresbutton)的情况下运行Emacs全屏,请尝试下面的模式。 这对于XP SP3上的Emacs 23.3.1适用于我。

http://www.martyn.se/code/emacs/darkroom-mode/

每一个。 emacs 23.3.1,吹码是无效的。 因为(菜单栏模式-1)可能导致窗口不全屏。

 (w32-send-sys-command #xf030) (add-hook 'window-setup-hook (lambda () (tool-bar-mode -1))) 

我searchEamcs wiki,find一个可用的方法。

http://www.emacswiki.org/emacs/FullScreen#toc3

MS Windows

如果您使用的是MS Windows,并且想要使用“真正的全屏”,也就是摆脱顶部的标题栏和全部,请参阅w32-fullscreen在网站上的暗室模式

或者,这里有一个补丁可以让全屏的帧参数真正在Windows上全屏显示。

要获得一个最大化的窗口,你可以使用:(w32-send-sys-command#xf030)

注意! 如果你想emacs开始最大化,你必须把这个代码放到你的.emacs文件中:

 (defun jbr-init () "Called from term-setup-hook after the default terminal setup is done or directly from startup if term-setup-hook not used. The value 0xF030 is the command for maximizing a window." (interactive) (w32-send-sys-command #xf030) (ecb-redraw-layout) (calendar) ) (setq term-setup-hook 'jbr-init) (setq window-setup-hook 'jbr-init) 

我遇到了一个似乎可以工作的命令(toggle-frame-maximized) ,它可以在Linux和Windows上运行。

在创build完所有东西之后,我只是把它放在init文件的末尾,假设在安装结束时,所有东西都不会被最大化,瞧,它是有效的。

 (defun resize-frame () "Set size" (interactive) (set-frame-width (selected-frame) 110) (set-frame-height (selected-frame) 33) (set-frame-position (selected-frame) 0 1)) 

以下是在我的.emacs文件中调用的最后一个函数,它设置了它在debian和mac os x上的emacs 22和emacs 23上工作的屏幕的高度和宽度。 根据你的屏幕设置高度和宽度的数字。

要禁用工具栏,请添加该行

 (tool-bar-mode nil) 

到您的自定义文件(通常是根目录中的.emacs)。

emacs-full-screen-win32项目将帮助你:)

从emacswiki下面的片段从我工作得很好:(添加到您的启动configuration文件)

 (defun jbr-init () "Called from term-setup-hook after the default terminal setup is done or directly from startup if term-setup-hook not used. The value 0xF030 is the command for maximizing a window." (interactive) (w32-send-sys-command #xf030) (ecb-redraw-layout) (calendar) ) (setq term-setup-hook 'jbr-init) (setq window-setup-hook 'jbr-init)