[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/disk-usage 342d381 18/48: Add recursive listings
From: |
Stefan Monnier |
Subject: |
[elpa] externals/disk-usage 342d381 18/48: Add recursive listings |
Date: |
Tue, 19 Feb 2019 08:00:00 -0500 (EST) |
branch: externals/disk-usage
commit 342d3814b5c9a339bf6da311a14da185e51f38ee
Author: Pierre Neidhardt <address@hidden>
Commit: Pierre Neidhardt <address@hidden>
Add recursive listings
---
disk-usage.el | 38 +++++++++++++++++++++++++++++++++++---
1 file changed, 35 insertions(+), 3 deletions(-)
diff --git a/disk-usage.el b/disk-usage.el
index 327ddc6..80a89a2 100644
--- a/disk-usage.el
+++ b/disk-usage.el
@@ -79,6 +79,7 @@
(define-key map "e" #'disk-usage-eshell-at-point)
(define-key map "h" #'disk-usage-toggle-human-readable)
(define-key map "f" #'disk-usage-toggle-full-path)
+ (define-key map "R" #'disk-usage-toggle-recursive)
map)
"Local keymap for `disk-usage-mode' buffers.")
@@ -110,6 +111,39 @@
path))
(list (vector 0 directory)))))
+(defvar disk-usage--du-command "du")
+(defvar disk-usage--du-args "-sb")
+(defvar disk-usage--find-command "find")
+(defun disk-usage--list-recursively (directory)
+ "This is the equivalent of running the shell command
+$ find . -type f -exec du -sb {} +"
+ (setq directory (or directory default-directory))
+ (mapcar (lambda (s)
+ (let ((pair (split-string s "\t")))
+ (vector (string-to-number (cl-first pair)) (cadr pair))))
+ (split-string (with-temp-buffer
+ (call-process "find" nil t nil
+ directory
+ "-type" "f"
+ "-exec" disk-usage--du-command
disk-usage--du-args "{}" "+")
+ (buffer-string))
+ "\n" 'omit-nulls)))
+
+(defcustom disk-usage-list-function #'disk-usage--list-recursively
+ "Function that returns a list of [SIZE FILE] vectors.
+It takes the directory to scan as argument."
+ :group 'disk-usage
+ :type '(choice (function :tag "Hierarchical" disk-usage--list)
+ (function :tag "Flat (recursive)"
disk-usage--list-recursively)))
+
+(defun disk-usage-toggle-recursive ()
+ "Toggle between hierarchical and flat view."
+ (interactive)
+ (if (eq disk-usage-list-function #'disk-usage--list)
+ (setq disk-usage-list-function #'disk-usage--list-recursively)
+ (setq disk-usage-list-function #'disk-usage--list))
+ (tabulated-list-revert))
+
(defun disk-usage--total (listing)
(aref
(cl-reduce (lambda (f1 f2)
@@ -130,8 +164,6 @@
This is slow but does not require any external process."
(disk-usage--total (disk-usage--list path)))
-(defvar disk-usage--du-command "du")
-(defvar disk-usage--du-args "-sb")
(defun disk-usage--directory-size-with-du (path)
"See `disk-usage--directory-size-function'."
(string-to-number
@@ -175,7 +207,7 @@ Takes a number and returns a string.
(defun disk-usage--refresh (&optional directory)
(setq directory (or directory default-directory))
;; TODO: Set tabulated-list-entries to a function?
- (let ((listing (disk-usage--list directory)))
+ (let ((listing (funcall disk-usage-list-function directory)))
(disk-usage--set-format (disk-usage--total listing))
(tabulated-list-init-header)
(setq tabulated-list-entries
- [elpa] externals/disk-usage 2d6fe3c 08/48: Resolve directory statically in button action, (continued)
- [elpa] externals/disk-usage 2d6fe3c 08/48: Resolve directory statically in button action, Stefan Monnier, 2019/02/19
- [elpa] externals/disk-usage 5998d42 41/48: Version 1.0.0, Stefan Monnier, 2019/02/19
- [elpa] externals/disk-usage 21b5749 38/48: Add disk-usage-files, Stefan Monnier, 2019/02/19
- [elpa] externals/disk-usage e44979a 45/48: Version 1.1.0, Stefan Monnier, 2019/02/19
- [elpa] externals/disk-usage 696dd5c2 17/48: Fix free references, Stefan Monnier, 2019/02/19
- [elpa] externals/disk-usage c55d478 34/48: Document modes and prefix argument, Stefan Monnier, 2019/02/19
- [elpa] externals/disk-usage 3af5aa8 25/48: Reset hash table properly, Stefan Monnier, 2019/02/19
- [elpa] externals/disk-usage 01561b5 30/48: Implement marking and deletion, Stefan Monnier, 2019/02/19
- [elpa] externals/disk-usage ae7ba9c 39/48: Fix missing "s" in type-info-names, Stefan Monnier, 2019/02/19
- [elpa] externals/disk-usage d8d1643 35/48: Document file deletion, Stefan Monnier, 2019/02/19
- [elpa] externals/disk-usage 342d381 18/48: Add recursive listings,
Stefan Monnier <=
- [elpa] externals/disk-usage 1806ea2 46/48: Support region and numeric arg when marking, Stefan Monnier, 2019/02/19
- [elpa] externals/disk-usage f3c64a1 43/48: Prompt whether deleting or trashing and only revert if proceeding, Stefan Monnier, 2019/02/19
- [elpa] externals/disk-usage 7e0705e 47/48: Display percentage in disk-usage, Stefan Monnier, 2019/02/19
- [elpa] externals/disk-usage 745dd7e 01/48: Init, Stefan Monnier, 2019/02/19
- [elpa] externals/disk-usage f89b69d 48/48: Display children in disk-usage, Stefan Monnier, 2019/02/19