summaryrefslogtreecommitdiff
path: root/lisp/files.el
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2001-12-21 15:20:42 +0000
committerEli Zaretskii <eliz@gnu.org>2001-12-21 15:20:42 +0000
commitb81f4cd1d1b998dea27b4bb289d8d736713b849c (patch)
treecb4d16bdf8d6addefbaaac655a7ca821ca3a2433 /lisp/files.el
parent7c19023a8cd645d406e37a4b785649d6387fc6e3 (diff)
downloademacs-b81f4cd1d1b998dea27b4bb289d8d736713b849c.tar.gz
(directory-free-space-program): Mention
file-system-info in the doc string. (get-free-disk-space): New function; code moved from insert-directory. (insert-directory): Call get-free-disk-space to get the amount of free space.
Diffstat (limited to 'lisp/files.el')
-rw-r--r--lisp/files.el79
1 files changed, 46 insertions, 33 deletions
diff --git a/lisp/files.el b/lisp/files.el
index 8c89bc8595c..7e0f24268e7 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -3561,7 +3561,10 @@ We assume the output has the format of `df'.
The value of this variable must be just a command name or file name;
if you want to specify options, use `directory-free-space-args'.
-A value of nil disables this feature."
+A value of nil disables this feature.
+
+If the function `file-system-info' is defined, it is always used in
+preference to the program given by this variable."
:type '(choice (string :tag "Program") (const :tag "None" nil))
:group 'dired)
@@ -3570,6 +3573,42 @@ A value of nil disables this feature."
:type 'string
:group 'dired)
+(defun get-free-disk-space (dir)
+ "Return the mount of free space on directory DIR's file system.
+The result is a string that gives the number of free 1KB blocks,
+or nil if the system call or the program which retrieve the infornmation
+fail.
+
+This function calls `file-system-info' if it is available, or invokes the
+program specified by `directory-free-space-program' if that is non-nil."
+ ;; Try to find the number of free blocks. Non-Posix systems don't
+ ;; always have df, but might have an equivalent system call.
+ (if (fboundp 'file-system-info)
+ (let ((fsinfo (file-system-info dir)))
+ (if fsinfo
+ (format "%.0f" (/ (nth 2 fsinfo) 1024))))
+ (save-match-data
+ (with-temp-buffer
+ (when (and directory-free-space-program
+ (zerop (call-process directory-free-space-program
+ nil t nil
+ directory-free-space-args
+ dir)))
+ ;; Usual format is a header line followed by a line of
+ ;; numbers.
+ (goto-char (point-min))
+ (forward-line 1)
+ (if (not (eobp))
+ (progn
+ ;; Move to the end of the "available blocks" number.
+ (skip-chars-forward "^ \t")
+ (forward-word 3)
+ ;; Copy it into AVAILABLE.
+ (let ((end (point)))
+ (forward-word -1)
+ (buffer-substring (point) end)))))))))
+
+
;; insert-directory
;; - must insert _exactly_one_line_ describing FILE if WILDCARD and
;; FULL-DIRECTORY-P is nil.
@@ -3689,38 +3728,12 @@ If WILDCARD, it also runs the shell specified by `shell-file-name'."
(goto-char (point-min))
;; First find the line to put it on.
(when (re-search-forward "^total" nil t)
- ;; Try to find the number of free blocks.
- ;; Non-Posix systems don't always have df,
- ;; but might have an equivalent system call.
- (if (fboundp 'file-system-info)
- (let ((fsinfo (file-system-info ".")))
- (if fsinfo
- (setq available (format "%.0f" (/ (nth 2 fsinfo) 1024)))))
- (save-match-data
- (with-temp-buffer
- (when (and directory-free-space-program
- (zerop (call-process directory-free-space-program
- nil t nil
- directory-free-space-args
- ".")))
- ;; Usual format is a header line
- ;; followed by a line of numbers.
- (goto-char (point-min))
- (forward-line 1)
- (if (not (eobp))
- (progn
- ;; Move to the end of the "available blocks" number.
- (skip-chars-forward "^ \t")
- (forward-word 3)
- ;; Copy it into AVAILABLE.
- (let ((end (point)))
- (forward-word -1)
- (setq available (buffer-substring (point) end)))))))))
- (when available
- ;; Replace "total" with "used", to avoid confusion.
- (replace-match "used")
- (end-of-line)
- (insert " available " available)))))))))
+ (let ((available (get-free-disk-space ".")))
+ (when available
+ ;; Replace "total" with "used", to avoid confusion.
+ (replace-match "used")
+ (end-of-line)
+ (insert " available " available))))))))))
(defun insert-directory-safely (file switches
&optional wildcard full-directory-p)