2013-05-08 19 views
3

我希望所有幀在(1,1)處重疊。然而,隨着包含Emacs:忽略default-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

emacs-frames

我如何可以強制在同一地點被掛靠的所有幀?

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

回答

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)))))))) 
+0

你的第二個建議修復了它。這就是關鍵所在。雖然這個巴洛克代碼是必要的,這很奇怪。 (您的第一個建議對我無效。)謝謝! – Calaf 2013-05-11 13:53:35

+0

第二部分取自ns-win.el代碼,該文件中的代碼有'(+ left 25)'和'(+ top 25)'而不是0.這會影響每次你做一個新的框架,它將頂部和左側的值增加25。我相信這在emacs24中發生了變化,以達到預期的效果。 – xmonk 2013-05-11 14:04:36

+0

您的兩種解決方案都適用於Emacs 23.4和Emacs 24.3。可悲的是,既不適用於24.4的候選版本,目前24.3.91.1。這最後一個確實處理了其他一些在23.4/24.3上不起作用的東西。儘管差異現在僅有幾個垂直(y)像素。 – Calaf 2014-07-14 17:47:50