2013-05-08 4 views
3

Я хотел бы, чтобы все кадры перекрывались на (1,1). Тем не менее, с .emacs, содержащейEmacs: значение по умолчанию-frame-alist игнорируется

(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-х 5 2 результаты в кадрах в каскаде, как вы видите на рисунке.

emacs-frames

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

Я бегу Emacs 23.3.1 на OS X (Горный лев).

ответ

3

Настройки не игнорируются. Причина, по которой вы видите вышеуказанное поведение, связана с 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)))))))) 
+0

Ваше второе предложение исправляет это. Это все, что имеет значение. Хотя это странно для этого барочного кода. (Ваше первое предложение не помогло мне.) Спасибо! – Calaf

+0

Вторая часть взята из кода ns-win.el, код в указанном файле имеет '(+ left 25)' и '(+ top 25)' вместо 0. Что влияет каждый раз, когда вы создаете новый frame, он добавляет 25 к значениям верхнего и левого. Я считаю, что это было изменено в emacs24, чтобы вести себя так, как ожидалось. – xmonk

+0

Любое из ваших двух решений работает с Emacs 23.4 и Emacs 24.3. К сожалению, ни одна работа с кандидатом на 24,4, в настоящее время 24.3.91.1. Этот последний справляется с некоторыми другими вещами, которые не работают на 23.4/24.3. Хотя расхождение в настоящее время составляет всего несколько вертикальных (y) пикселей. – Calaf

Смежные вопросы