这让我发疯了:我只是想让Emacs最大化到我在启动时的屏幕分辨率。理想情况下,我喜欢适用于任何屏幕分辨率的跨平台(Windows& Linux)解决方案,但我甚至无法使用甚至硬编码大小的Window XP。
以下是我的尝试:
(w32-send-sys-command 61488)
尝试过我在某处找到的这个功能:
(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))))))
不幸的是,以上都没有效果!!对于上面的一些,我可以看到我的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建议的工作版本。)
答案 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。
答案 9 :(得分: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)