: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
(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.
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"))
'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)))
(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 \.
(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