在OS X上的Emacs中设置`fullheight`和`width`

Wil*_*ill 2 emacs dot-emacs emacs24

我发现Emacs框架的默认大小有点小.从阅读中我知道我可以很容易地设置高度和宽度,如下所示:

;;; 140 x 60 window size
(setq default-frame-alist '((width . 140) (height . 60)))
Run Code Online (Sandbox Code Playgroud)

这在我的外接显示器上效果很好,但对于笔记本电脑显示器而言它太大了.我可以通过更改为以下内容来解决高度问题:

;;; automatically set the height
(setq default-frame-alist '((fullscreen . fullheight)))
Run Code Online (Sandbox Code Playgroud)

这使得帧对于当前屏幕设置得尽可能高.但是,如果我使用此方法,则无法设置帧的宽度.添加(width . 140)到上面的alist会将宽度设置为正确的值,但也会再次将高度设置为默认高度.

当我看到框架出现时,它将自己设置为全高,然后将宽度设置为我请求的值,并收缩高度.

我可以使用以下代码克服此问题:

;;; Full height for the default window
(setq default-frame-alist
      '((fullscreen . fullheight)))
;; Set the width in a hook and have all windows inherit
(setq frame-inherited-parameters
      '(width height))
(add-hook 'after-init-hook
          (lambda ()
                  (set-frame-parameter nil 'width 140)))
Run Code Online (Sandbox Code Playgroud)

它使用钩子将第一帧的宽度设置为我想要的值,然后将所有其他窗口设置为继承此值.

然而,这不是很优雅,所以问题是"我怎样才能以更简单(或更少的hackish)方式实现这一目标?".

如果你想看到我的确切 init.el脚本,请看看这个要点

TL; DR

如何设置帧的宽度,并在OS X上将当前监视器上的帧设置得尽可能高?看来你无法指定(width . 140)(fullscreen . fullheight)default-frame-alist.

Wil*_*ill 6

我想出了一个解决方案.我明确地计算了窗口的高度,而不是依赖于(fullscreen . fullheight)为我做这件事.

用于设置高度和宽度值的更新代码非常简单:

;;; Nice size for the default window
(defun get-default-height ()
       (/ (- (display-pixel-height) 120)
          (frame-char-height)))

(add-to-list 'default-frame-alist '(width . 140))
(add-to-list 'default-frame-alist (cons 'height (get-default-height)))
Run Code Online (Sandbox Code Playgroud)

在此代码中,从屏幕高度减去120确保窗口的高度考虑了码头和菜单栏的高度.为了获得正确的结果,您必须确保在选择要使用的字体后执行此代码,否则计算的高度值将无效.

将高度计算放在其自己的功能中应该允许特殊的套管某些操作系统和版本.该方法还具有额外的优点,即打开窗户更快,因为它不将高度"动画"到全高度值.