Merge branch 'master' of git.savannah.gnu.org:/srv/git/emacs
This commit is contained in:
commit
7e9f62c0bc
4 changed files with 101 additions and 12 deletions
|
@ -2607,6 +2607,12 @@ suitable @code{window-height} or @code{window-width} entry, see above.
|
|||
If splitting the selected window fails and there is a non-dedicated
|
||||
window below the selected one showing some other buffer, this function
|
||||
tries to use that window for showing @var{buffer}.
|
||||
|
||||
If @var{alist} contains a @code{window-min-height} entry, this
|
||||
function ensures that the window used is or can become at least as
|
||||
high as specified by that entry's value. Note that this is only a
|
||||
guarantee. In order to actually resize the window used, @var{alist}
|
||||
must also provide an appropriate @code{window-height} entry.
|
||||
@end defun
|
||||
|
||||
@defun display-buffer-at-bottom buffer alist
|
||||
|
@ -2790,6 +2796,22 @@ The value specifies an alist of window parameters to give the chosen
|
|||
window. All action functions that choose a window should process this
|
||||
entry.
|
||||
|
||||
@vindex window-min-height@r{, a buffer display action alist entry}
|
||||
@item window-min-height
|
||||
The value specifies a minimum height of the window used, in lines. If
|
||||
a window is not or cannot be made as high as specified by this entry,
|
||||
the window is not considered for use. The only client of this entry
|
||||
is presently @code{display-buffer-below-selected}.
|
||||
|
||||
Note that providing such an entry alone does not necessarily make the
|
||||
window as tall as specified by its value. To actually resize an
|
||||
existing window or make a new window as tall as specified by that
|
||||
value, a @code{window-height} entry specifying that value should be
|
||||
provided as well. Such a @code{window-height} entry can, however,
|
||||
specify a completely different value or ask the window height to be
|
||||
fit to that of its buffer in which case the @code{window-min-height}
|
||||
entry provides the guaranteed minimum height of the window used.
|
||||
|
||||
@vindex window-height@r{, a buffer display action alist entry}
|
||||
@item window-height
|
||||
The value specifies whether and how to adjust the height of the chosen
|
||||
|
|
6
etc/NEWS
6
etc/NEWS
|
@ -1234,6 +1234,12 @@ of the Emacs Lisp Reference manual for more detail.
|
|||
A buffer-local value of this hook is now run only if at least one
|
||||
window showing the buffer has changed its size.
|
||||
|
||||
+++
|
||||
** New buffer display action alist entry 'window-min-height'.
|
||||
Such an entry allows to specify a minimum height of the window used
|
||||
for displaying a buffer. 'display-buffer-below-selected' is the only
|
||||
action function to respect it at the moment.
|
||||
|
||||
+++
|
||||
** The function 'assoc-delete-all' now takes an optional predicate argument.
|
||||
|
||||
|
|
|
@ -1478,12 +1478,36 @@ change; the point does."
|
|||
(list w
|
||||
(dired-get-filename nil t)
|
||||
(line-number-at-pos (window-point w)))))
|
||||
(get-buffer-window-list nil 0 t))))
|
||||
(get-buffer-window-list nil 0 t))
|
||||
;; For each window that showed the current buffer before, scan its
|
||||
;; list of previous buffers. For each association thus found save
|
||||
;; a triple <point, name, line> where 'point' is that window's
|
||||
;; window-point marker stored in the window's list of previous
|
||||
;; buffers, 'name' is the filename at the position of 'point' and
|
||||
;; 'line' is the line number at the position of 'point'.
|
||||
(let ((buffer (current-buffer))
|
||||
prevs)
|
||||
(walk-windows
|
||||
(lambda (window)
|
||||
(let ((prev (assq buffer (window-prev-buffers window))))
|
||||
(when prev
|
||||
(with-current-buffer buffer
|
||||
(save-excursion
|
||||
(goto-char (nth 2 prev))
|
||||
(setq prevs
|
||||
(cons
|
||||
(list (nth 2 prev)
|
||||
(dired-get-filename nil t)
|
||||
(line-number-at-pos (point)))
|
||||
prevs)))))))
|
||||
'nomini t)
|
||||
prevs)))
|
||||
|
||||
(defun dired-restore-positions (positions)
|
||||
"Restore POSITIONS saved with `dired-save-positions'."
|
||||
(let* ((buf-file-pos (nth 0 positions))
|
||||
(buffer (nth 0 buf-file-pos)))
|
||||
(buffer (nth 0 buf-file-pos))
|
||||
(prevs (nth 2 positions)))
|
||||
(unless (and (nth 1 buf-file-pos)
|
||||
(dired-goto-file (nth 1 buf-file-pos)))
|
||||
(goto-char (point-min))
|
||||
|
@ -1497,7 +1521,21 @@ change; the point does."
|
|||
(dired-goto-file (nth 1 win-file-pos)))
|
||||
(goto-char (point-min))
|
||||
(forward-line (1- (nth 2 win-file-pos)))
|
||||
(dired-move-to-filename)))))))
|
||||
(dired-move-to-filename)))))
|
||||
(when prevs
|
||||
(with-current-buffer buffer
|
||||
(save-excursion
|
||||
(dolist (prev prevs)
|
||||
(let ((point (nth 0 prev)))
|
||||
;; Sanity check of the point marker.
|
||||
(when (and (markerp point)
|
||||
(eq (marker-buffer point) buffer))
|
||||
(unless (and (nth 0 prev)
|
||||
(dired-goto-file (nth 1 prev)))
|
||||
(goto-char (point-min))
|
||||
(forward-line (1- (nth 2 prev))))
|
||||
(dired-move-to-filename)
|
||||
(move-marker point (point) buffer)))))))))
|
||||
|
||||
(defun dired-remember-marks (beg end)
|
||||
"Return alist of files and their marks, from BEG to END."
|
||||
|
|
|
@ -7465,22 +7465,45 @@ If there is a window below the selected one and that window
|
|||
already displays BUFFER, use that window. Otherwise, try to
|
||||
create a new window below the selected one and show BUFFER there.
|
||||
If that attempt fails as well and there is a non-dedicated window
|
||||
below the selected one, use that window."
|
||||
(let (window)
|
||||
below the selected one, use that window.
|
||||
|
||||
If ALIST contains a 'window-min-height' entry, this function
|
||||
ensures that the window used is or can become at least as high as
|
||||
specified by that entry's value. Note that such an entry alone
|
||||
will not resize the window per se. In order to do that, ALIST
|
||||
must also contain a 'window-height' entry with the same value."
|
||||
(let ((min-height (cdr (assq 'window-min-height alist)))
|
||||
window)
|
||||
(or (and (setq window (window-in-direction 'below))
|
||||
(eq buffer (window-buffer window))
|
||||
(eq buffer (window-buffer window))
|
||||
(or (not (numberp min-height))
|
||||
(>= (window-height window) min-height)
|
||||
;; 'window--display-buffer' can resize this window if
|
||||
;; and only if it has a 'quit-restore' parameter
|
||||
;; certifying that it always showed BUFFER before.
|
||||
(let ((height (window-height window))
|
||||
(quit-restore (window-parameter window 'quit-restore)))
|
||||
(and quit-restore
|
||||
(eq (nth 1 quit-restore) 'window)
|
||||
(window-resizable-p window (- min-height height)))))
|
||||
(window--display-buffer buffer window 'reuse alist))
|
||||
(and (not (frame-parameter nil 'unsplittable))
|
||||
(let ((split-height-threshold 0)
|
||||
(or (not (numberp min-height))
|
||||
(window-sizable-p nil (- min-height)))
|
||||
(let ((split-height-threshold 0)
|
||||
split-width-threshold)
|
||||
(setq window (window--try-to-split-window
|
||||
(setq window (window--try-to-split-window
|
||||
(selected-window) alist)))
|
||||
(window--display-buffer
|
||||
buffer window 'window alist display-buffer-mark-dedicated))
|
||||
(window--display-buffer
|
||||
buffer window 'window alist display-buffer-mark-dedicated))
|
||||
(and (setq window (window-in-direction 'below))
|
||||
(not (window-dedicated-p window))
|
||||
(not (window-dedicated-p window))
|
||||
(or (not (numberp min-height))
|
||||
;; A window that showed another buffer before cannot
|
||||
;; be resized.
|
||||
(>= (window-height window) min-height))
|
||||
(window--display-buffer
|
||||
buffer window 'reuse alist display-buffer-mark-dedicated)))))
|
||||
buffer window 'reuse alist display-buffer-mark-dedicated)))))
|
||||
|
||||
(defun display-buffer--maybe-at-bottom (buffer alist)
|
||||
(let ((alist (append alist `(,(if temp-buffer-resize-mode
|
||||
|
|
Loading…
Add table
Reference in a new issue