From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Leo Liu Newsgroups: gmane.emacs.bugs Subject: bug#13594: Planning Emacs-24.4 Date: Mon, 18 Nov 2013 23:48:07 +0800 Message-ID: References: <5289F003.5040708@gmx.at> <528A13DA.1030309@gmx.at> <528A3043.2090109@gmx.at> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Trace: ger.gmane.org 1384789755 1991 80.91.229.3 (18 Nov 2013 15:49:15 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 18 Nov 2013 15:49:15 +0000 (UTC) Cc: 13594@debbugs.gnu.org To: martin rudalics Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Mon Nov 18 16:49:20 2013 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1ViR4h-0006qY-8t for geb-bug-gnu-emacs@m.gmane.org; Mon, 18 Nov 2013 16:49:19 +0100 Original-Received: from localhost ([::1]:44546 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ViR4g-0003ON-DZ for geb-bug-gnu-emacs@m.gmane.org; Mon, 18 Nov 2013 10:49:18 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:56602) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ViR4X-0003Hw-8r for bug-gnu-emacs@gnu.org; Mon, 18 Nov 2013 10:49:15 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ViR4R-0000Eb-7I for bug-gnu-emacs@gnu.org; Mon, 18 Nov 2013 10:49:09 -0500 Original-Received: from debbugs.gnu.org ([140.186.70.43]:46215) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ViR4R-0000DQ-0a for bug-gnu-emacs@gnu.org; Mon, 18 Nov 2013 10:49:03 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1ViR4Q-0004Ct-FC for bug-gnu-emacs@gnu.org; Mon, 18 Nov 2013 10:49:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Leo Liu Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 18 Nov 2013 15:49:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 13594 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 13594-submit@debbugs.gnu.org id=B13594.138478970516108 (code B ref 13594); Mon, 18 Nov 2013 15:49:02 +0000 Original-Received: (at 13594) by debbugs.gnu.org; 18 Nov 2013 15:48:25 +0000 Original-Received: from localhost ([127.0.0.1]:60234 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ViR3o-0004Bk-Ph for submit@debbugs.gnu.org; Mon, 18 Nov 2013 10:48:25 -0500 Original-Received: from mail-pd0-f171.google.com ([209.85.192.171]:57595) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ViR3j-0004BN-VG for 13594@debbugs.gnu.org; Mon, 18 Nov 2013 10:48:20 -0500 Original-Received: by mail-pd0-f171.google.com with SMTP id z10so5154282pdj.30 for <13594@debbugs.gnu.org>; Mon, 18 Nov 2013 07:48:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:references:face:date:in-reply-to:message-id :user-agent:mime-version:content-type; bh=LRWvrmn7mOIH0uRn98ZYbIArGDMqIYomPTIVnfGiJlc=; b=UmA29GJrg/jdKRAVTTLYLW0uwidQGMoFJlkXg/EOGI7UJ1F3Es1KB0vG+Kb2lB1phH p3B5YfF1Pisld5aWsSfoTg9Qzz+GRPVQOSEkp2lMWVsAtxUBa+m9HwCcmmxP8w77Yw+Z siJ9TfX0MKiPSvJU18BM1mt8QLwBtih11/ln4G/xUFIBd7XO+xvzQel0D8UDRRVoz/dC 8gVC03iVoTs9jDFKnO1dDTUjJR5M3NX3HiFCrxYGDkF8H2E9d4QlMvyEjtL+/y8h1vWb ElscGxYdYxbCMg4EcLo6FOHDsiZo4w2L7JVsyYSMSlcKYz+eTMySHPYDGUEL/ULkDtvP 1kHA== X-Received: by 10.68.96.130 with SMTP id ds2mr13952647pbb.99.1384789693845; Mon, 18 Nov 2013 07:48:13 -0800 (PST) Original-Received: from localhost ([221.220.232.204]) by mx.google.com with ESMTPSA id pl1sm24257282pbb.20.2013.11.18.07.48.11 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 18 Nov 2013 07:48:13 -0800 (PST) Face: iVBORw0KGgoAAAANSUhEUgAAACgAAAAoBAMAAAB+0KVeAAAAGFBMVEUzRVhbQj4eZqO6SjnT eWpxnMetm5b6/PmidmqrAAAAAWJLR0QAiAUdSAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1F B9cBBwMLBfKABCMAAAFoSURBVCjPtZI9a8MwEIaFoc7aYDdelQMna0Em3tsSr0XUeE2Q6a22a+v+ fk8fSSBkbDUI6dHpfe9OEvRgiD+ApqKPJgJeB6iUUXWESjUe/ig38AJrhqqvaU2nTIXbNvOQ40fe qdry4kyGoVWsfCQalXpHnJGM01wjWdYbMlXNFdsZDO69m9aqNqxEJqTEgbM5OF7wlEfIoll1Ked4 LbM5X2EdILLokEdmI8z7g5cKED0cuTC930TYhy7ZDekkXVGw/L60TguJePPxcJF48lpsSUWEA/Ju jGFNgJOXc4Hz7TmAdBeu5Ve4AEjOi2/2jfd3cAJZ+IbNrvdjgBZY01b+HTuG3cLws6BJZqVOj/pp T0OqVwx3rFq+QmJwx3loK5JSLEhDIt62+mtC2C+SrAUxEbV6C6v2BRbd6pILBKFpepKZJHgGgrKF sptSUUoczpwg2pQ7ZH1tgs0ou/917mzz6Cs2//C978cv5l07L02orIEAAAAASUVORK5CYII= In-Reply-To: <528A3043.2090109@gmx.at> (martin rudalics's message of "Mon, 18 Nov 2013 16:20:35 +0100") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (OS X 10.9) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:80735 Archived-At: --=-=-= Content-Type: text/plain 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 --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=13594.diff === 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. --=-=-=--