mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-28 07:45:00 +00:00
Improve how dired-mark-sexp interprets file sizes in non-C locales
* lisp/dired-x.el (dired-x--string-to-number): Try to understand localised numbers (with "." separators or the like) (bug#23373).
This commit is contained in:
parent
20124d78e7
commit
52b2ffd83b
@ -1265,13 +1265,21 @@ sure that a trailing letter in STR is one of BKkMGTPEZY."
|
||||
(let* ((val (string-to-number str))
|
||||
(u (unless (zerop val)
|
||||
(aref str (1- (length str))))))
|
||||
(when (and u (> u ?9))
|
||||
(when (= u ?k)
|
||||
(setq u ?K))
|
||||
(let ((units '(?B ?K ?M ?G ?T ?P ?E ?Z ?Y)))
|
||||
(while (and units (/= (pop units) u))
|
||||
(setq val (* 1024.0 val)))))
|
||||
val))
|
||||
;; If we don't have a unit at the end, but we have some
|
||||
;; non-numeric strings in the string, then the string may be
|
||||
;; something like "4.134" or "4,134" meant to represent 4134
|
||||
;; (seen in some locales).
|
||||
(if (and u
|
||||
(<= ?0 u ?9)
|
||||
(string-match-p "[^0-9]" str))
|
||||
(string-to-number (replace-regexp-in-string "[^0-9]+" "" str))
|
||||
(when (and u (> u ?9))
|
||||
(when (= u ?k)
|
||||
(setq u ?K))
|
||||
(let ((units '(?B ?K ?M ?G ?T ?P ?E ?Z ?Y)))
|
||||
(while (and units (/= (pop units) u))
|
||||
(setq val (* 1024.0 val)))))
|
||||
val)))
|
||||
|
||||
(defun dired-mark-sexp (predicate &optional unflag-p)
|
||||
"Mark files for which PREDICATE returns non-nil.
|
||||
|
@ -60,5 +60,12 @@
|
||||
(should (equal (dired-guess-default '("/tmp/foo.png" "/tmp/foo.txt"))
|
||||
nil))))
|
||||
|
||||
(ert-deftest dired-x--string-to-number ()
|
||||
(should (= (dired-x--string-to-number "2.4K") 2457.6))
|
||||
(should (= (dired-x--string-to-number "2400") 2400))
|
||||
(should (= (dired-x--string-to-number "123.4M") 129394278.4))
|
||||
(should (= (dired-x--string-to-number "123.40000M") 129394278.4))
|
||||
(should (= (dired-x--string-to-number "4.134") 4134)))
|
||||
|
||||
(provide 'dired-x-tests)
|
||||
;;; dired-x-tests.el ends here
|
||||
|
Loading…
Reference in New Issue
Block a user