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

pol*_*lot 42 emacs elisp

这让我发疯了:我只是想让Emacs最大化到启动时的屏幕分辨率.理想情况下,我喜欢适用于任何屏幕分辨率的跨平台(Windows和Linux)解决方案,但我甚至无法使用甚至硬编码大小的Window XP.

这是我尝试过的:

  1. 设置具有适当高度/宽度的初始帧alist
  2. 设置default-frame-alist
  3. (Windows特定的东西)向emacs窗口发送消息,告诉它最大化via (w32-send-sys-command 61488)
  4. 尝试了我在某处发现的这个功能:

    (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))))))
    
    Run Code Online (Sandbox Code Playgroud)
  5. 在我的init文件的开头和结尾尝试了上述方法,试图消除其他init事件的干扰.

不幸的是,以上都没有!对于上面的一些,我可以看到我的emacs窗口在一瞬间正确调整大小,然后恢复到较小的默认大小.如果我在初始化后运行上面的方法,emacs窗口会正确调整大小.世界上到底发生了什么?

[ps还有其他SO问题,但没有一个答案有效]


更新:

答案让我觉得我的init文件中的其他东西导致了问题.确实是这样!经过一些尝试和错误,我找到了罪魁祸首.如果我注释掉以下行,一切都很完美:

(tool-bar-mode -1)
Run Code Online (Sandbox Code Playgroud)

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

所以现在的问题是:如何禁用工具栏(毕竟,emacs的工具栏很丑陋,占用了宝贵的屏幕空间)并且在我的init文件中最大化了窗口?可能是工具栏干扰窗口大小的错误?

澄清:(工具栏模式-1)关闭工具栏,但此行干扰最大化Emacs窗口.因此,如果我尝试将函数放到最大化窗口并关闭工具栏,则最大化部分将失败; 如果工具栏部分已注释掉,则最大化部分将正常工作.它甚至不重要我使用什么解决方案(在我列出的4个中).


解决方案:(或者至少现在对我有用)

这可能是Emacs中的一个错误.解决方法是通过注册表禁用工具栏,而不是.emacs.将以下内容另存为.reg文件,并在Windows资源管理器中执行该文件:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\GNU\Emacs]
"Emacs.Toolbar"="-1"
Run Code Online (Sandbox Code Playgroud)

(此解决方案是OtherMichael建议的工作版本).

Mic*_*nis 25

我找到了一年左右的答案,这解释了你必须操纵注册表来做正确的事情:

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

(w32-send-sys-command 61488)
Run Code Online (Sandbox Code Playgroud)

如果您不想使用Emacs工具栏,可以在〜/ .emacs文件中添加行(工具栏模式-1) [注意:原始页面上的值为0],但Emacs不会完全最大化case - 工具栏占用的房地产丢失.您必须禁用注册表中的工具栏才能将其恢复:

[HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs\Emacs.Toolbar]
@="0"
Run Code Online (Sandbox Code Playgroud)

如果您在EmacsWiki下看W32SendSys命令代码,你会发现,61488最大限度地提高当前帧


小智 12

这是对我有用的最简单的修复:

(w32-send-sys-command #xf030)
(add-hook 'window-setup-hook (lambda () (tool-bar-mode -1)))
Run Code Online (Sandbox Code Playgroud)


yPh*_*hil 11

伙计,有什么不对

emacs -mm

这使Emacs完全最大化.把它放在你的快捷方式中,它实际上取决于你使用的窗口管理器; 我自己只是在我的.*shrc中将其别名.

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

if [ "$(pidof emacs)" ] ; then
    emacsclient "$@"
else
    emacs -mm "$@"
fi
Run Code Online (Sandbox Code Playgroud)

我输入了〜/ bin/e,我只用"e"启动Emacs.我右键单击文件管理器中的文本文件,选择"用另一个程序打开"并输入"e",现在我只需双击文件,它们都在同一个会话中整齐地打开.

一切都是桃子和lispy :)


小智 10

在X.org上,系统调用是(因为您最初询问的是跨平台解决方案):

(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)))


ens*_*ens 5

这可靠地适用于Emacs 24.5.1 (i686-pc-mingw32)

(add-to-list 'initial-frame-alist '(fullscreen . maximized))
Run Code Online (Sandbox Code Playgroud)