unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Alvaro Ramirez <alvaro@xenodium.com>
To: Eli Zaretskii <eliz@gnu.org>
Cc: acorallo@gnu.org, 72272@debbugs.gnu.org, stefankangas@gmail.com,
	visuweshm@gmail.com
Subject: bug#72272: [PATCH] dired-hide-details-mode hides directory's absolute path
Date: Sat, 12 Oct 2024 19:27:09 +0100	[thread overview]
Message-ID: <m2cyk5jhxe.fsf@xenodium.com> (raw)
In-Reply-To: <86zfn9wo69.fsf@gnu.org> (Eli Zaretskii's message of "Sat, 12 Oct 2024 14:33:50 +0300")

[-- Attachment #1: Type: text/plain, Size: 2072 bytes --]

Thanks for the comments Eli.

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Alvaro Ramirez <alvaro@xenodium.com>
>> Date: Wed, 9 Oct 2024 18:31:35 +0100
>> Cc: 72272@debbugs.gnu.org, Andrea Corallo <acorallo@gnu.org>,
>>  Visuwesh <visuweshm@gmail.com>
>> 
>> Hi Eli / Stefan
>> 
>> With the latest patch disabling the feature by default, is it 
>> good to apply?
>
> It is good, but it no longer applies.  Would you please rebase 
> it on
> the latest master branch and resubmit?

Yup. Rebased. See latest patch attached.

>
> Also, please fix the following minor nits while you are at it:
>
>> ++++
>> +*** New user option 
>> 'dired-hide-details-hide-absolute-location'
>
> The heading lines in NEWS should end in a period.
>
> Also, since this new variable is not documented in the manual, 
> the
> entry should be marked as "---", not "+++".

Thanks. Did not know this.

>> +            (let* ((dir-indent "  ")
>> +                   (dir-name (or (car-safe dir-wildcard)
>> +                                 (directory-file-name 
>> (file-name-directory dir))))
>> +                   (dir-name-point (+ (point) (length 
>> dir-indent)))
>> +                   (hideable-location (and 
>> dired-hide-details-hide-absolute-location
>> +                                           (not 
>> (string-empty-p (file-name-nondirectory dir-name))))))
>> +	      ;; Inserted directory name must be absolute, but 
>> keep in mind it
>> +              ;; may be replaced in some instances 
>> (e.g. dired-build-subdir-alist).
>> +              (insert dir-indent dir-name ":\n")
>> +              (when hideable-location
>> +                (put-text-property dir-name-point
>> +                                   (+ dir-name-point
>> +                                      (length 
>> (file-name-directory dir-name)))
>> +                                   'invisible 
>> 'dired-hide-details-absolute-location)))
>
> Here (and elsewhere in the patch) please break too-long lines 
> into
> two.

Used 80 character limit. Happy to use a different limit if needed.

>
> Thanks.

[-- Attachment #2: 0001-Hide-default-directory-absolute-location-via-dired-h.patch --]
[-- Type: text/x-patch, Size: 8642 bytes --]

From 0ed4df0ae090a96bc40f19a15e4d62be58900d3b Mon Sep 17 00:00:00 2001
From: Álvaro Ramírez <me@xenodium.com>
Date: Wed, 2 Oct 2024 11:36:57 +0100
Subject: [PATCH] Hide default-directory absolute location via
 dired-hide-details-mode

---
 etc/NEWS                 | 14 +++++++++++
 lisp/dired.el            | 54 +++++++++++++++++++++++++++++++++-------
 test/lisp/dired-tests.el | 46 ++++++++++++++++++++++++++++++++++
 3 files changed, 105 insertions(+), 9 deletions(-)

diff --git a/etc/NEWS b/etc/NEWS
index daaae54d7d3..3ae46b45e7e 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -490,6 +490,20 @@ fontifying them, which can be slow for remote directories.  Setting
 'dired-check-symlinks' to nil disables these checks.  Defaults to t, can
 be set as a connection-local variable.
 
+---
+*** New user option 'dired-hide-details-hide-absolute-location'.
+When dired's 'dired-hide-details-mode' is enabled, also hide the
+'default-directory' absolute location, typically displayed as the first
+line in a dired buffer.
+
+With dired-hide-details-hide-absolute-location:
+
+  project: (100 GiB available)
+
+Without dired-hide-details-hide-absolute-location:
+
+  /absolute/path/to/my/important/project: (100 GiB available)
+
 ** Grep
 
 +++
diff --git a/lisp/dired.el b/lisp/dired.el
index 2bf5a221f4e..625de019d3b 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -387,6 +387,12 @@ dired-hide-details-hide-information-lines
   :version "24.4"
   :group 'dired)
 
+(defcustom dired-hide-details-hide-absolute-location nil
+  "Non-nil means `dired-hide-details-mode' hides directory absolute location."
+  :type 'boolean
+  :version "31.1"
+  :group 'dired)
+
 (defcustom dired-always-read-filesystem nil
   "Non-nil means revert buffers visiting files before searching them.
 By default,  commands like `dired-mark-files-containing-regexp' will
@@ -1816,12 +1822,25 @@ dired-insert-directory
 	  (when (and (or hdr wildcard)
 		     (not (and (looking-at "^  \\(.*\\):$")
 			       (file-name-absolute-p (match-string 1)))))
-	    ;; Note that dired-build-subdir-alist will replace the name
-	    ;; by its expansion, so it does not matter whether what we insert
-	    ;; here is fully expanded, but it should be absolute.
-	    (insert "  " (or (car-safe dir-wildcard)
-                             (directory-file-name (file-name-directory dir)))
-                    ":\n")
+            (let* ((dir-indent "  ")
+                   (dir-name (or (car-safe dir-wildcard)
+                                 (directory-file-name
+                                  (file-name-directory dir))))
+                   (dir-name-point (+ (point) (length dir-indent)))
+                   (hideable-location
+                    (and dired-hide-details-hide-absolute-location
+                         (not (string-empty-p (file-name-nondirectory
+                                               dir-name))))))
+	      ;; Inserted directory name must be absolute, but keep in
+              ;; mind it may be replaced in some instances like in
+              ;; `dired-build-subdir-alist'.
+              (insert dir-indent dir-name ":\n")
+              (when hideable-location
+                (put-text-property
+                 dir-name-point
+                 (+ dir-name-point
+                    (length (file-name-directory dir-name)))
+                 'invisible 'dired-hide-details-absolute-location)))
 	    (setq content-point (point)))
 	  (when wildcard
 	    ;; Insert "wildcard" line where "total" line would be for a full dir.
@@ -3257,8 +3276,9 @@ dired-hide-details-mode
 When this minor mode is enabled, details such as file ownership and
 permissions are hidden from view.
 
-See options: `dired-hide-details-hide-symlink-targets' and
-`dired-hide-details-hide-information-lines'."
+See options: `dired-hide-details-hide-symlink-targets',
+`dired-hide-details-hide-information-lines' and
+`dired-hide-details-hide-absolute-location'."
   :group 'dired
   (unless (derived-mode-p '(dired-mode wdired-mode))
     (error "Not a Dired buffer"))
@@ -3282,6 +3302,11 @@ dired-hide-details-update-invisibility-spec
 	       'add-to-invisibility-spec
 	     'remove-from-invisibility-spec)
 	   'dired-hide-details-information)
+  (funcall (if (and dired-hide-details-mode
+		    dired-hide-details-hide-absolute-location)
+	       #'add-to-invisibility-spec
+	     #'remove-from-invisibility-spec)
+	   'dired-hide-details-absolute-location)
   (funcall (if (and dired-hide-details-mode
 		    dired-hide-details-hide-symlink-targets
 		    (not (derived-mode-p 'wdired-mode)))
@@ -3688,7 +3713,18 @@ dired-build-subdir-alist
 				(substring new-dir-name (match-end 0)))
 		      (expand-file-name new-dir-name))))
 	    (delete-region (point) (match-end 1))
-	    (insert new-dir-name))
+            (let ((new-dir-name-pos (point))
+                  (hideable-location
+                   (and dired-hide-details-hide-absolute-location
+                        (not (string-empty-p
+                              (file-name-nondirectory new-dir-name))))))
+              (insert new-dir-name)
+              (when hideable-location
+                (put-text-property
+                 new-dir-name-pos
+                 (+ new-dir-name-pos
+                    (length (file-name-directory new-dir-name)))
+		 'invisible 'dired-hide-details-absolute-location))))
 	  (setq count (1+ count))
 	  ;; Undo any escaping of newlines and \ by dired-insert-directory.
 	  ;; Convert "n" preceded by odd number of \ to newline, and \\ to \.
diff --git a/test/lisp/dired-tests.el b/test/lisp/dired-tests.el
index 3b1f80d3d3d..5a9ba14b402 100644
--- a/test/lisp/dired-tests.el
+++ b/test/lisp/dired-tests.el
@@ -524,6 +524,52 @@ dired-test-directory-files-and-attributes
       (when (file-directory-p testdir)
         (delete-directory testdir t)))))
 
+(ert-deftest dired-test-hide-absolute-location-enabled ()
+  "Test for https://debbugs.gnu.org/72272 ."
+  (let* ((dired-hide-details-hide-absolute-location t)
+         (dir-name (expand-file-name "lisp" source-directory))
+         (buffer (prog1 (dired (list dir-name "dired.el" "play"))
+                   (dired-insert-subdir (file-name-concat default-directory
+                                                          "play")))))
+    (unwind-protect
+        (progn
+          (goto-char (point-min))
+          (re-search-forward dired-subdir-regexp)
+          (goto-char (match-beginning 1))
+          (should (equal "lisp" (file-name-nondirectory
+                                 (directory-file-name (dired-get-subdir)))))
+          (should (equal 'dired-hide-details-absolute-location
+                         (get-text-property (match-beginning 1) 'invisible)))
+          (re-search-forward dired-subdir-regexp)
+          (goto-char (match-beginning 1))
+          (should (equal "play" (file-name-nondirectory
+                                 (directory-file-name (dired-get-subdir)))))
+          (should (equal 'dired-hide-details-absolute-location
+                         (get-text-property (match-beginning 1) 'invisible))))
+      (kill-buffer buffer))))
+
+(ert-deftest dired-test-hide-absolute-location-disabled ()
+  "Test for https://debbugs.gnu.org/72272 ."
+  (let* ((dired-hide-details-hide-absolute-location nil)
+         (dir-name (expand-file-name "lisp" source-directory))
+         (buffer (prog1 (dired (list dir-name "dired.el" "play"))
+                   (dired-insert-subdir (file-name-concat default-directory
+                                                          "play")))))
+    (unwind-protect
+        (progn
+          (goto-char (point-min))
+          (re-search-forward dired-subdir-regexp)
+          (goto-char (match-beginning 1))
+          (should (equal "lisp" (file-name-nondirectory
+                                 (directory-file-name (dired-get-subdir)))))
+          (should-not (get-text-property (match-beginning 1) 'invisible))
+          (re-search-forward dired-subdir-regexp)
+          (goto-char (match-beginning 1))
+          (should (equal "play" (file-name-nondirectory
+                                 (directory-file-name (dired-get-subdir)))))
+          (should-not (get-text-property (match-beginning 1) 'invisible)))
+      (kill-buffer buffer))))
+
 ;; `dired-insert-directory' output tests.
 (let* ((data-dir "insert-directory")
        (test-dir (file-name-as-directory
--
2.39.5 (Apple Git-154)


      reply	other threads:[~2024-10-12 18:27 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-24 11:17 bug#72272: [PATCH] dired-hide-details-mode hides directory's absolute path Alvaro Ramirez
2024-08-04  8:06 ` Eli Zaretskii
2024-08-05  9:45   ` Andrea Corallo
     [not found]     ` <d75b2eb4e45413d468c15f4d6e8c3d0ce568d28ddbf7a828a4f917f29e54cbcb@mu.id>
2024-08-05 14:34       ` Alvaro Ramirez
2024-08-17  8:53         ` Eli Zaretskii
2024-08-17  9:27           ` Alvaro Ramirez
2024-10-01 20:31             ` Alvaro Ramirez
2024-10-01 21:17         ` Stefan Kangas
2024-10-02 10:55           ` Alvaro Ramirez
2024-10-02 21:32             ` Stefan Kangas
2024-10-03  8:19               ` Alvaro Ramirez
2024-10-03  8:23                 ` Alvaro Ramirez
2024-10-03 14:57               ` Visuwesh
2024-10-03 17:37                 ` Alvaro Ramirez
2024-10-09 17:31                   ` Alvaro Ramirez
2024-10-12 11:33                     ` Eli Zaretskii
2024-10-12 18:27                       ` Alvaro Ramirez [this message]

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=m2cyk5jhxe.fsf@xenodium.com \
    --to=alvaro@xenodium.com \
    --cc=72272@debbugs.gnu.org \
    --cc=acorallo@gnu.org \
    --cc=eliz@gnu.org \
    --cc=stefankangas@gmail.com \
    --cc=visuweshm@gmail.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).