123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749 |
- (defgroup ls-lisp nil
- "Emulate the ls program completely in Emacs Lisp."
- :version "21.1"
- :group 'dired)
- (defun ls-lisp-set-options ()
- "Reset the ls-lisp options that depend on `ls-lisp-emulation'."
- (mapc 'custom-reevaluate-setting
- '(ls-lisp-ignore-case ls-lisp-dirs-first ls-lisp-verbosity)))
- (defcustom ls-lisp-emulation
- (cond
- ((memq system-type '(hpux usg-unix-v irix berkeley-unix))
- 'UNIX))
-
- "Platform to emulate: GNU (default), MacOS, MS-Windows, UNIX.
- Corresponding value is one of: nil, `MacOS', `MS-Windows', `UNIX'.
- Set this to your preferred value; it need not match the actual platform
- you are using.
- This variable does not affect the behavior of ls-lisp directly.
- Rather, it controls the default values for some variables that do:
- `ls-lisp-ignore-case', `ls-lisp-dirs-first', and `ls-lisp-verbosity'.
- If you change this variable directly (without using customize)
- after loading `ls-lisp', you should use `ls-lisp-set-options' to
- update the dependent variables."
- :type '(choice (const :tag "GNU" nil)
- (const MacOS)
- (const MS-Windows)
- (const UNIX))
- :initialize 'custom-initialize-default
- :set (lambda (symbol value)
- (unless (equal value (eval symbol))
- (custom-set-default symbol value)
- (ls-lisp-set-options)))
- :group 'ls-lisp)
- (define-obsolete-variable-alias 'ls-lisp-dired-ignore-case
- 'ls-lisp-ignore-case "21.1")
- (defcustom ls-lisp-ignore-case
- (memq ls-lisp-emulation '(MS-Windows MacOS))
- "Non-nil causes ls-lisp alphabetic sorting to ignore case."
- :set-after '(ls-lisp-emulation)
- :type 'boolean
- :group 'ls-lisp)
- (defcustom ls-lisp-dirs-first (eq ls-lisp-emulation 'MS-Windows)
- "Non-nil causes ls-lisp to sort directories first in any ordering.
- \(Or last if it is reversed.) Follows Microsoft Windows Explorer."
-
- :set-after '(ls-lisp-emulation)
- :type 'boolean
- :group 'ls-lisp)
- (defcustom ls-lisp-verbosity
- (cond ((eq ls-lisp-emulation 'MacOS) nil)
- ((eq ls-lisp-emulation 'MS-Windows)
- (if (and (fboundp 'w32-using-nt) (w32-using-nt))
- '(links)))
- ((eq ls-lisp-emulation 'UNIX) '(links uid))
- (t '(links uid gid)))
- "A list of optional file attributes that ls-lisp should display.
- It should contain none or more of the symbols: links, uid, gid.
- A value of nil (or an empty list) means display none of them.
- Concepts come from UNIX: `links' means count of names associated with
- the file; `uid' means user (owner) identifier; `gid' means group
- identifier.
- If emulation is MacOS then default is nil;
- if emulation is MS-Windows then default is `(links)' if platform is
- Windows NT/2K, nil otherwise;
- if emulation is UNIX then default is `(links uid)';
- if emulation is GNU then default is `(links uid gid)'."
- :set-after '(ls-lisp-emulation)
-
- :type '(set (const :tag "Show Link Count" links)
- (const :tag "Show User" uid)
- (const :tag "Show Group" gid))
- :group 'ls-lisp)
- (defcustom ls-lisp-use-insert-directory-program
- (not (memq system-type '(ms-dos windows-nt)))
- "Non-nil causes ls-lisp to revert back to using `insert-directory-program'.
- This is useful on platforms where ls-lisp is dumped into Emacs, such as
- Microsoft Windows, but you would still like to use a program to list
- the contents of a directory."
- :type 'boolean
- :group 'ls-lisp)
- (defcustom ls-lisp-support-shell-wildcards t
- "Non-nil means ls-lisp treats file patterns as shell wildcards.
- Otherwise they are treated as Emacs regexps (for backward compatibility)."
- :type 'boolean
- :group 'ls-lisp)
- (defcustom ls-lisp-format-time-list
- '("%b %e %H:%M"
- "%b %e %Y")
- "List of `format-time-string' specs to display file time stamps.
- These specs are used ONLY if a valid locale can not be determined.
- If `ls-lisp-use-localized-time-format' is non-nil, these specs are used
- regardless of whether the locale can be determined.
- Syntax: (EARLY-TIME-FORMAT OLD-TIME-FORMAT)
- The EARLY-TIME-FORMAT is used if file has been modified within the
- current year. The OLD-TIME-FORMAT is used for older files. To use ISO
- 8601 dates, you could set:
- \(setq ls-lisp-format-time-list
- '(\"%Y-%m-%d %H:%M\"
- \"%Y-%m-%d \"))"
- :type '(list (string :tag "Early time format")
- (string :tag "Old time format"))
- :group 'ls-lisp)
- (defcustom ls-lisp-use-localized-time-format nil
- "Non-nil means to always use `ls-lisp-format-time-list' for time stamps.
- This applies even if a valid locale is specified.
- WARNING: Using localized date/time format might cause Dired columns
- to fail to line up, e.g. if month names are not all of the same length."
- :type 'boolean
- :group 'ls-lisp)
- (defvar original-insert-directory nil
- "This holds the original function definition of `insert-directory'.")
- (defvar ls-lisp-uid-d-fmt "-%d"
- "Format to display integer UIDs.")
- (defvar ls-lisp-uid-s-fmt "-%s"
- "Format to display user names.")
- (defvar ls-lisp-gid-d-fmt "-%d"
- "Format to display integer GIDs.")
- (defvar ls-lisp-gid-s-fmt "-%s"
- "Format to display user group names.")
- (defvar ls-lisp-filesize-d-fmt "%d"
- "Format to display integer file sizes.")
- (defvar ls-lisp-filesize-f-fmt "%.0f"
- "Format to display float file sizes.")
- (or (featurep 'ls-lisp)
- (setq original-insert-directory (symbol-function 'insert-directory)))
- (defun insert-directory (file switches &optional wildcard full-directory-p)
- "Insert directory listing for FILE, formatted according to SWITCHES.
- Leaves point after the inserted text.
- SWITCHES may be a string of options, or a list of strings.
- Optional third arg WILDCARD means treat FILE as shell wildcard.
- Optional fourth arg FULL-DIRECTORY-P means file is a directory and
- switches do not contain `d', so that a full listing is expected.
- This version of the function comes from `ls-lisp.el'.
- If the value of `ls-lisp-use-insert-directory-program' is non-nil then
- it works exactly like the version from `files.el' and runs a directory
- listing program whose name is in the variable
- `insert-directory-program'; if also WILDCARD is non-nil then it runs
- the shell specified by `shell-file-name'. If the value of
- `ls-lisp-use-insert-directory-program' is nil then it runs a Lisp
- emulation.
- The Lisp emulation does not run any external programs or shells. It
- supports ordinary shell wildcards if `ls-lisp-support-shell-wildcards'
- is non-nil; otherwise, it interprets wildcards as regular expressions
- to match file names. It does not support all `ls' switches -- those
- that work are: A a B C c F G g h i n R r S s t U u X. The l switch
- is assumed to be always present and cannot be turned off."
- (if ls-lisp-use-insert-directory-program
- (funcall original-insert-directory
- file switches wildcard full-directory-p)
-
- (let ((handler (find-file-name-handler (expand-file-name file)
- 'insert-directory))
- (orig-file file)
- wildcard-regexp)
- (if handler
- (funcall handler 'insert-directory file switches
- wildcard full-directory-p)
-
- (if (string-match "--dired " switches)
- (setq switches (replace-match "" nil nil switches)))
-
- (setq switches (delete ?\ (delete ?- (append switches nil))))
-
-
-
- (if (and ls-lisp-support-shell-wildcards
- (string-match "[[?*]" file)
-
-
- (not (file-exists-p file)))
- (progn
- (or (not (eq (aref file (1- (length file))) ?/))
- (setq file (substring file 0 (1- (length file)))))
- (setq wildcard t)))
- (if wildcard
- (setq wildcard-regexp
- (if ls-lisp-support-shell-wildcards
- (wildcard-to-regexp (file-name-nondirectory file))
- (file-name-nondirectory file))
- file (file-name-directory file))
- (if (memq ?B switches) (setq wildcard-regexp "[^~]\\'")))
- (condition-case err
- (ls-lisp-insert-directory
- file switches (ls-lisp-time-index switches)
- wildcard-regexp full-directory-p)
- (invalid-regexp
-
-
- (if (equal (cadr err) "Unmatched [ or [^")
- (progn
- (setq wildcard-regexp (if (memq ?B switches) "[^~]\\'")
- file (file-relative-name orig-file))
- (ls-lisp-insert-directory
- file switches (ls-lisp-time-index switches)
- nil full-directory-p))
- (signal (car err) (cdr err)))))
-
- (save-excursion
- (goto-char (point-min))
-
- (when (re-search-forward "^total" nil t)
- (let ((available (get-free-disk-space ".")))
- (when available
-
- (replace-match "total used in directory")
- (end-of-line)
- (insert " available " available)))))))))
- (defun ls-lisp-insert-directory
- (file switches time-index wildcard-regexp full-directory-p)
- "Insert directory listing for FILE, formatted according to SWITCHES.
- Leaves point after the inserted text. This is an internal function
- optionally called by the `ls-lisp.el' version of `insert-directory'.
- It is called recursively if the -R switch is used.
- SWITCHES is a *list* of characters. TIME-INDEX is the time index into
- file-attributes according to SWITCHES. WILDCARD-REGEXP is nil or an *Emacs
- regexp*. FULL-DIRECTORY-P means file is a directory and SWITCHES does
- not contain `d', so that a full listing is expected."
- (if (or wildcard-regexp full-directory-p)
- (let* ((dir (file-name-as-directory file))
- (default-directory dir)
- (file-alist
- (directory-files-and-attributes dir nil wildcard-regexp t
- (if (memq ?n switches)
- 'integer
- 'string)))
- (sum 0)
- (max-uid-len 0)
- (max-gid-len 0)
- (max-file-size 0)
-
- total-line files elt short file-size attr
- fuid fgid uid-len gid-len)
- (setq file-alist (ls-lisp-sanitize file-alist))
- (cond ((memq ?A switches)
- (setq file-alist
- (ls-lisp-delete-matching "^\\.\\.?$" file-alist)))
- ((not (memq ?a switches))
-
- (setq file-alist
- (ls-lisp-delete-matching "^\\." file-alist))))
- (setq file-alist
- (ls-lisp-handle-switches file-alist switches))
- (if (memq ?C switches)
- (ls-lisp-column-format file-alist)
- (setq total-line (cons (point) (car-safe file-alist)))
-
-
-
- (dolist (elt file-alist)
- (setq attr (cdr elt)
- fuid (nth 2 attr)
- uid-len (if (stringp fuid) (string-width fuid)
- (length (format "%d" fuid)))
- fgid (nth 3 attr)
- gid-len (if (stringp fgid) (string-width fgid)
- (length (format "%d" fgid)))
- file-size (nth 7 attr))
- (if (> uid-len max-uid-len)
- (setq max-uid-len uid-len))
- (if (> gid-len max-gid-len)
- (setq max-gid-len gid-len))
- (if (> file-size max-file-size)
- (setq max-file-size file-size)))
- (setq ls-lisp-uid-d-fmt (format " %%-%dd" max-uid-len))
- (setq ls-lisp-uid-s-fmt (format " %%-%ds" max-uid-len))
- (setq ls-lisp-gid-d-fmt (format " %%-%dd" max-gid-len))
- (setq ls-lisp-gid-s-fmt (format " %%-%ds" max-gid-len))
- (setq ls-lisp-filesize-d-fmt
- (format " %%%dd"
- (if (memq ?s switches)
- (length (format "%.0f"
- (fceiling (/ max-file-size 1024.0))))
- (length (format "%.0f" max-file-size)))))
- (setq ls-lisp-filesize-f-fmt
- (format " %%%d.0f"
- (if (memq ?s switches)
- (length (format "%.0f"
- (fceiling (/ max-file-size 1024.0))))
- (length (format "%.0f" max-file-size)))))
- (setq files file-alist)
- (while files
- (setq elt (car files)
- files (cdr files)
- short (car elt)
- attr (cdr elt)
- file-size (nth 7 attr))
- (and attr
- (setq sum (+ file-size
-
-
- (if (or (< sum (- 134217727 file-size))
- (floatp sum)
- (floatp file-size))
- sum
- (float sum))))
- (insert (ls-lisp-format short attr file-size
- switches time-index))))
-
- (save-excursion
- (goto-char (car total-line))
- (or (cdr total-line)
-
-
- (insert "(No match)\n"))
- (insert (format "total %.0f\n" (fceiling (/ sum 1024.0))))))
- (if (memq ?R switches)
-
-
-
-
- (while file-alist
- (setq elt (car file-alist)
- file-alist (cdr file-alist))
- (when (and (eq (cadr elt) t)
-
-
-
- (not (string-match "\\`\\.\\.?/?\\'" (car elt))))
- (setq elt (expand-file-name (car elt) dir))
- (insert "\n" elt ":\n")
- (ls-lisp-insert-directory
- elt switches time-index wildcard-regexp full-directory-p)))))
-
-
-
- (if (file-name-absolute-p file) (setq file (expand-file-name file)))
- (if (eq (aref file (1- (length file))) ?/)
- (setq file (substring file 0 -1)))
- (let ((fattr (file-attributes file 'string)))
- (if fattr
- (insert (ls-lisp-format
- (if (memq ?F switches)
- (ls-lisp-classify-file file fattr)
- file)
- fattr (nth 7 fattr)
- switches time-index))
- (message "%s: doesn't exist or is inaccessible" file)
- (ding) (sit-for 2)))))
- (defun ls-lisp-sanitize (file-alist)
- "Sanitize the elements in FILE-ALIST.
- Fixes any elements in the alist for directory entries whose file
- attributes are nil (meaning that `file-attributes' failed for
- them). This is known to happen for some network shares, in
- particular for the \"..\" directory entry.
- If the \"..\" directory entry has nil attributes, the attributes
- are copied from the \".\" entry, if they are non-nil. Otherwise,
- the offending element is removed from the list, as are any
- elements for other directory entries with nil attributes."
- (if (and (null (cdr (assoc ".." file-alist)))
- (cdr (assoc "." file-alist)))
- (setcdr (assoc ".." file-alist) (cdr (assoc "." file-alist))))
- (rassq-delete-all nil file-alist))
- (defun ls-lisp-column-format (file-alist)
- "Insert the file names (only) in FILE-ALIST into the current buffer.
- Format in columns, sorted vertically, following GNU ls -C.
- Responds to the window width as ls should but may not!"
- (let (files fmt ncols collen (nfiles 0) (colwid 0))
-
-
- (let (file len)
- (while file-alist
- (setq nfiles (1+ nfiles)
- file (caar file-alist)
- files (cons file files)
- file-alist (cdr file-alist)
- len (length file))
- (if (> len colwid) (setq colwid len))))
- (setq files (nreverse files)
- colwid (+ 2 colwid)
- fmt (format "%%-%ds" colwid)
- ncols (/ (window-width) colwid)
- collen (/ nfiles ncols))
- (if (> nfiles (* collen ncols)) (setq collen (1+ collen)))
-
- (let ((i 0) j)
- (while (< i collen)
- (setq j i)
- (while (< j nfiles)
- (insert (format fmt (nth j files)))
- (setq j (+ j collen)))
-
-
- (delete-region (point) (progn (skip-chars-backward " \t") (point)))
- (insert ?\n)
- (setq i (1+ i))))))
- (defun ls-lisp-delete-matching (regexp list)
- "Delete all elements matching REGEXP from LIST, return new list."
-
- (let (result)
- (while list
- (or (string-match regexp (caar list))
- (setq result (cons (car list) result)))
- (setq list (cdr list)))
- result))
- (defsubst ls-lisp-string-lessp (s1 s2)
- "Return t if string S1 is less than string S2 in lexicographic order.
- Case is significant if `ls-lisp-ignore-case' is nil.
- Unibyte strings are converted to multibyte for comparison."
- (let ((u (compare-strings s1 0 nil s2 0 nil ls-lisp-ignore-case)))
- (and (numberp u) (< u 0))))
- (defun ls-lisp-handle-switches (file-alist switches)
- "Return new FILE-ALIST sorted according to SWITCHES.
- SWITCHES is a list of characters. Default sorting is alphabetic."
-
- (or (memq ?U switches)
-
- (condition-case err
- (setq file-alist
- (let (index)
-
- (sort (copy-sequence file-alist)
- (cond ((memq ?S switches)
- (lambda (x y)
-
-
- (< (nth 7 (cdr y))
- (nth 7 (cdr x)))))
- ((setq index (ls-lisp-time-index switches))
- (lambda (x y)
- (time-less-p (nth index (cdr y))
- (nth index (cdr x)))))
- ((memq ?X switches)
- (lambda (x y)
- (ls-lisp-string-lessp
- (ls-lisp-extension (car x))
- (ls-lisp-extension (car y)))))
- (t
- (lambda (x y)
- (ls-lisp-string-lessp (car x) (car y))))))))
- (error (message "Unsorted (ls-lisp sorting error) - %s"
- (error-message-string err))
- (ding) (sit-for 2))))
- (if (memq ?F switches)
- (setq file-alist (mapcar 'ls-lisp-classify file-alist)))
- (if ls-lisp-dirs-first
-
-
-
-
- (let (el dirs files)
- (while file-alist
- (if (or (eq (cadr (setq el (car file-alist))) t)
- (and (stringp (cadr el))
- (file-directory-p (cadr el))))
- (setq dirs (cons el dirs))
- (setq files (cons el files)))
- (setq file-alist (cdr file-alist)))
- (setq file-alist
- (if (memq ?U switches)
- (nconc dirs files)
- (nconc files dirs)
- ))))
-
-
-
- (if (eq (eq (not (memq ?U switches))
- (not (memq ?r switches)))
- ls-lisp-dirs-first)
- (nreverse file-alist)
- file-alist))
- (defun ls-lisp-classify-file (filename fattr)
- "Append a character to FILENAME indicating the file type.
- FATTR is the file attributes returned by `file-attributes' for the file.
- The file type indicators are `/' for directories, `@' for symbolic
- links, `|' for FIFOs, `=' for sockets, `*' for regular files that
- are executable, and nothing for other types of files."
- (let* ((type (car fattr))
- (modestr (nth 8 fattr))
- (typestr (substring modestr 0 1)))
- (cond
- (type
- (concat filename (if (eq type t) "/" "@")))
- ((string-match "x" modestr)
- (concat filename "*"))
- ((string= "p" typestr)
- (concat filename "|"))
- ((string= "s" typestr)
- (concat filename "="))
- (t filename))))
- (defun ls-lisp-classify (filedata)
- "Append a character to file name in FILEDATA indicating the file type.
- FILEDATA has the form (FILENAME . ATTRIBUTES), where ATTRIBUTES is the
- structure returned by `file-attributes' for that file.
- The file type indicators are `/' for directories, `@' for symbolic
- links, `|' for FIFOs, `=' for sockets, `*' for regular files that
- are executable, and nothing for other types of files."
- (let ((file-name (car filedata))
- (fattr (cdr filedata)))
- (setq file-name (propertize file-name 'dired-filename t))
- (cons (ls-lisp-classify-file file-name fattr) fattr)))
- (defun ls-lisp-extension (filename)
- "Return extension of FILENAME (ignoring any version extension)
- FOLLOWED by null and full filename, SOLELY for full alpha sort."
-
-
- (concat
- (let* ((i (length filename)) end)
- (if (= (aref filename (1- i)) ?.)
- "\0"
- (while (and (>= (setq i (1- i)) 0)
- (/= (aref filename i) ?.)))
- (if (< i 0) "\0\0"
- (if (/= (aref filename (1+ i)) ?~)
- (substring filename (1+ i))
-
- (setq end i)
- (while (and (>= (setq i (1- i)) 0)
- (/= (aref filename i) ?.)))
- (if (< i 0) "\0\0"
- (substring filename (1+ i) end))))
- )) "\0" filename))
- (defun ls-lisp-format (file-name file-attr file-size switches time-index)
- "Format one line of long ls output for file FILE-NAME.
- FILE-ATTR and FILE-SIZE give the file's attributes and size.
- SWITCHES and TIME-INDEX give the full switch list and time data."
- (let ((file-type (nth 0 file-attr))
-
-
- (drwxrwxrwx (nth 8 file-attr)))
- (concat (if (memq ?i switches)
- (let ((inode (nth 10 file-attr)))
- (if (consp inode)
- (if (consp (cdr inode))
-
-
-
-
-
-
-
-
- (let ((p1 (* (car inode) 10995116.0))
- (p2 (+ (* (car inode) 27776.0)
- (* (cadr inode) 65536.0)
- (cddr inode))))
- (format " %13.0f%05.0f "
-
-
- (+ p1 (floor p2 100000.0))
- (mod p2 100000.0)))
- (format " %18.0f "
- (+ (* (car inode) 65536.0)
- (cdr inode))))
- (format " %18d " inode))))
-
- (if (memq ?s switches)
- (format ls-lisp-filesize-f-fmt
- (fceiling (/ file-size 1024.0))))
- drwxrwxrwx
- (if (memq 'links ls-lisp-verbosity)
- (format "%3d" (nth 1 file-attr)))
-
-
-
-
- (if (memq 'uid ls-lisp-verbosity)
-
- (let ((uid (nth 2 file-attr)))
- (format (if (stringp uid)
- ls-lisp-uid-s-fmt
- ls-lisp-uid-d-fmt)
- uid)))
- (if (not (memq ?G switches))
- (if (or (memq ?g switches)
- (memq 'gid ls-lisp-verbosity))
- (let ((gid (nth 3 file-attr)))
- (format (if (stringp gid)
- ls-lisp-gid-s-fmt
- ls-lisp-gid-d-fmt)
- gid))))
- (ls-lisp-format-file-size file-size (memq ?h switches))
- " "
- (ls-lisp-format-time file-attr time-index)
- " "
- (if (not (memq ?F switches))
- (propertize file-name 'dired-filename t)
- file-name)
- (if (stringp file-type)
- (concat " -> " file-type))
- "\n"
- )))
- (defun ls-lisp-time-index (switches)
- "Return time index into file-attributes according to ls SWITCHES list.
- Return nil if no time switch found."
-
- (cond ((memq ?c switches) 6)
- ((memq ?t switches) 5)
- ((memq ?u switches) 4)))
- (defun ls-lisp-format-time (file-attr time-index)
- "Format time for file with attributes FILE-ATTR according to TIME-INDEX.
- Use the same method as ls to decide whether to show time-of-day or year,
- depending on distance between file date and the current time.
- All ls time options, namely c, t and u, are handled."
- (let* ((time (nth (or time-index 5) file-attr))
- (diff (- (float-time time) (float-time)))
-
-
-
-
- (past-cutoff -15778476))
- (condition-case nil
-
-
- (let ((locale system-time-locale))
- (if (not locale)
- (let ((vars '("LC_ALL" "LC_TIME" "LANG")))
- (while (and vars (not (setq locale (getenv (car vars)))))
- (setq vars (cdr vars)))))
- (if (member locale '("C" "POSIX"))
- (setq locale nil))
- (format-time-string
- (if (and (<= past-cutoff diff) (<= diff 0))
- (if (and locale (not ls-lisp-use-localized-time-format))
- "%m-%d %H:%M"
- (nth 0 ls-lisp-format-time-list))
- (if (and locale (not ls-lisp-use-localized-time-format))
- "%Y-%m-%d "
- (nth 1 ls-lisp-format-time-list)))
- time))
- (error "Unk 0 0000"))))
- (defun ls-lisp-format-file-size (file-size human-readable)
- (if (not human-readable)
- (format (if (floatp file-size)
- ls-lisp-filesize-f-fmt
- ls-lisp-filesize-d-fmt)
- file-size)
- (format " %7s" (file-size-human-readable file-size))))
- (provide 'ls-lisp)
|