如何设置Emacs窗口的大小?


103

我试图检测要在其上启动emacs的屏幕的大小,并相应地调整其大小和位置(在emacs中,这就是emacs的框架)。我正在尝试设置.emacs,以便始终获得一个“合理大”的窗口,该窗口的左上角靠近屏幕的左上角。

我想这对一般情况来说是一个很大的要求,因此要缩小范围,我对Windows和(Debian)Linux上的GNU Emacs 22最感兴趣。

Answers:


89

如果要根据分辨率更改大小,可以执行以下操作(根据您的特定需求调整首选的宽度和分辨率):

(defun set-frame-size-according-to-resolution ()
  (interactive)
  (if window-system
  (progn
    ;; use 120 char wide window for largeish displays
    ;; and smaller 80 column windows for smaller displays
    ;; pick whatever numbers make sense for you
    (if (> (x-display-pixel-width) 1280)
           (add-to-list 'default-frame-alist (cons 'width 120))
           (add-to-list 'default-frame-alist (cons 'width 80)))
    ;; for the height, subtract a couple hundred pixels
    ;; from the screen height (for panels, menubars and
    ;; whatnot), then divide by the height of a char to
    ;; get the height we want
    (add-to-list 'default-frame-alist 
         (cons 'height (/ (- (x-display-pixel-height) 200)
                             (frame-char-height)))))))

(set-frame-size-according-to-resolution)

请注意,在较新的emacs版本中不建议使用window-system。合适的替代物是(display-graphic-p)。见这个答案的问题如何检测Emacs是在终端模式?多一点背景。


我喜欢不同的数字,所以(按照您的建议)我调整了我的数字。不过,这很好。谢谢!
林德斯2011年

再说一次,我实际上更喜欢这个版本 -简单得多(易于阅读和调整),非常适合我的需求。两者都是很好的答案!+1
林德斯2011年

1
注意高度,至少在OS X的Emacs 24.2上要小心。如果将它设置得太高,则窗口将停留在缓冲区第一行不可见的状态-指针可以在那里导航,但窗口不会滚动以显示它。
Greg Hendershott

2
此方法(以及此处列出的其他方法)有一个较小的伪像。Emacs将打开一定的大小,一秒钟后将调整为我们设置的大小。但是过渡是可见的。有没有办法告诉emacs从t = 0秒起以所需大小绘制自己?
stathisk

48

我的内容如下.emacs

(if (window-system)
  (set-frame-height (selected-frame) 60))

你也可以看看的功能set-frame-sizeset-frame-positionset-frame-width。使用C-h f(aka M-x describe-function)调出详细的文档。

我不确定在当前窗口环境中是否可以计算框架的最大高度/宽度。


12
好极了! (if (window-system) (set-frame-size (selected-frame) 124 40))为了赢得胜利-简洁明了,让我的终端机默认大小非常友好。:)(当然,可以根据喜好进行调整。)谢谢!
林德斯2011年

1
只是要澄清一下:如果将init.el其放入其中,则仅适用于初始框架。如果之后创建新框架,则上述功能将无效。新框架将在中进行设置default-frame-alist
David J.

这对我有用,只不过(set-frame-size (selected-frame) 80 24)给了我一个161 x 48的帧;我在4K hidpi屏幕上,但是我不希望这会影响字符数。
charliegreen

21

摘自:http : //www.gnu.org/software/emacs/windows/old/faq4.html

(setq default-frame-alist
      '((top . 200) (left . 400)
        (width . 80) (height . 40)
        (cursor-color . "white")
        (cursor-type . box)
        (foreground-color . "yellow")
        (background-color . "black")
        (font . "-*-Courier-normal-r-*-*-13-*-*-*-c-*-iso8859-1")))

(setq initial-frame-alist '((top . 10) (left . 30)))

第一个设置适用于所有emacs框架,包括第一个在您启动时弹出的框架。第二设置将其他属性添加到第一帧。这是因为有时很高兴知道启动emacs的原始框架。


我已经使用该方法很长时间来设置框架的高度和宽度((width . 80) (height . 40)),但是由于某种原因,在我将Xubuntu版本从12.04升级到13.10后,该方法停止了工作:启动时,框架大小为默认大小。然后,我转而使用克里斯·康威(Chris Conway)的答案,该答案对我有用。
Teemu Leisti 2014年

17

我发现在X-Window环境中执行此操作的最简单方法是通过X resources。我的.Xdefaults的相关部分如下所示:

Emacs.geometry: 80x70

您应该可以使用+ 0 + 0位置坐标作为后缀,以将其强制显示在显示器的左上角。(我之所以不这样做,是因为我偶尔会产生新的帧,如果它们出现在与前一帧完全相同的位置,则会使事情感到困惑)

根据手册,该技术也适用于MS Windows,将资源作为键/值对存储在注册表中。我从来没有测试过。与仅编辑文件相比,这可能很棒,而且可能带来更多的不便。


1
yeap也适用于Windows。Emacs Wiki提供了更多详细信息: emacswiki.org/emacs/MsWindowsRegistry
Sa'ad

17

尝试将以下代码添加到 .emacs

(add-to-list 'default-frame-alist '(height . 24))

(add-to-list 'default-frame-alist '(width . 80)) 

12

您还可以在启动emacs时使用-geometry参数:emacs -geometry 80x60+20+30将为您提供一个窗口,该窗口宽80个字符,高60行,左上角向右20像素,而背景左上角向下30像素。


7

在ubuntu上执行:

(defun toggle-fullscreen ()
  (interactive)
  (x-send-client-message nil 0 nil "_NET_WM_STATE" 32
                 '(2 "_NET_WM_STATE_MAXIMIZED_VERT" 0))
  (x-send-client-message nil 0 nil "_NET_WM_STATE" 32
                 '(2 "_NET_WM_STATE_MAXIMIZED_HORZ" 0))
)
(toggle-fullscreen)

5

在Windows上,您可以使用以下功能使emacs框架最大化:

(defun w32-maximize-frame ()
  "Maximize the current frame"
  (interactive)
  (w32-send-sys-command 61488))

1
(setq initial-frame-alist
        (append '((width . 263) (height . 112) (top . -5) (left . 5) (font . "4.System VIO"))
                initial-frame-alist))

(setq default-frame-alist
        (append '((width . 263) (height . 112) (top . -5) (left . 5) (font . "4.System VIO"))
                default-frame-alist))

0
(defun set-frame-size-according-to-resolution ()
  (interactive)
  (if window-system
  (progn
    ;; use 120 char wide window for largeish displays
    ;; and smaller 80 column windows for smaller displays
    ;; pick whatever numbers make sense for you
    (if (> (x-display-pixel-width) 1280)
           (add-to-list 'default-frame-alist (cons 'width 120))
           (add-to-list 'default-frame-alist (cons 'width 80)))
    ;; for the height, subtract a couple hundred pixels
    ;; from the screen height (for panels, menubars and
    ;; whatnot), then divide by the height of a char to
    ;; get the height we want
    (add-to-list 'default-frame-alist 
         (cons 'height (/ (- (x-display-pixel-height) 200)
                             (frame-char-height)))))))

(set-frame-size-according-to-resolution)

我喜欢Bryan Oakley的设置。但是,“高度”在我的GNU Emacs 24.1.1中无法正常工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.