GNU bug report logs -
#13594
24.2.92; [PATCH] compilation-start doesn't consider nil OUTWIN
Previous Next
Reported by: Leo Liu <sdl.web <at> gmail.com>
Date: Thu, 31 Jan 2013 10:45:02 UTC
Severity: normal
Tags: patch
Found in version 24.2.92
Done: Leo Liu <sdl.web <at> gmail.com>
Bug is archived. No further changes may be made.
Full log
Message #77 received at 13594 <at> debbugs.gnu.org (full text, mbox):
>> Basically, as it currently stands "don't display at all" can be done in
>> 2 ways:
>> - make it work only for those callers that are prepared for it: for this
>> case, we could simply define a t return value (returned from an
>> ACTION) to mean "not displayed". Ideally, display-buffer would return
>> nil in this case, but returning t is OK as well.
>> - make it work everywhere: then we need display-buffer to return
>> a "dummy" window (i.e. an object that behaves like a window object
>> but that is not displayed).
>>
>> I'm beginning to think the best choice is the first option: it requires
>> no changes right away, and we can progressively change callers so that
>> they can handle the "not displayed" case.
> Does this roughly follow your idea? i.e. document display-buffer to
> allow non-window return value (I also get rid of mentioning nil). In
> compile.el, handle non-window return value. The attached patch does
> these two. (I'll prepare a thorough patch tomorrow.).
It only does one half: change a few callers to handle a non-window
return value. But the other half is important: the non-window return
value should only be possible if the caller announces that it's ready to
handle it.
Stefan
> diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el
> index b82afc67..8edfe487 100644
> --- a/lisp/progmodes/compile.el
> +++ b/lisp/progmodes/compile.el
> @@ -1638,7 +1638,8 @@ (defun compilation-start (command &optional mode name-function highlight-regexp)
> (list command mode name-function highlight-regexp))
> (set (make-local-variable 'revert-buffer-function)
> 'compilation-revert-buffer)
> - (set-window-start outwin (point-min))
> + (when (windowp outwin)
> + (set-window-start outwin (point-min)))
> ;; Position point as the user will see it.
> (let ((desired-visible-point
> @@ -1647,15 +1648,18 @@ (defun compilation-start (command &optional mode name-function highlight-regexp)
> (point-max)
> ;; Normally put it at the top.
> (point-min))))
> - (if (eq outwin (selected-window))
> - (goto-char desired-visible-point)
> - (set-window-point outwin desired-visible-point)))
> + (cond
> + ((windowp outwin)
> + (set-window-point outwin desired-visible-point))
> + ((eq outwin (selected-window))
> + (goto-char desired-visible-point))))
> ;; The setup function is called before compilation-set-window-height
> ;; so it can set the compilation-window-height buffer locally.
> (if compilation-process-setup-function
> (funcall compilation-process-setup-function))
> - (compilation-set-window-height outwin)
> + (and (windowp outwin)
> + (compilation-set-window-height outwin))
> ;; Start the compilation.
> (if (fboundp 'start-process)
> (let ((proc
> diff --git a/lisp/window.el b/lisp/window.el
> index 63d75f60..e96c8c60 100644
> --- a/lisp/window.el
> +++ b/lisp/window.el
> @@ -5368,7 +5368,8 @@ (defun display-buffer (buffer-or-name &optional action frame)
> "Display BUFFER-OR-NAME in some window, without selecting it.
> BUFFER-OR-NAME must be a buffer or the name of an existing
> buffer. Return the window chosen for displaying BUFFER-OR-NAME,
> -or nil if no such window is found.
> +or a non-nil value to mean one of the actions forbids displaying
> +the buffer.
> Optional argument ACTION, if non-nil, should specify a display
> action. Its form is described below.
> @@ -5394,7 +5395,9 @@ (defun display-buffer (buffer-or-name &optional action frame)
> `display-buffer-fallback-action' (in order). Then it calls each
> function in the combined function list in turn, passing the
> buffer as the first argument and the combined alist as the second
> -argument, until one of the functions returns non-nil.
> +argument, until one of the functions returns non-nil. If the
> +value is not a window object, the search stops and no buffer is
> +displayed.
> If ACTION is nil, the function list and the alist are built using
> only the other variables mentioned above.
This bug report was last modified 11 years and 234 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.