Mercurial > emacs
changeset 42238:e79842fc9855
(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.
author | Eli Zaretskii <eliz@gnu.org> |
---|---|
date | Fri, 21 Dec 2001 15:20:42 +0000 |
parents | 0ec3fdf1c45e |
children | 1e736b882b4f |
files | lisp/files.el |
diffstat | 1 files changed, 46 insertions(+), 33 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/files.el Fri Dec 21 14:12:30 2001 +0000 +++ b/lisp/files.el Fri Dec 21 15:20:42 2001 +0000 @@ -3561,7 +3561,10 @@ 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 @@ :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 @@ (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)