]> git.eshelyaron.com Git - emacs.git/commitdiff
Clean up file-size-function
authorMattias Engdegård <mattiase@acm.org>
Mon, 22 Jul 2019 15:10:37 +0000 (17:10 +0200)
committerMattias Engdegård <mattiase@acm.org>
Fri, 2 Aug 2019 10:38:44 +0000 (12:38 +0200)
It is now called `byte-count-to-string-function', and used instead of
calling `file-size-human-readable' directly where appropriate.

* lisp/files.el (file-size-human-readable-iec): New.
(file-size-function): Rename to byte-count-to-string-function.  Better
default value.  Eliminate lambda.  Better default for custom choice.
Put in group `files'.  More descriptive doc string.  Move.
(out-of-memory-warning-percentage, warn-maybe-out-of-memory)
(get-free-disk-space):
* lisp/dired.el (dired-number-of-marked-files):
* lisp/url/url-http.el (url-http-simple-after-change-function)
(url-http-content-length-after-change-function):
Use byte-count-to-string-function.
* test/lisp/files-test.el (files-test-file-size-human-readable):
Test file-size-human-readable-iec.

etc/NEWS
lisp/dired.el
lisp/files.el
lisp/url/url-http.el
test/lisp/files-tests.el

index 486e677539db0f50cf6868c96bf9e692f62eb905..9be10b4e7975528f271fb90e1fdba09805298edd 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -405,7 +405,8 @@ mode they are described in the manual "(emacs) Display".
 ** New variable 'xref-file-name-display' controls the display of file
 names in xref buffers.
 
-** New variable 'file-size-function' controls how file sizes are displayed.
+** New customizable variable 'byte-count-to-string-function'.
+It is used for displaying file sizes and disk space in some cases.
 
 +++
 ** Emacs now interprets RGB triplets like HTML, SVG, and CSS do.
index 331e95a6cc4003ad000fc97ed716ad9688cb231f..c31176972fcd4a9e1d7fd7ff853a436cf671264c 100644 (file)
@@ -3642,12 +3642,12 @@ object files--just `.o' will mark more than you might think."
                         sum (file-attribute-size (file-attributes file)))))
     (if (zerop nmarked)
         (message "No marked files"))
-    (message "%d marked file%s (%sB total size)"
+    (message "%d marked file%s (%s total size)"
              nmarked
              (if (= nmarked 1)
                  ""
                "s")
-             (file-size-human-readable size))))
+             (funcall byte-count-to-string-function size))))
 
 (defun dired-mark-files-containing-regexp (regexp &optional marker-char)
   "Mark all files with contents containing REGEXP for use in later commands.
index 184421f54f2d84ac2c3895541e28d40c19718875..009f52a3c68b6f3ed86ac5ec5f065c6d8a1e4f79 100644 (file)
@@ -1426,6 +1426,21 @@ in all cases, since that is the standard symbol for byte."
               (if (string= prefixed-unit "") "" (or space ""))
               prefixed-unit))))
 
+(defun file-size-human-readable-iec (size)
+  "Human-readable string for SIZE bytes, using IEC prefixes."
+  (file-size-human-readable size 'iec " "))
+
+(defcustom byte-count-to-string-function #'file-size-human-readable-iec
+  "Function that turns a number of bytes into a human-readable string.
+It is for use when displaying file sizes and disk space where other
+constraints do not force a specific format."
+  :type '(radio
+          (function-item file-size-human-readable-iec)
+          (function-item file-size-human-readable)
+          (function :tag "Custom function" :value number-to-string))
+  :group 'files
+  :version "27.1")
+
 (defcustom mounted-file-systems
   (if (memq system-type '(windows-nt cygwin))
       "^//[^/]+/"
@@ -2093,7 +2108,7 @@ think it does, because \"free\" is pretty hard to define in practice."
 (defun files--ask-user-about-large-file (size op-type filename offer-raw)
   (let ((prompt (format "File %s is large (%s), really %s?"
                        (file-name-nondirectory filename)
-                       (file-size-human-readable size 'iec " ") op-type)))
+                       (funcall byte-count-to-string-function size) op-type)))
     (if (not offer-raw)
         (if (y-or-n-p prompt) nil 'abort)
       (let* ((use-dialog (and (display-popup-menus-p)
@@ -2145,10 +2160,10 @@ returns nil or exits non-locally."
 exceeds the %S%% of currently available free memory (%s).
 If that fails, try to open it with `find-file-literally'
 \(but note that some characters might be displayed incorrectly)."
-            (file-size-human-readable size 'iec " ")
+            (funcall byte-count-to-string-function size)
             out-of-memory-warning-percentage
-            (file-size-human-readable (* total-free-memory 1024)
-                                       'iec " "))))))))
+            (funcall byte-count-to-string-function
+                      (* total-free-memory 1024)))))))))
 
 (defun files--message (format &rest args)
   "Like `message', except sometimes don't print to minibuffer.
@@ -6705,22 +6720,13 @@ This variable is obsolete; Emacs no longer uses it."
                        "ignored, as Emacs uses `file-system-info' instead"
                        "27.1")
 
-(defcustom file-size-function #'file-size-human-readable
-  "Function that transforms the number of bytes into a human-readable string."
-  :type `(radio
-          (function-item :tag "Default" file-size-human-readable)
-          (function-item :tag "IEC"
-                         ,(lambda (size) (file-size-human-readable size 'iec " ")))
-          (function :tag "Custom function"))
-  :version "27.1")
-
 (defun get-free-disk-space (dir)
   "String describing the amount of free space on DIR's file system.
 If DIR's free space cannot be obtained, this function returns nil."
   (save-match-data
     (let ((avail (nth 2 (file-system-info dir))))
       (if avail
-          (funcall file-size-function avail)))))
+          (funcall byte-count-to-string-function avail)))))
 
 ;; The following expression replaces `dired-move-to-filename-regexp'.
 (defvar directory-listing-before-filename-regexp
index 838f0a30c1f3e731c459a811b7ea30592290b6ff..9b690778fc0f9759f8ed8413754fafc91c30d1cb 100644 (file)
@@ -1025,7 +1025,7 @@ should be shown to the user."
   ;; Function used when we do NOT know how long the document is going to be
   ;; Just _very_ simple 'downloaded %d' type of info.
   (url-lazy-message "Reading %s..."
-                    (file-size-human-readable (buffer-size) 'iec " ")))
+                    (funcall byte-count-to-string-function (buffer-size))))
 
 (defun url-http-content-length-after-change-function (_st nd _length)
   "Function used when we DO know how long the document is going to be.
@@ -1038,16 +1038,16 @@ the callback to be triggered."
        (url-percentage (- nd url-http-end-of-headers)
                       url-http-content-length)
        url-http-content-type
-       (file-size-human-readable (- nd url-http-end-of-headers) 'iec " ")
-       (file-size-human-readable url-http-content-length 'iec " ")
+       (funcall byte-count-to-string-function (- nd url-http-end-of-headers))
+       (funcall byte-count-to-string-function url-http-content-length)
        (url-percentage (- nd url-http-end-of-headers)
                       url-http-content-length))
     (url-display-percentage
      "Reading... %s of %s (%d%%)"
      (url-percentage (- nd url-http-end-of-headers)
                     url-http-content-length)
-     (file-size-human-readable (- nd url-http-end-of-headers) 'iec " ")
-     (file-size-human-readable url-http-content-length 'iec " ")
+     (funcall byte-count-to-string-function (- nd url-http-end-of-headers))
+     (funcall byte-count-to-string-function url-http-content-length)
      (url-percentage (- nd url-http-end-of-headers)
                     url-http-content-length)))
 
index df2c3f47ae02b31128ed09460688e386404e05ec..ed23f7675ccf1d8e3fe63866e78fb3b172045ff0 100644 (file)
@@ -1280,7 +1280,12 @@ renaming only, rather than modified in-place."
   (should (equal (file-size-human-readable 4294967296 'iec " ") "4 GiB"))
   (should (equal (file-size-human-readable 10000 nil " " "bit") "9.8 kbit"))
   (should (equal (file-size-human-readable 10000 'si " " "bit") "10 kbit"))
-  (should (equal (file-size-human-readable 10000 'iec " " "bit") "9.8 Kibit")))
+  (should (equal (file-size-human-readable 10000 'iec " " "bit") "9.8 Kibit"))
+
+  (should (equal (file-size-human-readable-iec 0) "0 B"))
+  (should (equal (file-size-human-readable-iec 1) "1 B"))
+  (should (equal (file-size-human-readable-iec 9621) "9.4 KiB"))
+  (should (equal (file-size-human-readable-iec 72528034765) "67.5 GiB")))
 
 (ert-deftest files-test-magic-mode-alist-re-baseline ()
   "Test magic-mode-alist with RE, expected behaviour for match."