Function: ls-lisp-column-format
ls-lisp-column-format is a byte-compiled function defined in
ls-lisp.el.gz.
Signature
(ls-lisp-column-format FILE-ALIST)
Documentation
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!
Source Code
;; Defined in /usr/src/emacs/lisp/ls-lisp.el.gz
(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))
;; Count number of files as `nfiles', build list of filenames as
;; `files', and find maximum filename length as `colwid':
(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) ; 2 character column gap
fmt (format "%%-%ds" colwid) ; print format
ncols (/ (window-width) colwid) ; no of columns
collen (/ nfiles ncols)) ; floor of column length
(if (> nfiles (* collen ncols)) (setq collen (1+ collen)))
;; Output the file names in columns, sorted vertically:
(let ((i 0) j)
(while (< i collen)
(setq j i)
(while (< j nfiles)
(insert (format fmt (nth j files)))
(setq j (+ j collen)))
;; FJW: This is completely unnecessary, but I don't like
;; trailing white space...
(delete-region (point) (progn (skip-chars-backward " \t") (point)))
(insert ?\n)
(setq i (1+ i))))))