44

这让我发疯:我只是想让 Emacs 最大化到我在启动时拥有的任何屏幕分辨率。理想情况下,我喜欢适用于任何屏幕分辨率的跨平台(Windows 和 Linux)解决方案,但我什至无法让它在具有硬编码尺寸的 Window XP 上运行。

这是我尝试过的:

  1. 使用适当的高度/宽度设置初始帧列表
  2. 设置默认帧列表
  3. (Windows 特定的东西)向 emacs 窗口发送消息,告诉它通过最大化(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))))))
    
  5. 在我的 init 文件的开头和结尾都尝试了上述方法,以尝试消除其他 init 事物的干扰。

不幸的是,以上都不起作用!!对于上述某些情况,我可以看到我的 emacs 窗口在一瞬间正确调整大小,然后恢复为较小的默认大小。如果我在初始化后运行上述方法,emacs 窗口会正确调整大小。这里到底发生了什么?

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


更新:

答案让我认为我的 init 文件中的其他内容导致了问题。确实如此!经过一番尝试和错误,我找到了罪魁祸首。如果我注释掉以下行,一切正常:

(tool-bar-mode -1)

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

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

澄清: (tool-bar-mode -1) 关闭工具栏,但这条线会干扰 Emacs 窗口的最大化。因此,如果我尝试将功能最大化窗口并关闭工具栏,则最大化部分将失败;如果工具栏部分被注释掉,那么最大化部分就可以了。我使用什么解决方案(在我列出的 4 个中)甚至都无关紧要。


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

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

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\GNU\Emacs]
"Emacs.Toolbar"="-1"

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

4

15 回答 15

25

大约一年前我找到了一个答案,它解释了你必须操纵注册表才能正确地做事:

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

(w32-send-sys-command 61488)

如果您不想要 Emacs 工具栏,您可以在 ~/.emacs 文件中添加(tool-bar-mode -1) [注意:原始页面上的值为 0] 行,但 Emacs 不会在此完全最大化case - 工具栏占用的不动产丢失。您必须禁用注册表中的工具栏才能将其取回:

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

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

于 2009-05-04T15:56:21.457 回答
13

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

(w32-send-sys-command #xf030)
(add-hook 'window-setup-hook (lambda () (tool-bar-mode -1)))
于 2011-01-02T07:42:34.920 回答
12

大佬,怎么了

emacs -mm?

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

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

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

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

一切都是桃子和口齿不清的:)

于 2012-02-23T18:24:08.407 回答
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)))
于 2009-06-22T19:44:33.697 回答
5

这在以下情况下可靠地工作Emacs 24.5.1 (i686-pc-mingw32)

(add-to-list 'initial-frame-alist '(fullscreen . maximized))
于 2015-10-05T21:29:06.577 回答
3

首先,感谢关于 (tool-bar-mode -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)
)
于 2009-11-25T00:33:14.477 回答
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-* 函数之间设置延迟!

于 2009-09-14T13:44:04.267 回答
2

我遇到了一个似乎有效的命令(toggle-frame-maximized),它适用于 Linux 和 Windows。

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

于 2015-09-10T03:22:21.307 回答
1

嘿 - 不错的功能!感谢发帖

我认为它可能对您不起作用,因为您的 init 文件中其他地方的代码如下所示。在创建框架后应用默认框架列表。我删除了 size 和 position 元素,你的功能在 emacs 启动时效果很好。

   (setq default-frame-alist
     (list
      (cons 'left                 350)
      (cons 'top                  0)
      (cons 'width                80)
      (cons 'height               45)
     ......
于 2009-05-02T19:48:16.143 回答
1

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

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

于 2011-05-10T14:25:35.347 回答
1

每个人。emacs 23.3.1,blow 代码无效。因为 (menu-bar-mode -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,并且想使用“真正的全屏”,即摆脱顶部标题栏和所有内容,请参阅网站上的 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)
于 2011-05-12T02:08:34.890 回答
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 上都有效。根据您的屏幕设置高度和宽度数字。

于 2009-05-02T19:48:47.563 回答
0

要禁用工具栏,请添加行

(tool-bar-mode nil)

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

于 2009-05-04T14:40:36.680 回答
0

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

于 2011-10-19T09:22:09.910 回答
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)
于 2013-06-20T09:06:03.713 回答