原文地址:http://zhaojunde1976.blog.163.com/blog/static/121998668201041131130734/
在Windows XP下面,看了网上的一些帖子,自己也试了一下,发现下面的方法比较好用:
直接在启动文件(.emacs 或者 site-start.el)的最下面增加一条语句:
(run-with-idle-timer 1 nil 'w32-send-sys-command 61488)
其中函数 (w32-send-sys-command 61488) 是向当前emacs的窗口发送最大化的命令,这个函数本身没有问题,可以实现当前emacs窗口最大化的功能,但是如果在启动文件里面直接调用这个函数,在启动的时候运行的其他程序(譬如CEDET, ECB)会把最大化的窗口又修改回来,我的情况就是如此,每次运行emacs总是看到在启动的过程窗口被最大化,但是到最后又变回来了。没有办法,去elisp里面找了一下,发现这么一个函数:run-with-idle-timer, 这个函数的功能是等 emacs 闲下来的时候在运行某一个函数,原型如下:
-- Command: run-with-idle-timer secs repeat function &rest args
第一个参数是空闲多长时间之后调用指定的函数,第二个参数是否重复调用,一般设为 t 或者 nil,t 意味着每隔一段时间重复调用指定的函数,nil 表示只调用一次;第三个参数是函数的名称,后面的参数是被调用函数自己的参数,上面的语句的意思就是:
等emacs启动全部完成之后,空闲1秒之后调用 (w32-send-sys-command 61488)一次。这样,就不存在上面的提到的最大化之后又窗口大小又被其他代码改变的问题。
在 Linux ,Ubuntu,以及使用 X Server 的系统,使用下面的方式最大化窗口:
(defun my-max-window()(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))
)
(run-with-idle-timer 1 nil 'my-max-window)