From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Alp Aker Newsgroups: gmane.emacs.bugs Subject: bug#12081: 24.1; buffer-predicate often not called Date: Tue, 31 Jul 2012 02:59:08 -0400 Message-ID: References: <5015411C.30803@gmx.at> <50156DFA.8030104@gmx.at> <5016502A.8060300@gmx.at> <5016C790.1030406@gmx.at> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 X-Trace: dough.gmane.org 1343717997 7870 80.91.229.3 (31 Jul 2012 06:59:57 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Tue, 31 Jul 2012 06:59:57 +0000 (UTC) Cc: 12081@debbugs.gnu.org To: martin rudalics Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Tue Jul 31 08:59:57 2012 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 1Sw6Qs-0001or-8o for geb-bug-gnu-emacs@m.gmane.org; Tue, 31 Jul 2012 08:59:54 +0200 Original-Received: from localhost ([::1]:34092 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Sw6Qr-0004BS-Kj for geb-bug-gnu-emacs@m.gmane.org; Tue, 31 Jul 2012 02:59:53 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:34764) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Sw6Qo-0004BL-PI for bug-gnu-emacs@gnu.org; Tue, 31 Jul 2012 02:59:52 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Sw6Qk-0000kC-KW for bug-gnu-emacs@gnu.org; Tue, 31 Jul 2012 02:59:50 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:42555) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Sw6Qk-0000k7-Ge for bug-gnu-emacs@gnu.org; Tue, 31 Jul 2012 02:59:46 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1Sw6Xm-0002GM-JP for bug-gnu-emacs@gnu.org; Tue, 31 Jul 2012 03:07:03 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Alp Aker Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 31 Jul 2012 07:07:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 12081 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 12081-submit@debbugs.gnu.org id=B12081.13437183918662 (code B ref 12081); Tue, 31 Jul 2012 07:07:02 +0000 Original-Received: (at 12081) by debbugs.gnu.org; 31 Jul 2012 07:06:31 +0000 Original-Received: from localhost ([127.0.0.1]:52101 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1Sw6XG-0002Fe-Vs for submit@debbugs.gnu.org; Tue, 31 Jul 2012 03:06:31 -0400 Original-Received: from mail-yw0-f44.google.com ([209.85.213.44]:45556) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1Sw6XE-0002FX-Jj for 12081@debbugs.gnu.org; Tue, 31 Jul 2012 03:06:30 -0400 Original-Received: by yhq56 with SMTP id 56so5648450yhq.3 for <12081@debbugs.gnu.org>; Mon, 30 Jul 2012 23:59:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=tFU3Xp3kEqWkFZ14mxB934AHq7D4gy3gtfL+hOLqyzk=; b=JSpDDTw33xPunL++dv6Gx0LZp6HVsAwkjuB/7g+wxYRM37PgkmqvIZSU4kaUk/CwcH bFodbJdTdUBPYUlxOWeBh1ma75ywQMwMVmjFfBxn9e9Q9X76jfnpwRDVc2ptAou7Ixqo 5WAEsjdoJW2KXZHBOlSFqt3dcXSlu5QQr7thoECsOP11c3ZU1FpEujLuQc7EXmskwLC5 d0Q/A/rXYr878DqLC6Wp8fRdAD3KVc2a+sZqqB24eouem/Y6wN3HdPpcdt+HSA6EMRv+ A8p0IfYOvct9z4vP6l+yo9mGTo+BElHwK7sEBDnK+d2zhruMNCic+ZP2JgDxqpJ6C/56 khAQ== Original-Received: by 10.50.188.233 with SMTP id gd9mr127819igc.73.1343717949030; Mon, 30 Jul 2012 23:59:09 -0700 (PDT) Original-Received: by 10.64.142.70 with HTTP; Mon, 30 Jul 2012 23:59:08 -0700 (PDT) In-Reply-To: <5016C790.1030406@gmx.at> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) 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:62669 Archived-At: On Mon, Jul 30, 2012 at 1:42 PM, martin rudalics wrote: > When `replace-buffer-in-windows' fails to replace the buffer, > replace_buffer_in_windows_safely will kick in and automatically do what > you mean. Yes, I realized that about kill_buffer; my concern was whether other users of replace-buffer-in-windows should need to provide fallback behavior. I'll defer to your judgment :) So, would something like the following patch be ok (after adding appropriate documentation changes)? Note that with these changes, there might still be some potentially odd behavior. Here's a contrived example. From Emacs -Q, evaluating the following in *scratch*: (progn (set-frame-parameter nil 'buffer-predicate (lambda (x) nil)) (switch-to-buffer (get-buffer-create "foo")) (switch-to-prev-buffer)) will leave buffer "foo" displayed in the selected window, but the return value of of `switch-to-prev-buffer' will be #, because `next-buffer' was assigned during the scan of the previous buffers even though we did not switch to it. Is such a misleading return value ok? (I realize this could be a considered a variant of my earlier concern, which you argued was misplaced, but I thought I should mention it nonetheless.) === modified file 'lisp/window.el' --- lisp/window.el 2012-07-18 10:02:54 +0000 +++ lisp/window.el 2012-07-31 03:10:31 +0000 @@ -2679,6 +2679,7 @@ (old-buffer (window-buffer window)) ;; Save this since it's destroyed by `set-window-buffer'. (next-buffers (window-next-buffers window)) + (pred (frame-parameter frame 'buffer-predicate)) entry new-buffer killed-buffers visible) (when (window-dedicated-p window) (error "Window %s is dedicated to buffer %s" window old-buffer)) @@ -2692,6 +2693,7 @@ (not (setq killed-buffers (cons new-buffer killed-buffers)))) (not (eq new-buffer old-buffer)) + (or (null pred) (funcall pred new-buffer)) (or bury-or-kill (not (memq new-buffer next-buffers)))) (if (and (not switch-to-visible-buffer) @@ -2713,6 +2715,7 @@ (when (and (buffer-live-p buffer) (not (eq buffer old-buffer)) (not (eq (aref (buffer-name buffer) 0) ?\s)) + (or (null pred) (funcall pred buffer)) (or bury-or-kill (not (memq buffer next-buffers)))) (if (get-buffer-window buffer frame) ;; Try to avoid showing a buffer visible in some other window. @@ -2731,6 +2734,7 @@ (not (setq killed-buffers (cons buffer killed-buffers)))) (not (eq buffer old-buffer)) + (or (null pred) (funcall pred buffer)) (setq entry (assq buffer (window-prev-buffers window)))) (setq new-buffer buffer) (set-window-buffer-start-and-point @@ -2773,6 +2777,7 @@ (frame (window-frame window)) (old-buffer (window-buffer window)) (next-buffers (window-next-buffers window)) + (pred (frame-parameter frame 'buffer-predicate)) new-buffer entry killed-buffers visible) (when (window-dedicated-p window) (error "Window %s is dedicated to buffer %s" window old-buffer)) @@ -2784,6 +2789,7 @@ (not (setq killed-buffers (cons buffer killed-buffers)))) (not (eq buffer old-buffer)) + (or (null pred) (funcall pred buffer)) (setq entry (assq buffer (window-prev-buffers window)))) (setq new-buffer buffer) (set-window-buffer-start-and-point @@ -2794,6 +2800,7 @@ (dolist (buffer (buffer-list frame)) (when (and (buffer-live-p buffer) (not (eq buffer old-buffer)) (not (eq (aref (buffer-name buffer) 0) ?\s)) + (or (null pred) (funcall pred buffer)) (not (assq buffer (window-prev-buffers window)))) (if (get-buffer-window buffer frame) ;; Try to avoid showing a buffer visible in some other window. @@ -2808,6 +2815,7 @@ (or (buffer-live-p new-buffer) (not (setq killed-buffers (cons new-buffer killed-buffers)))) + (or (null pred) (funcall pred new-buffer)) (not (eq new-buffer old-buffer))) (if (and (not switch-to-visible-buffer) (get-buffer-window new-buffer frame))