Emacs:default-frame-alist设置被忽略

时间:2013-05-08 00:28:50

标签: emacs dot-emacs

我希望所有框架在(1,1)重叠。但是.emacs包含

(setq initial-frame-alist
      '((top . 1) (left . 1) (width . 80) (height . 55)))

(setq default-frame-alist
      '((top . 1) (left . 1) (width . 80) (height . 55)))

调用 C-x 5 2 会导致级联中的帧,如图所示。

emacs-frames

如何强制所有帧锚定在同一个地方?

我在OS X(Mountain Lion)上运行Emacs 23.3.1。

1 个答案:

答案 0 :(得分:3)

不会忽略这些设置。您看到上述行为的原因是由于ns-win.el中的before-make-frame-hook导致顶部和左侧增加了25个。

为避免上述影响,您可以将以下内容添加到.emacs文件中:

(setq default-frame-alist '((left . 0) (top . 0) (width . 80) (height . 55)))
(defvar parameters)
(add-hook 'before-make-frame-hook 
  (lambda ()
    (let ((left (cdr (assq 'left (frame-parameters))))
      (top (cdr (assq 'top (frame-parameters)))))
      (setq parameters (cons (cons 'left (+ left 0))
                     (cons (cons 'top (+ top 0))
                       parameters))))))

如果以上操作不起作用,您可以尝试以下ns-win.el before-make-frame-hook

(setq default-frame-alist '((left . 0) (top . 0) (width . 80) (height . 55)))

(defvar parameters)
(add-hook 'before-make-frame-hook
  (lambda ()
    (let ((left (cdr (assq 'left (frame-parameters))))
          (top (cdr (assq 'top (frame-parameters)))))
      (if (consp left) (setq left (cadr left)))
      (if (consp top) (setq top (cadr top)))
      (cond
       ((or (assq 'top parameters) (assq 'left parameters)))
       ((or (not left) (not top)))
       (t
         (setq parameters (cons (cons 'left (+ left 0))
                   (cons (cons 'top (+ top 0))
                     parameters))))))))