Add dired-hide-details-mode. (Bug#6799)
* locate.el (locate-mode): Set parent mode property to dired-mode. * find-dired.el (find-dired): Call dired-insert-set-properties on initial information line. Set process mark on end of buffer. (find-dired-sentinel): Call dired-insert-set-properties on summary. * dired.el (dired-hide-details-hide-symlink-targets) (dired-hide-details-hide-information-lines): New options. (dired-insert-directory): Set properties after final treatment of output. (dired-insert-set-properties): Set dired-hide-details-* properties. (dired-mode-map): Bind dired-hide-details-mode. (dired-mode): Set buffer-invisibility-spec to a list. (dired-next-line): Skip hidden lines. (dired-previous-line): Use dired-next-line. (dired-hide-details-mode): New minor mode. (dired-hide-details-update-invisibility-spec): New function.
This commit is contained in:
parent
4e16ddf47e
commit
a2a538b15e
5 changed files with 130 additions and 28 deletions
4
etc/NEWS
4
etc/NEWS
|
@ -120,6 +120,10 @@ on the given date.
|
|||
|
||||
*** Support for ISO 8601 dates.
|
||||
|
||||
** Dired
|
||||
|
||||
*** New minor mode `dired-hide-details-mode' hides details.
|
||||
|
||||
** ERC
|
||||
|
||||
*** New option `erc-accidental-paste-threshold-seconds'.
|
||||
|
|
|
@ -1,3 +1,27 @@
|
|||
2013-02-12 Christopher Schmidt <christopher@ch.ristopher.com>
|
||||
|
||||
Add dired-hide-details-mode. (Bug#6799)
|
||||
|
||||
* locate.el (locate-mode): Set parent mode property to dired-mode.
|
||||
|
||||
* find-dired.el (find-dired): Call dired-insert-set-properties on
|
||||
initial information line. Set process mark on end of buffer.
|
||||
(find-dired-sentinel):
|
||||
Call dired-insert-set-properties on summary.
|
||||
|
||||
* dired.el (dired-hide-details-hide-symlink-targets)
|
||||
(dired-hide-details-hide-information-lines): New options.
|
||||
(dired-insert-directory):
|
||||
Set properties after final treatment of output.
|
||||
(dired-insert-set-properties):
|
||||
Set dired-hide-details-* properties.
|
||||
(dired-mode-map): Bind dired-hide-details-mode.
|
||||
(dired-mode): Set buffer-invisibility-spec to a list.
|
||||
(dired-next-line): Skip hidden lines.
|
||||
(dired-previous-line): Use dired-next-line.
|
||||
(dired-hide-details-mode): New minor mode.
|
||||
(dired-hide-details-update-invisibility-spec): New function.
|
||||
|
||||
2013-02-13 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* play/yow.el: Move to obsolete/. (Bug#9384)
|
||||
|
|
114
lisp/dired.el
114
lisp/dired.el
|
@ -230,6 +230,18 @@ new dired buffers."
|
|||
:version "22.1"
|
||||
:group 'dired)
|
||||
|
||||
(defcustom dired-hide-details-hide-symlink-targets t
|
||||
"If non-nil, `dired-hide-details-mode' hides symbolic link targets."
|
||||
:type 'boolean
|
||||
:version "24.4"
|
||||
:group 'dired)
|
||||
|
||||
(defcustom dired-hide-details-hide-information-lines t
|
||||
"Non-nil means hide lines other than header and file/dir lines."
|
||||
:type 'boolean
|
||||
:version "24.4"
|
||||
:group 'dired)
|
||||
|
||||
;; Internal variables
|
||||
|
||||
(defvar dired-marker-char ?* ; the answer is 42
|
||||
|
@ -1196,7 +1208,6 @@ see `dired-use-ls-dired' for more details.")
|
|||
;; Note: adjust dired-build-subdir-alist if you change this.
|
||||
(setq dir (replace-regexp-in-string "\\\\" "\\\\" dir nil t)
|
||||
dir (replace-regexp-in-string "\n" "\\n" dir nil t)))
|
||||
(dired-insert-set-properties opoint (point))
|
||||
;; If we used --dired and it worked, the lines are already indented.
|
||||
;; Otherwise, indent them.
|
||||
(unless (save-excursion
|
||||
|
@ -1205,18 +1216,21 @@ see `dired-use-ls-dired' for more details.")
|
|||
(let ((indent-tabs-mode nil))
|
||||
(indent-rigidly opoint (point) 2)))
|
||||
;; Insert text at the beginning to standardize things.
|
||||
(save-excursion
|
||||
(goto-char opoint)
|
||||
(if (and (or hdr wildcard)
|
||||
(not (and (looking-at "^ \\(.*\\):$")
|
||||
(file-name-absolute-p (match-string 1)))))
|
||||
(let ((content-point opoint))
|
||||
(save-excursion
|
||||
(goto-char opoint)
|
||||
(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 " " (directory-file-name (file-name-directory dir)) ":\n"))
|
||||
(when wildcard
|
||||
;; Insert "wildcard" line where "total" line would be for a full dir.
|
||||
(insert " wildcard " (file-name-nondirectory dir) "\n")))))
|
||||
(insert " " (directory-file-name (file-name-directory dir)) ":\n")
|
||||
(setq content-point (point)))
|
||||
(when wildcard
|
||||
;; Insert "wildcard" line where "total" line would be for a full dir.
|
||||
(insert " wildcard " (file-name-nondirectory dir) "\n")))
|
||||
(dired-insert-set-properties content-point (point)))))
|
||||
|
||||
(defun dired-insert-set-properties (beg end)
|
||||
"Add various text properties to the lines in the region."
|
||||
|
@ -1224,15 +1238,24 @@ see `dired-use-ls-dired' for more details.")
|
|||
(goto-char beg)
|
||||
(while (< (point) end)
|
||||
(condition-case nil
|
||||
(if (dired-move-to-filename)
|
||||
(add-text-properties
|
||||
(point)
|
||||
(save-excursion
|
||||
(dired-move-to-end-of-filename)
|
||||
(point))
|
||||
'(mouse-face highlight
|
||||
dired-filename t
|
||||
help-echo "mouse-2: visit this file in other window")))
|
||||
(if (not (dired-move-to-filename))
|
||||
(put-text-property (line-beginning-position)
|
||||
(1+ (line-end-position))
|
||||
'invisible 'dired-hide-details-information)
|
||||
(put-text-property (+ (line-beginning-position) 1) (1- (point))
|
||||
'invisible 'dired-hide-details-detail)
|
||||
(add-text-properties
|
||||
(point)
|
||||
(progn
|
||||
(dired-move-to-end-of-filename)
|
||||
(point))
|
||||
'(mouse-face
|
||||
highlight
|
||||
dired-filename t
|
||||
help-echo "mouse-2: visit this file in other window"))
|
||||
(when (< (+ (point) 4) (line-end-position))
|
||||
(put-text-property (+ (point) 4) (line-end-position)
|
||||
'invisible 'dired-hide-details-link)))
|
||||
(error nil))
|
||||
(forward-line 1))))
|
||||
|
||||
|
@ -1496,6 +1519,7 @@ Do so according to the former subdir alist OLD-SUBDIR-ALIST."
|
|||
;; hiding
|
||||
(define-key map "$" 'dired-hide-subdir)
|
||||
(define-key map "\M-$" 'dired-hide-all)
|
||||
(define-key map "(" 'dired-hide-details-mode)
|
||||
;; isearch
|
||||
(define-key map (kbd "M-s a C-s") 'dired-do-isearch)
|
||||
(define-key map (kbd "M-s a M-C-s") 'dired-do-isearch-regexp)
|
||||
|
@ -1586,6 +1610,10 @@ Do so according to the former subdir alist OLD-SUBDIR-ALIST."
|
|||
'(menu-item "Toggle Image Thumbnails in This Buffer" image-dired-dired-toggle-marked-thumbs
|
||||
:help "Add or remove image thumbnails in front of marked file names"))
|
||||
|
||||
(define-key map [menu-bar immediate hide-details]
|
||||
'(menu-item "Hide Details" dired-hide-details-mode
|
||||
:help "Hide details in buffer"
|
||||
:button (:toggle . dired-hide-details-mode)))
|
||||
(define-key map [menu-bar immediate revert-buffer]
|
||||
'(menu-item "Refresh" revert-buffer
|
||||
:help "Update contents of shown directories"))
|
||||
|
@ -1914,6 +1942,9 @@ Keybindings:
|
|||
selective-display t ; for subdirectory hiding
|
||||
mode-line-buffer-identification
|
||||
(propertized-buffer-identification "%17b"))
|
||||
;; Ignore dired-hide-details-* value of invisible text property by default.
|
||||
(when (eq buffer-invisibility-spec t)
|
||||
(setq buffer-invisibility-spec (list t)))
|
||||
(set (make-local-variable 'revert-buffer-function)
|
||||
(function dired-revert))
|
||||
(set (make-local-variable 'buffer-stale-function)
|
||||
|
@ -1978,15 +2009,20 @@ Otherwise, call `toggle-read-only'."
|
|||
"Move down lines then position at filename.
|
||||
Optional prefix ARG says how many lines to move; default is one line."
|
||||
(interactive "p")
|
||||
(forward-line arg)
|
||||
(let ((line-move-visual)
|
||||
(goal-column))
|
||||
(line-move arg t))
|
||||
;; We never want to move point into an invisible line.
|
||||
(while (and (invisible-p (point))
|
||||
(not (if (and arg (< arg 0)) (bobp) (eobp))))
|
||||
(forward-char (if (and arg (< arg 0)) -1 1)))
|
||||
(dired-move-to-filename))
|
||||
|
||||
(defun dired-previous-line (arg)
|
||||
"Move up lines then position at filename.
|
||||
Optional prefix ARG says how many lines to move; default is one line."
|
||||
(interactive "p")
|
||||
(forward-line (- arg))
|
||||
(dired-move-to-filename))
|
||||
(dired-next-line (- (or arg 1))))
|
||||
|
||||
(defun dired-next-dirline (arg &optional opoint)
|
||||
"Goto ARG'th next directory file line."
|
||||
|
@ -2230,6 +2266,40 @@ unchanged."
|
|||
(substring file (match-end 0))
|
||||
file))
|
||||
|
||||
;;; Minor mode for hiding details
|
||||
;;;###autoload
|
||||
(define-minor-mode dired-hide-details-mode
|
||||
"Hide details in `dired-mode'."
|
||||
:group 'dired
|
||||
(unless (derived-mode-p 'dired-mode)
|
||||
(error "Not a Dired buffer"))
|
||||
(dired-hide-details-update-invisibility-spec)
|
||||
(if dired-hide-details-mode
|
||||
(add-hook 'wdired-mode-hook
|
||||
'dired-hide-details-update-invisibility-spec
|
||||
nil
|
||||
t)
|
||||
(remove-hook 'wdired-mode-hook
|
||||
'dired-hide-details-update-invisibility-spec
|
||||
t)))
|
||||
|
||||
(defun dired-hide-details-update-invisibility-spec ()
|
||||
(funcall (if dired-hide-details-mode
|
||||
'add-to-invisibility-spec
|
||||
'remove-from-invisibility-spec)
|
||||
'dired-hide-details-detail)
|
||||
(funcall (if (and dired-hide-details-mode
|
||||
dired-hide-details-hide-information-lines)
|
||||
'add-to-invisibility-spec
|
||||
'remove-from-invisibility-spec)
|
||||
'dired-hide-details-information)
|
||||
(funcall (if (and dired-hide-details-mode
|
||||
dired-hide-details-hide-symlink-targets
|
||||
(not (derived-mode-p 'wdired-mode)))
|
||||
'add-to-invisibility-spec
|
||||
'remove-from-invisibility-spec)
|
||||
'dired-hide-details-link))
|
||||
|
||||
;;; Functions for finding the file name in a dired buffer line.
|
||||
|
||||
(defvar dired-permission-flags-regexp
|
||||
|
|
|
@ -210,13 +210,15 @@ use in place of \"-ls\" as the final argument."
|
|||
(insert " " dir ":\n")
|
||||
;; Make second line a ``find'' line in analogy to the ``total'' or
|
||||
;; ``wildcard'' line.
|
||||
(insert " " args "\n")
|
||||
(let ((point (point)))
|
||||
(insert " " args "\n")
|
||||
(dired-insert-set-properties point (point)))
|
||||
(setq buffer-read-only t)
|
||||
(let ((proc (get-buffer-process (current-buffer))))
|
||||
(set-process-filter proc (function find-dired-filter))
|
||||
(set-process-sentinel proc (function find-dired-sentinel))
|
||||
;; Initialize the process marker; it is used by the filter.
|
||||
(move-marker (process-mark proc) 1 (current-buffer)))
|
||||
(move-marker (process-mark proc) (point) (current-buffer)))
|
||||
(setq mode-line-process '(":%s"))))
|
||||
|
||||
(defun kill-find ()
|
||||
|
@ -337,10 +339,11 @@ use in place of \"-ls\" as the final argument."
|
|||
(let ((buffer-read-only nil))
|
||||
(save-excursion
|
||||
(goto-char (point-max))
|
||||
(insert "\n find " state)
|
||||
(forward-char -1) ;Back up before \n at end of STATE.
|
||||
(insert " at " (substring (current-time-string) 0 19))
|
||||
(forward-char 1)
|
||||
(let ((point (point)))
|
||||
(insert "\n find " state)
|
||||
(forward-char -1) ;Back up before \n at end of STATE.
|
||||
(insert " at " (substring (current-time-string) 0 19))
|
||||
(dired-insert-set-properties point (point)))
|
||||
(setq mode-line-process
|
||||
(concat ":"
|
||||
(symbol-name (process-status proc))))
|
||||
|
|
|
@ -496,6 +496,7 @@ do not work in subdirectories.
|
|||
(setq revert-buffer-function 'locate-update)
|
||||
(set (make-local-variable 'page-delimiter) "\n\n")
|
||||
(run-mode-hooks 'locate-mode-hook))
|
||||
(put 'locate-mode 'derived-mode-parent 'dired-mode)
|
||||
|
||||
(defun locate-do-setup (search-string)
|
||||
(goto-char (point-min))
|
||||
|
|
Loading…
Add table
Reference in a new issue