Emacs: настройка default-frame-alist игнорируется

Я хотел бы, чтобы все кадры перекрывались в (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)))

вызов Cx 5 2 приводит к кадрам в каскаде, как вы видите на рисунке.

Emacs-кадры

Как я могу принудительно закрепить все кадры в одном месте?

Я использую Emacs 23.3.1 на OS X (Mountain Lion).

1 ответ

Решение

Настройки не игнорируются. Причина, по которой вы видите вышеупомянутое поведение, связана с before-make-frame-hook в ns-win.el, который добавляет 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))))))))
Другие вопросы по тегам