From: Leo Liu <sdl.web@gmail.com>
To: martin rudalics <rudalics@gmx.at>
Cc: 13594@debbugs.gnu.org
Subject: bug#13594: Planning Emacs-24.4
Date: Mon, 18 Nov 2013 23:48:07 +0800 [thread overview]
Message-ID: <m1k3g5d83s.fsf@gmail.com> (raw)
In-Reply-To: <528A3043.2090109@gmx.at> (martin rudalics's message of "Mon, 18 Nov 2013 16:20:35 +0100")
[-- Attachment #1: Type: text/plain, Size: 653 bytes --]
On 2013-11-18 23:20 +0800, martin rudalics wrote:
> I thought you intially wanted to fix the problem that a caller cannot
> handle a nil return value from `display-buffer'. But Stefan says that
> it's not necessary to do that and I agree with him. So your fix is OK
> but I'd just make the last line of `display-buffer' something like
>
> (when (windowp window) window)
>
> and you don't have to talk about a return value of t. Returning t sounds
> not very intuitive when a function fails to accomplish something.
OK, thank you for the quick response. I have re-worked the patch based
on Stefan's and your comments. Please review it. Thanks.
Leo
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 13594.diff --]
[-- Type: text/x-patch, Size: 5187 bytes --]
=== modified file 'lisp/progmodes/compile.el'
--- lisp/progmodes/compile.el 2013-10-23 16:25:56 +0000
+++ lisp/progmodes/compile.el 2013-11-18 15:43:29 +0000
@@ -1632,7 +1632,7 @@
(set-buffer-modified-p nil))
;; Pop up the compilation buffer.
;; http://lists.gnu.org/archive/html/emacs-devel/2007-11/msg01638.html
- (setq outwin (display-buffer outbuf))
+ (setq outwin (display-buffer outbuf '(nil (non-window-ok . t))))
(with-current-buffer outbuf
(let ((process-environment
(append
@@ -1654,7 +1654,7 @@
(list command mode name-function highlight-regexp))
(set (make-local-variable 'revert-buffer-function)
'compilation-revert-buffer)
- (set-window-start outwin (point-min))
+ (and outwin (set-window-start outwin (point-min)))
;; Position point as the user will see it.
(let ((desired-visible-point
@@ -1663,15 +1663,15 @@
(point-max)
;; Normally put it at the top.
(point-min))))
- (if (eq outwin (selected-window))
- (goto-char desired-visible-point)
+ (goto-char desired-visible-point)
+ (when (and outwin (not (eq outwin (selected-window))))
(set-window-point outwin 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 outwin (compilation-set-window-height outwin))
;; Start the compilation.
(if (fboundp 'start-process)
(let ((proc
@@ -2513,14 +2513,16 @@
;; the error location if the two buffers are in two
;; different frames. So don't do it if it's not necessary.
pre-existing
- (display-buffer (marker-buffer msg))))
+ (display-buffer (marker-buffer msg) '(nil (non-window-ok . t)))))
(highlight-regexp (with-current-buffer (marker-buffer msg)
;; also do this while we change buffer
- (compilation-set-window w msg)
+ (goto-char (marker-position msg))
+ (and w (compilation-set-window w msg))
compilation-highlight-regexp)))
;; Ideally, the window-size should be passed to `display-buffer'
;; so it's only used when creating a new window.
- (unless pre-existing (compilation-set-window-height w))
+ (when (and (not pre-existing) w)
+ (compilation-set-window-height w))
(if from-compilation-buffer
;; If the compilation buffer window was selected,
@@ -2631,9 +2633,12 @@
(while (null buffer) ;Repeat until the user selects an existing file.
;; The file doesn't exist. Ask the user where to find it.
(save-excursion ;This save-excursion is probably not right.
- (let ((pop-up-windows t))
- (compilation-set-window (display-buffer (marker-buffer marker))
- marker)
+ (let ((w (let ((pop-up-windows t))
+ (display-buffer (marker-buffer marker)
+ '(nil (non-window-ok . t))))))
+ (with-current-buffer (marker-buffer marker)
+ (goto-char marker)
+ (and w (compilation-set-window w marker)))
(let* ((name (read-file-name
(format "Find this %s in (default %s): "
compilation-error filename)
=== modified file 'lisp/window.el'
--- lisp/window.el 2013-11-12 07:25:14 +0000
+++ lisp/window.el 2013-11-18 15:43:29 +0000
@@ -5355,7 +5355,10 @@
ACTION is a cons cell (FUNCTION . ALIST), where FUNCTION is a
function or a list of functions. Each such function should
accept two arguments: a buffer to display and an alist of the
- same form as ALIST. See `display-buffer' for details.
+ same form as ALIST. If (non-window-ok . t) is in ALIST, the
+ caller is prepared to handle non-window value and FUNCTION can
+ safely return non-window value to suppress displaying the
+ window. See `display-buffer' for details.
`display-buffer' scans this alist until it either finds a
matching regular expression or the function specified by a
@@ -5439,9 +5442,12 @@
ALIST is an arbitrary association list (alist).
Each such FUNCTION should accept two arguments: the buffer to
-display and an alist. Based on those arguments, it should either
-display the buffer and return the window, or return nil if unable
-to display the buffer.
+display and an alist. Based on those arguments, it should
+display the buffer and return the window. It may return nil if
+unable to display the buffer (which is rare and most callers
+don't check this value). If the caller is prepared to handle
+non-window value it should pass (non-window-ok . t) as an element
+of the ALIST.
The `display-buffer' function builds a function list and an alist
by combining the functions and alists specified in
@@ -5542,7 +5548,7 @@
(while (and functions (not window))
(setq window (funcall (car functions) buffer alist)
functions (cdr functions)))
- window))))
+ (and (windowp window) window)))))
(defun display-buffer-other-frame (buffer)
"Display buffer BUFFER preferably in another frame.
next prev parent reply other threads:[~2013-11-18 15:48 UTC|newest]
Thread overview: 73+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-16 17:21 Planning Emacs-24.4 Stefan Monnier
2013-11-16 18:56 ` Bastien
2013-11-17 5:13 ` Leo Liu
2013-11-17 20:53 ` bug#13594: " Stefan Monnier
2013-11-18 8:41 ` Leo Liu
2013-11-18 9:53 ` Leo Liu
2013-11-18 10:00 ` Andreas Schwab
2013-11-18 10:17 ` Leo Liu
2013-11-18 10:26 ` Andreas Schwab
2013-11-18 10:35 ` Leo Liu
2013-11-18 10:38 ` Andreas Schwab
2013-11-18 11:09 ` Leo Liu
2013-11-18 11:25 ` Andreas Schwab
2013-11-18 11:59 ` Leo Liu
2013-11-18 10:46 ` martin rudalics
2013-01-31 10:43 ` bug#13594: 24.2.92; [PATCH] compilation-start doesn't consider nil OUTWIN Leo Liu
2013-01-31 12:35 ` Leo Liu
2013-01-31 15:14 ` Stefan Monnier
2013-01-31 15:21 ` Leo Liu
2013-02-05 10:58 ` Leo Liu
2013-02-05 11:57 ` Leo Liu
2013-02-05 23:25 ` Juri Linkov
2013-02-06 1:19 ` Leo Liu
2013-02-06 10:12 ` Juri Linkov
2013-02-06 15:35 ` Stefan Monnier
2013-02-06 23:40 ` Juri Linkov
2013-02-07 13:36 ` Stefan Monnier
2013-02-08 8:10 ` Juri Linkov
2013-02-08 14:36 ` Stefan Monnier
2013-02-09 9:22 ` martin rudalics
2013-02-10 10:01 ` Juri Linkov
2013-02-10 17:32 ` martin rudalics
2013-02-11 9:28 ` Juri Linkov
2013-02-11 17:31 ` martin rudalics
2013-02-11 17:55 ` Leo Liu
2013-02-14 8:22 ` Leo Liu
2013-02-14 14:15 ` Stefan Monnier
2013-03-19 15:39 ` Leo Liu
2013-03-20 3:12 ` Stefan Monnier
2013-03-20 4:37 ` Leo Liu
2013-03-20 12:51 ` Stefan Monnier
2013-11-17 5:18 ` Leo Liu
2013-11-17 9:48 ` martin rudalics
2013-02-08 9:59 ` martin rudalics
2013-11-18 11:16 ` bug#13594: Planning Emacs-24.4 Leo Liu
2013-11-18 13:19 ` martin rudalics
2013-11-18 14:56 ` Leo Liu
2013-11-18 15:20 ` martin rudalics
2013-11-18 15:48 ` Leo Liu [this message]
2013-11-19 0:33 ` Stefan Monnier
2013-11-19 0:54 ` Juri Linkov
2013-11-19 3:38 ` Stefan Monnier
2013-11-19 2:42 ` Leo Liu
2013-11-19 7:42 ` martin rudalics
2013-11-20 2:51 ` Leo Liu
2013-11-20 7:33 ` martin rudalics
2013-11-19 0:31 ` Stefan Monnier
2013-11-19 7:42 ` martin rudalics
2013-11-20 0:55 ` Juri Linkov
2013-11-20 3:26 ` Stefan Monnier
2013-11-21 0:30 ` Juri Linkov
2013-12-02 5:33 ` Leo Liu
2013-12-03 1:19 ` Juri Linkov
2013-12-03 3:23 ` Leo Liu
2013-12-03 7:56 ` martin rudalics
2013-11-20 7:34 ` martin rudalics
2013-11-18 13:55 ` Stefan Monnier
2013-11-18 15:32 ` martin rudalics
2013-11-19 13:44 ` Darren Hoo
2013-11-19 16:20 ` Eli Zaretskii
2013-11-20 6:58 ` Darren Hoo
2013-11-20 17:47 ` Eli Zaretskii
2013-11-23 3:12 ` Glenn Morris
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=m1k3g5d83s.fsf@gmail.com \
--to=sdl.web@gmail.com \
--cc=13594@debbugs.gnu.org \
--cc=rudalics@gmx.at \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.