[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/lisp/window.el
From: |
Richard M. Stallman |
Subject: |
[Emacs-diffs] Changes to emacs/lisp/window.el |
Date: |
Tue, 25 Dec 2001 05:34:39 -0500 |
Index: emacs/lisp/window.el
diff -c emacs/lisp/window.el:1.79 emacs/lisp/window.el:1.80
*** emacs/lisp/window.el:1.79 Mon Nov 26 05:09:56 2001
--- emacs/lisp/window.el Tue Dec 25 05:34:39 2001
***************
*** 162,208 ****
(defun balance-windows ()
"Make all visible windows the same height (approximately)."
(interactive)
! (let ((count -1) levels newsizes size
;; Don't count the lines that are above the uppermost windows.
;; (These are the menu bar lines, if any.)
! (mbl (nth 1 (window-edges (frame-first-window (selected-frame))))))
;; Find all the different vpos's at which windows start,
;; then count them. But ignore levels that differ by only 1.
! (save-window-excursion
! (let (tops (prev-top -2))
! (walk-windows (function (lambda (w)
! (setq tops (cons (nth 1 (window-edges w))
! tops))))
! 'nomini)
! (setq tops (sort tops '<))
! (while tops
! (if (> (car tops) (1+ prev-top))
! (setq prev-top (car tops)
! count (1+ count)))
! (setq levels (cons (cons (car tops) count) levels))
! (setq tops (cdr tops)))
! (setq count (1+ count))))
! ;; Subdivide the frame into that many vertical levels.
! (setq size (/ (- (frame-height) mbl) count))
! (walk-windows (function
! (lambda (w)
! (select-window w)
! (let ((newtop (cdr (assq (nth 1 (window-edges))
! levels)))
! (newbot (or (cdr (assq (+ (window-height)
! (nth 1 (window-edges)))
! levels))
! count)))
! (setq newsizes
! (cons (cons w (* size (- newbot newtop)))
! newsizes)))))
! 'nomini)
! (walk-windows (function (lambda (w)
! (select-window w)
! (let ((newsize (cdr (assq w newsizes))))
! (enlarge-window (- newsize
! (window-height))))))
! 'nomini)))
;;; I think this should be the default; I think people will prefer it--rms.
(defcustom split-window-keep-point t
--- 162,232 ----
(defun balance-windows ()
"Make all visible windows the same height (approximately)."
(interactive)
! (let ((count -1) levels newsizes level-size
;; Don't count the lines that are above the uppermost windows.
;; (These are the menu bar lines, if any.)
! (mbl (nth 1 (window-edges (frame-first-window (selected-frame)))))
! (last-window (previous-window (frame-first-window (selected-frame))))
! ;; Don't count the lines that are past the lowest main window.
! total)
! ;; Bottom edge of last window determines what size we have to work with.
! (setq total
! (+ (window-height last-window)
! (nth 1 (window-edges last-window))))
!
;; Find all the different vpos's at which windows start,
;; then count them. But ignore levels that differ by only 1.
! (let (tops (prev-top -2))
! (walk-windows (function (lambda (w)
! (setq tops (cons (nth 1 (window-edges w))
! tops))))
! 'nomini)
! (setq tops (sort tops '<))
! (while tops
! (if (> (car tops) (1+ prev-top))
! (setq prev-top (car tops)
! count (1+ count)))
! (setq levels (cons (cons (car tops) count) levels))
! (setq tops (cdr tops)))
! (setq count (1+ count)))
! ;; Subdivide the frame into desired number of vertical levels.
! (setq level-size (/ (- total mbl) count))
! (save-selected-window
! ;; Set up NEWSIZES to map windows to their desired sizes.
! ;; If a window ends at the bottom level, don't include
! ;; it in NEWSIZES. Those windows get the right sizes
! ;; by adjusting the ones above them.
! (walk-windows (function
! (lambda (w)
! (let ((newtop (cdr (assq (nth 1 (window-edges w))
! levels)))
! (newbot (cdr (assq (+ (window-height w)
! (nth 1 (window-edges w)))
! levels))))
! (if newbot
! (setq newsizes
! (cons (cons w (* level-size (- newbot
newtop)))
! newsizes)))))))
! 'nomini)
! ;; Make walk-windows start with the topmost window.
! (select-window (previous-window (frame-first-window (selected-frame))))
! (let (done (count 0))
! ;; Give each window its precomputed size, or at least try.
! ;; Keep trying until they all get the intended sizes,
! ;; but not more than 3 times (to prevent infinite loop).
! (while (and (not done) (< count 3))
! (setq done t)
! (setq count (1+ count))
! (walk-windows (function (lambda (w)
! (select-window w)
! (let ((newsize (cdr (assq w newsizes))))
! (when newsize
! (enlarge-window (- newsize
! (window-height))
! nil t)
! (unless (= (window-height) newsize)
! (setq done nil))))))
! 'nomini)))))
;;; I think this should be the default; I think people will prefer it--rms.
(defcustom split-window-keep-point t
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] Changes to emacs/lisp/window.el,
Richard M. Stallman <=