]> git.eshelyaron.com Git - emacs.git/commitdiff
* window.el (display-buffer-alist, display-buffer): Document the
authorLeo Liu <sdl.web@gmail.com>
Tue, 19 Nov 2013 02:34:04 +0000 (10:34 +0800)
committerLeo Liu <sdl.web@gmail.com>
Tue, 19 Nov 2013 02:34:04 +0000 (10:34 +0800)
new parameter no-display-ok.

* progmodes/compile.el (compilation-start)
(compilation-goto-locus, compilation-find-file): Pass
no-display-ok and handle nil value from display-buffer.

Fixes: debbugs:13594
lisp/ChangeLog
lisp/progmodes/compile.el
lisp/window.el

index f0ea7a93526a564b75c34b8d625cec2a89127b7b..c327727d3e95213cab0a782bcfebde37ad596e07 100644 (file)
@@ -1,3 +1,13 @@
+2013-11-19  Leo Liu  <sdl.web@gmail.com>
+
+       * progmodes/compile.el (compilation-start)
+       (compilation-goto-locus, compilation-find-file): Pass
+       no-display-ok and handle nil value from display-buffer.
+       (Bug#13594)
+
+       * window.el (display-buffer-alist, display-buffer): Document the
+       new parameter no-display-ok.
+
 2013-11-18  Stefan Monnier  <monnier@iro.umontreal.ca>
 
        * electric.el (electric-indent-mode-map): Remove.
index 54f037285244f7e9ad0b631a3ac53f37d370f02e..58f14f68658e217c4681346d724e37bcdeedb586 100644 (file)
@@ -1632,7 +1632,7 @@ Returns the compilation buffer created."
       (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 (no-display-ok . t))))
     (with-current-buffer outbuf
       (let ((process-environment
             (append
@@ -1654,7 +1654,7 @@ Returns the compilation buffer created."
             (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 @@ Returns the compilation buffer created."
                   (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 @@ and overlay is highlighted between MK and END-MK."
                 ;; 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 (no-display-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 @@ attempts to find a file whose name is produced by (format FMT FILENAME)."
     (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 (no-display-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)
index 07741c74a84822d691db255bc756dd5546111a89..ad74afed027e81946951a4fbbc0c6e335d734722 100644 (file)
@@ -5355,7 +5355,10 @@ This is a list of elements (CONDITION . ACTION), where:
  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 (no-display-ok . t) is in ALIST, the
+  caller is prepared for the case of not displaying the buffer
+  and FUNCTION can safely return a non-window value to suppress
+  displaying.  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,10 @@ where FUNCTION is either a function or a list of functions, and
 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.  If the caller is
+prepared to handle the case of not displaying the buffer it
+should pass (no-display-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 +5546,7 @@ argument, ACTION is t."
        (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.