unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Tino Calancha <tino.calancha@gmail.com>
To: "Drew Adams" <drew.adams@oracle.com>
Cc: 7131@debbugs.gnu.org
Subject: bug#7131: 24.0.50; `dired' with cons arg should not ignore arg if buffer exists
Date: Tue, 18 Jul 2017 20:39:07 +0900	[thread overview]
Message-ID: <871spe0yas.fsf@calancha-pc> (raw)
In-Reply-To: <9165B8BF5E624AAA8F9551E7A82022AF@us.oracle.com> (Drew Adams's message of "Wed, 29 Sep 2010 08:34:17 -0700")

"Drew Adams" <drew.adams@oracle.com> writes:

> (dired '("foo" "file1.c" "file2.c")) opens a Dired buffer named `foo'
> with only files file1.c and file2.c.  This is a useful feature.  The doc
> says only that if the arg is a cons then its first element is taken as
> the directory name and the rest are the files to list.
>  
> But if "foo" is already the name of an existing Dired buffer then that
> existing buffer `foo' is simply displayed as it was.  The explicit
> file-list argument is completely ignored.
>  
> Buffer `foo' should instead be updated (its contents replaced) to list
> only the files to be included (files in the file-list arg).
Agreed.

> The code in question is `dired-internal-noselect'.  This code comment
> gives the behavior rationale for the case where the Dired buffer
> already exists:
>  
> ;; If there is an existing dired buffer for DIRNAME, just leave
> ;; buffer as it is (don't even call dired-revert).
> ;; This saves time especially for deep trees or with ange-ftp.
> ;; The user can type `g' easily, and it is more consistent with find-file.
> ;; But if SWITCHES are given they are probably different from the
> ;; buffer's old value, so call dired-sort-other, which does
> ;; revert the buffer. A pity we can't possibly do "Directory has
> ;; changed - refresh? " like find-file does.
>  
> (DIRNAME is a typo here BTW - the argument is actually called DIR-OR-LIST,
> and if it is a cons then the name is just its car.)
>  
> Note the rationale: If SWITCHES are not given, that is, if there was no
> expressed intention to change the content of the listing, then just
> reuse an existing buffer.  But if such an intention was expressed, then
> respect it.
>  
> Following that rationale, the behavior for a cons arg should be to
> respect the explicit file list passed, not to simply ignore it and reuse
> an existing buffer.
>  
> And since it would be problematic to test the file list for differences
> from the existing listing (whether or not it came from a cons arg
> previously), we should always just update the buffer to reflect the
> file-list that is passed.  IOW, with an explicit file list, never reuse
> an existing Dired buffer of the same name.
IMO, if `dired-directory' is a cons and DIR-OR-LIST is a string then we
must update the buffer as well: in this case, the user want to see the
full listing of that directory.

I propose the following patch:
--8<-----------------------------cut here---------------start------------->8---
commit a77e2a01ad3f903d877f2c71c31ed33b7bf9540c
Author: Tino Calancha <tino.calancha@gmail.com>
Date:   Tue Jul 18 20:33:36 2017 +0900

    dired: Revert buffer when DIRNAME is a cons
    
    * lisp/dired.el (dired-internal-noselect): Revert buffer if DIR-OR-LIST
    is a cons, or dired-directory is a cons and DIR-OR-LIST a string (Bug#7131).
    Update the comments.

diff --git a/lisp/dired.el b/lisp/dired.el
index 4fb4fe78f8..9d500a9f52 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -872,13 +872,15 @@ dired-auto-revert-buffer
   :version "23.2")
 
 (defun dired-internal-noselect (dir-or-list &optional switches mode)
-  ;; If there is an existing dired buffer for DIRNAME, just leave
-  ;; buffer as it is (don't even call dired-revert).
+  ;; If DIR-OR-LIST is a string and there is an existing dired buffer
+  ;; for it, just leave buffer as it is (don't even call dired-revert).
   ;; This saves time especially for deep trees or with ange-ftp.
   ;; The user can type `g' easily, and it is more consistent with find-file.
   ;; But if SWITCHES are given they are probably different from the
   ;; buffer's old value, so call dired-sort-other, which does
   ;; revert the buffer.
+  ;; Revert the buffer if DIR-OR-LIST is a cons or `dired-directory'
+  ;; is a cons and DIR-OR-LIST is a string.
   ;; A pity we can't possibly do "Directory has changed - refresh? "
   ;; like find-file does.
   ;; Optional argument MODE is passed to dired-find-buffer-nocreate,
@@ -898,6 +900,11 @@ dired-internal-noselect
 	       (setq dired-directory dir-or-list)
 	       ;; this calls dired-revert
 	       (dired-sort-other switches))
+	      ;; Always revert when `dir-or-list' is a cons.  Also revert
+	      ;; if `dired-directory' is a cons but `dir-or-list' is not.
+	      ((or (consp dir-or-list) (consp dired-directory))
+	       (setq dired-directory dir-or-list)
+	       (revert-buffer))
 	      ;; Always revert regardless of whether it has changed or not.
 	      ((eq dired-auto-revert-buffer t)
 	       (revert-buffer))

--8<-----------------------------cut here---------------end--------------->8---
In GNU Emacs 26.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.22.11)
 of 2017-07-18
Repository revision: a2ee81911bdf0f37b992989a9d36bb4d2ba14052





  reply	other threads:[~2017-07-18 11:39 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-09-29 15:34 bug#7131: 24.0.50; `dired' with cons arg should not ignore arg if buffer exists Drew Adams
2017-07-18 11:39 ` Tino Calancha [this message]
2017-07-21  4:36   ` Tino Calancha

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

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=871spe0yas.fsf@calancha-pc \
    --to=tino.calancha@gmail.com \
    --cc=7131@debbugs.gnu.org \
    --cc=drew.adams@oracle.com \
    /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 public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).