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

时间:2009-05-02 17:20:31

标签: emacs elisp

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

以下是我的尝试:

  1. 使用适当的高度/宽度设置initial-frame-alist
  2. 设置default-frame-alist
  3. (Windows特定内容)向emacs窗口发送消息,告知其通过(w32-send-sys-command 61488)
  4. 最大化
  5. 尝试过我在某处找到的这个功能:

    (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))))))
    
  6. 在我的init文件的开头和结尾尝试了上述方法,试图消除其他init事件的干扰。
  7. 不幸的是,以上都没有效果!!对于上面的一些,我可以看到我的emacs窗口在一瞬间正确调整大小,然后恢复到较小的默认大小。如果我在初始化后运行上面的方法,emacs窗口会正确调整大小。世界上到底发生了什么?

    [P.S。还有其他SO问题但没有答案可行]


    更新

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

    (tool-bar-mode -1)
    

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

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

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


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

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

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

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

15 个答案:

答案 0 :(得分:25)

我发现an answer a year-or-so back解释了你必须操纵注册表来做正确的事情:

  

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

(w32-send-sys-command 61488)
  

如果您不想使用Emacs工具栏   你可以添加(工具栏模式-1) [注意:原始页面上的值为0]   你的〜/ .emacs文件,但Emacs不会   在这种情况下完全最大化 - 真实   工具栏占用的地产是   丢失。您必须禁用工具栏   在注册表中取回它:

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

如果您查看W32SendSys command-codes下的EmacsWiki,您会发现61488 最大化当前框架

答案 1 :(得分:12)

这是对我有用的最简单的解决方法:

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

答案 2 :(得分:11)

伙计,

有什么问题

emacs -mm

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

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

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

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

一切都是桃子和lispy:)

答案 3 :(得分: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)))

答案 4 :(得分:3)

首先,感谢关于bug的提示(工具栏模式-1);救了我很多麻烦!我宁愿将所有内容保存在.emacs文件中(对我来说没有注册表模式),所以如果在最大化之前打开工具栏,然后再将其关闭,那么你可以很好地最大化:

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

答案 5 :(得分:3)

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

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

答案 6 :(得分:2)

解决此类问题的另一种方法是将延迟放在

之间
(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- *函数之间放置延迟也很重要!

答案 7 :(得分:1)

嘿 - 好功能!感谢您发布

我认为它可能不适合你,因为你的代码看起来像是 跟随init文件中的其他位置。正在应用default-frame-alist 框架创建后。我删除了大小和位置元素,你的功能 在启动emacs时效果很好。

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

答案 8 :(得分:1)

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

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

答案 9 :(得分:1)

每一个人。 emacs 23.3.1,打击代码无效。因为(菜单栏模式-1)可能导致窗口没有 全屏也是。

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

我搜索Eamcs wiki,找到一个有用的方法。

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)

答案 10 :(得分:1)

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

我只是在设置完所有内容之后将其放在我的init文件末尾附近,假设在设置结束时所有都不会最大化,瞧,它可以工作。

答案 11 :(得分:0)

(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上都有效。根据您的屏幕设置高度和宽度数字。

答案 12 :(得分:0)

要禁用工具栏,请添加行

(tool-bar-mode nil)

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

答案 13 :(得分:0)

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

答案 14 :(得分:0)

emacswiki的以下代码段对我很好: (添加到您的启动配置文件)

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