annotate lisp/ls-lisp.el @ 99492:ee792794d888

(isearch-search-fun): Compare the length of the current search string with the length of the string from the previous search state to detect the situation when the user adds or removes characters in the search string. Use word-search-forward-lax and word-search-backward-lax in this case, and otherwise word-search-forward and word-search-backward.
author Juri Linkov <juri@jurta.org>
date Tue, 11 Nov 2008 19:43:09 +0000
parents c3512b2085a0
children d42aff5ca541
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2233
fb0ed5a1d0f3 Add standard library headers.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1672
diff changeset
1 ;;; ls-lisp.el --- emulate insert-directory completely in Emacs Lisp
fb0ed5a1d0f3 Add standard library headers.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1672
diff changeset
2
74442
b2e5081b9320 Update copyright years.
Glenn Morris <rgm@gnu.org>
parents: 68651
diff changeset
3 ;; Copyright (C) 1992, 1994, 2000, 2001, 2002, 2003, 2004,
79721
73661ddc7ac7 Add 2008 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 78236
diff changeset
4 ;; 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13883
diff changeset
5
38412
253f761ad37b Some fixes to follow coding conventions in files maintained by FSF.
Pavel Janík <Pavel@Janik.cz>
parents: 37330
diff changeset
6 ;; Author: Sebastian Kremer <sk@thp.uni-koeln.de>
253f761ad37b Some fixes to follow coding conventions in files maintained by FSF.
Pavel Janík <Pavel@Janik.cz>
parents: 37330
diff changeset
7 ;; Modified by: Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>
253f761ad37b Some fixes to follow coding conventions in files maintained by FSF.
Pavel Janík <Pavel@Janik.cz>
parents: 37330
diff changeset
8 ;; Maintainer: FSF
253f761ad37b Some fixes to follow coding conventions in files maintained by FSF.
Pavel Janík <Pavel@Janik.cz>
parents: 37330
diff changeset
9 ;; Keywords: unix, dired
183
121e45aa6ad0 Initial revision
Sebastian Kremer <sk@thp.uni-koeln.de>
parents:
diff changeset
10
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13883
diff changeset
11 ;; This file is part of GNU Emacs.
183
121e45aa6ad0 Initial revision
Sebastian Kremer <sk@thp.uni-koeln.de>
parents:
diff changeset
12
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94580
diff changeset
13 ;; GNU Emacs is free software: you can redistribute it and/or modify
183
121e45aa6ad0 Initial revision
Sebastian Kremer <sk@thp.uni-koeln.de>
parents:
diff changeset
14 ;; it under the terms of the GNU General Public License as published by
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94580
diff changeset
15 ;; the Free Software Foundation, either version 3 of the License, or
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94580
diff changeset
16 ;; (at your option) any later version.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13883
diff changeset
17
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13883
diff changeset
18 ;; GNU Emacs is distributed in the hope that it will be useful,
183
121e45aa6ad0 Initial revision
Sebastian Kremer <sk@thp.uni-koeln.de>
parents:
diff changeset
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
121e45aa6ad0 Initial revision
Sebastian Kremer <sk@thp.uni-koeln.de>
parents:
diff changeset
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
121e45aa6ad0 Initial revision
Sebastian Kremer <sk@thp.uni-koeln.de>
parents:
diff changeset
21 ;; GNU General Public License for more details.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13883
diff changeset
22
183
121e45aa6ad0 Initial revision
Sebastian Kremer <sk@thp.uni-koeln.de>
parents:
diff changeset
23 ;; You should have received a copy of the GNU General Public License
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94580
diff changeset
24 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13883
diff changeset
25
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13883
diff changeset
26 ;;; Commentary:
183
121e45aa6ad0 Initial revision
Sebastian Kremer <sk@thp.uni-koeln.de>
parents:
diff changeset
27
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
28 ;; OVERVIEW ==========================================================
623
347a8db13650 Doc fixes.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 622
diff changeset
29
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
30 ;; This file redefines the function `insert-directory' to implement it
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
31 ;; directly from Emacs lisp, without running ls in a subprocess. It
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
32 ;; is useful if you cannot afford to fork Emacs on a real memory UNIX,
97142
c3512b2085a0 * bitmaps/README:
Dan Nicolaescu <dann@ics.uci.edu>
parents: 94678
diff changeset
33 ;; or other non-UNIX platforms if you don't have the ls
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
34 ;; program, or if you want a different format from what ls offers.
183
121e45aa6ad0 Initial revision
Sebastian Kremer <sk@thp.uni-koeln.de>
parents:
diff changeset
35
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
36 ;; This function can use regexps instead of shell wildcards. If you
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
37 ;; enter regexps remember to double each $ sign. For example, to
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
38 ;; include files *.el, enter `.*\.el$$', resulting in the regexp
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
39 ;; `.*\.el$'.
622
1d4abb4dfecb (dired-lisp-format-time): in Emacs 19 we can format times.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 417
diff changeset
40
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
41 ;; RESTRICTIONS ======================================================
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
42
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
43 ;; * A few obscure ls switches are still ignored: see the docstring of
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
44 ;; `insert-directory'.
183
121e45aa6ad0 Initial revision
Sebastian Kremer <sk@thp.uni-koeln.de>
parents:
diff changeset
45
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
46 ;; TO DO =============================================================
622
1d4abb4dfecb (dired-lisp-format-time): in Emacs 19 we can format times.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 417
diff changeset
47
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
48 ;; Complete handling of F switch (if/when possible).
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
49
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
50 ;; FJW: May be able to sort much faster by consing the sort key onto
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
51 ;; the front of each list element, sorting and then stripping the key
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
52 ;; off again!
622
1d4abb4dfecb (dired-lisp-format-time): in Emacs 19 we can format times.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 417
diff changeset
53
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
54 ;;; History:
183
121e45aa6ad0 Initial revision
Sebastian Kremer <sk@thp.uni-koeln.de>
parents:
diff changeset
55
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
56 ;; Written originally by Sebastian Kremer <sk@thp.uni-koeln.de>
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
57 ;; Revised by Andrew Innes and Geoff Volker (and maybe others).
183
121e45aa6ad0 Initial revision
Sebastian Kremer <sk@thp.uni-koeln.de>
parents:
diff changeset
58
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
59 ;; Modified by Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>, mainly
67079
0bf8f7505426 (ls-lisp-parse-symlink): Delete.
Lars Hansen <larsh@soem.dk>
parents: 67004
diff changeset
60 ;; to support many more ls options, "platform emulation" and more
0bf8f7505426 (ls-lisp-parse-symlink): Delete.
Lars Hansen <larsh@soem.dk>
parents: 67004
diff changeset
61 ;; robust sorting.
622
1d4abb4dfecb (dired-lisp-format-time): in Emacs 19 we can format times.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 417
diff changeset
62
2233
fb0ed5a1d0f3 Add standard library headers.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1672
diff changeset
63 ;;; Code:
fb0ed5a1d0f3 Add standard library headers.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1672
diff changeset
64
50767
5e248d2a95e7 (ls-lisp-format-file-size): New function to implement "-h" switch.
Juanma Barranquero <lekktu@gmail.com>
parents: 49328
diff changeset
65 (eval-when-compile (require 'cl))
5e248d2a95e7 (ls-lisp-format-file-size): New function to implement "-h" switch.
Juanma Barranquero <lekktu@gmail.com>
parents: 49328
diff changeset
66
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
67 (defgroup ls-lisp nil
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
68 "Emulate the ls program completely in Emacs Lisp."
35011
11e866e5a825 (ls-lisp) <defgroup>: Add :version.
Dave Love <fx@gnu.org>
parents: 34884
diff changeset
69 :version "21.1"
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
70 :group 'dired)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
71
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
72 (defcustom ls-lisp-emulation
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
73 (cond ((eq system-type 'macos) 'MacOS)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
74 ;; ((eq system-type 'windows-nt) 'MS-Windows)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
75 ((memq system-type
87595
4c6c79916238 * configure.in: Remove references to unsupported systems.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 82140
diff changeset
76 '(hpux usg-unix-v unisoft-unix irix berkeley-unix))
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
77 'UNIX)) ; very similar to GNU
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
78 ;; Anything else defaults to nil, meaning GNU.
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
79 "*Platform to emulate: GNU (default), MacOS, MS-Windows, UNIX.
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
80 Corresponding value is one of the atoms: nil, MacOS, MS-Windows, UNIX.
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
81 Sets default values for: `ls-lisp-ignore-case', `ls-lisp-dirs-first',
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
82 `ls-lisp-verbosity'. Need not match actual platform. Changing this
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
83 option will have no effect until you restart Emacs."
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
84 :type '(choice (const :tag "GNU" nil)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
85 (const MacOS)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
86 (const MS-Windows)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
87 (const UNIX))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
88 :group 'ls-lisp)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
89
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
90 (defcustom ls-lisp-ignore-case
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
91 ;; Name change for consistency with other option names.
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
92 (or (memq ls-lisp-emulation '(MS-Windows MacOS))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
93 (and (boundp 'ls-lisp-dired-ignore-case) ls-lisp-dired-ignore-case))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
94 "*Non-nil causes ls-lisp alphabetic sorting to ignore case."
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
95 :type 'boolean
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
96 :group 'ls-lisp)
13883
a4eef7470b6b (ls-lisp-support-shell-wildcards): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
97
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
98 (defcustom ls-lisp-dirs-first (eq ls-lisp-emulation 'MS-Windows)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
99 "*Non-nil causes ls-lisp to sort directories first in any ordering.
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
100 \(Or last if it is reversed.) Follows Microsoft Windows Explorer."
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
101 ;; Functionality suggested by Chris McMahan <cmcmahan@one.net>
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
102 :type 'boolean
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
103 :group 'ls-lisp)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
104
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
105 (defcustom ls-lisp-verbosity
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
106 (cond ((eq ls-lisp-emulation 'MacOS) nil)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
107 ((eq ls-lisp-emulation 'MS-Windows)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
108 (if (and (fboundp 'w32-using-nt) (w32-using-nt))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
109 '(links))) ; distinguish NT/2K from 9x
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
110 ((eq ls-lisp-emulation 'UNIX) '(links uid)) ; UNIX ls
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
111 (t '(links uid gid))) ; GNU ls
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
112 "*A list of optional file attributes that ls-lisp should display.
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
113 It should contain none or more of the symbols: links, uid, gid.
77711
3e2de8648d07 (ls-lisp-verbosity): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 75426
diff changeset
114 A value of nil (or an empty list) means display none of them.
21620
611b5f660ee6 (ls-lisp-dired-ignore-case): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 17977
diff changeset
115
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
116 Concepts come from UNIX: `links' means count of names associated with
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
117 the file\; `uid' means user (owner) identifier\; `gid' means group
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
118 identifier.
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
119
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
120 If emulation is MacOS then default is nil\;
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
121 if emulation is MS-Windows then default is `(links)' if platform is
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
122 Windows NT/2K, nil otherwise\;
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
123 if emulation is UNIX then default is `(links uid)'\;
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
124 if emulation is GNU then default is `(links uid gid)'."
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
125 ;; Functionality suggested by Howard Melman <howard@silverstream.com>
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
126 :type '(set (const :tag "Show Link Count" links)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
127 (const :tag "Show User" uid)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
128 (const :tag "Show Group" gid))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
129 :group 'ls-lisp)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
130
49328
850f7b918635 (ls-lisp-use-insert-directory-program): Make default
Markus Rost <rost@math.uni-bielefeld.de>
parents: 48917
diff changeset
131 (defcustom ls-lisp-use-insert-directory-program
850f7b918635 (ls-lisp-use-insert-directory-program): Make default
Markus Rost <rost@math.uni-bielefeld.de>
parents: 48917
diff changeset
132 (not (memq system-type '(macos ms-dos windows-nt)))
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
133 "*Non-nil causes ls-lisp to revert back to using `insert-directory-program'.
23452
f0077d5425f2 (ls-lisp-use-insert-directory-program): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 22154
diff changeset
134 This is useful on platforms where ls-lisp is dumped into Emacs, such as
f0077d5425f2 (ls-lisp-use-insert-directory-program): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 22154
diff changeset
135 Microsoft Windows, but you would still like to use a program to list
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
136 the contents of a directory."
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
137 :type 'boolean
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
138 :group 'ls-lisp)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
139
49328
850f7b918635 (ls-lisp-use-insert-directory-program): Make default
Markus Rost <rost@math.uni-bielefeld.de>
parents: 48917
diff changeset
140 ;;; Autoloaded because it is let-bound in `recover-session', `mail-recover-1'.
850f7b918635 (ls-lisp-use-insert-directory-program): Make default
Markus Rost <rost@math.uni-bielefeld.de>
parents: 48917
diff changeset
141 ;;;###autoload
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
142 (defcustom ls-lisp-support-shell-wildcards t
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
143 "*Non-nil means ls-lisp treats file patterns as shell wildcards.
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
144 Otherwise they are treated as Emacs regexps (for backward compatibility)."
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
145 :type 'boolean
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
146 :group 'ls-lisp)
23452
f0077d5425f2 (ls-lisp-use-insert-directory-program): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 22154
diff changeset
147
47329
4bc33b241589 (ls-lisp-format-time-list): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 42427
diff changeset
148 (defcustom ls-lisp-format-time-list
4bc33b241589 (ls-lisp-format-time-list): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 42427
diff changeset
149 '("%b %e %H:%M"
4bc33b241589 (ls-lisp-format-time-list): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 42427
diff changeset
150 "%b %e %Y")
4bc33b241589 (ls-lisp-format-time-list): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 42427
diff changeset
151 "*List of `format-time-string' specs to display file time stamps.
75426
7b38b48667a7 (ls-lisp-use-localized-time-format): New defcustom.
Eli Zaretskii <eliz@gnu.org>
parents: 75347
diff changeset
152 These specs are used ONLY if a valid locale can not be determined.
7b38b48667a7 (ls-lisp-use-localized-time-format): New defcustom.
Eli Zaretskii <eliz@gnu.org>
parents: 75347
diff changeset
153
7b38b48667a7 (ls-lisp-use-localized-time-format): New defcustom.
Eli Zaretskii <eliz@gnu.org>
parents: 75347
diff changeset
154 If `ls-lisp-use-localized-time-format' is non-nil, these specs are used
7b38b48667a7 (ls-lisp-use-localized-time-format): New defcustom.
Eli Zaretskii <eliz@gnu.org>
parents: 75347
diff changeset
155 regardless of whether the locale can be determined.
47329
4bc33b241589 (ls-lisp-format-time-list): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 42427
diff changeset
156
4bc33b241589 (ls-lisp-format-time-list): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 42427
diff changeset
157 Syntax: (EARLY-TIME-FORMAT OLD-TIME-FORMAT)
4bc33b241589 (ls-lisp-format-time-list): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 42427
diff changeset
158
4bc33b241589 (ls-lisp-format-time-list): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 42427
diff changeset
159 The EARLY-TIME-FORMAT is used if file has been modified within the
4bc33b241589 (ls-lisp-format-time-list): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 42427
diff changeset
160 current year. The OLD-TIME-FORMAT is used for older files. To use ISO
4bc33b241589 (ls-lisp-format-time-list): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 42427
diff changeset
161 8601 dates, you could set:
4bc33b241589 (ls-lisp-format-time-list): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 42427
diff changeset
162
4bc33b241589 (ls-lisp-format-time-list): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 42427
diff changeset
163 \(setq ls-lisp-format-time-list
4bc33b241589 (ls-lisp-format-time-list): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 42427
diff changeset
164 '(\"%Y-%m-%d %H:%M\"
4bc33b241589 (ls-lisp-format-time-list): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 42427
diff changeset
165 \"%Y-%m-%d \"))"
47510
22c6e92cccfb (ls-lisp-format-time-list): Fix type and provide :tag's.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 47329
diff changeset
166 :type '(list (string :tag "Early time format")
22c6e92cccfb (ls-lisp-format-time-list): Fix type and provide :tag's.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 47329
diff changeset
167 (string :tag "Old time format"))
47329
4bc33b241589 (ls-lisp-format-time-list): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 42427
diff changeset
168 :group 'ls-lisp)
4bc33b241589 (ls-lisp-format-time-list): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 42427
diff changeset
169
75426
7b38b48667a7 (ls-lisp-use-localized-time-format): New defcustom.
Eli Zaretskii <eliz@gnu.org>
parents: 75347
diff changeset
170 (defcustom ls-lisp-use-localized-time-format nil
7b38b48667a7 (ls-lisp-use-localized-time-format): New defcustom.
Eli Zaretskii <eliz@gnu.org>
parents: 75347
diff changeset
171 "*Non-nil causes ls-lisp to use `ls-lisp-format-time-list' even if
7b38b48667a7 (ls-lisp-use-localized-time-format): New defcustom.
Eli Zaretskii <eliz@gnu.org>
parents: 75347
diff changeset
172 a valid locale is specified.
7b38b48667a7 (ls-lisp-use-localized-time-format): New defcustom.
Eli Zaretskii <eliz@gnu.org>
parents: 75347
diff changeset
173
7b38b48667a7 (ls-lisp-use-localized-time-format): New defcustom.
Eli Zaretskii <eliz@gnu.org>
parents: 75347
diff changeset
174 WARNING: Using localized date/time format might cause Dired columns
7b38b48667a7 (ls-lisp-use-localized-time-format): New defcustom.
Eli Zaretskii <eliz@gnu.org>
parents: 75347
diff changeset
175 to fail to lign up, e.g. if month names are not all of the same length."
7b38b48667a7 (ls-lisp-use-localized-time-format): New defcustom.
Eli Zaretskii <eliz@gnu.org>
parents: 75347
diff changeset
176 :type 'boolean
7b38b48667a7 (ls-lisp-use-localized-time-format): New defcustom.
Eli Zaretskii <eliz@gnu.org>
parents: 75347
diff changeset
177 :group 'ls-lisp)
7b38b48667a7 (ls-lisp-use-localized-time-format): New defcustom.
Eli Zaretskii <eliz@gnu.org>
parents: 75347
diff changeset
178
48917
9b8d6678be5c (original-insert-directory): Make this a variable,
Richard M. Stallman <rms@gnu.org>
parents: 48800
diff changeset
179 (defvar original-insert-directory nil
9b8d6678be5c (original-insert-directory): Make this a variable,
Richard M. Stallman <rms@gnu.org>
parents: 48800
diff changeset
180 "This holds the original function definition of `insert-directory'.")
9b8d6678be5c (original-insert-directory): Make this a variable,
Richard M. Stallman <rms@gnu.org>
parents: 48800
diff changeset
181
94345
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
182 (defvar ls-lisp-uid-d-fmt "-%d"
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
183 "Format to display integer UIDs.")
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
184 (defvar ls-lisp-uid-s-fmt "-%s"
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
185 "Format to display user names.")
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
186 (defvar ls-lisp-gid-d-fmt "-%d"
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
187 "Format to display integer GIDs.")
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
188 (defvar ls-lisp-gid-s-fmt "-%s"
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
189 "Format to display user group names.")
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
190 (defvar ls-lisp-filesize-d-fmt "%d"
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
191 "Format to display integer file sizes.")
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
192 (defvar ls-lisp-filesize-f-fmt "%.0f"
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
193 "Format to display float file sizes.")
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
194
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
195 ;; Remember the original insert-directory function
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
196 (or (featurep 'ls-lisp) ; FJW: unless this file is being reloaded!
48917
9b8d6678be5c (original-insert-directory): Make this a variable,
Richard M. Stallman <rms@gnu.org>
parents: 48800
diff changeset
197 (setq original-insert-directory (symbol-function 'insert-directory)))
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
198
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
199
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
200 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
23452
f0077d5425f2 (ls-lisp-use-insert-directory-program): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 22154
diff changeset
201
f0077d5425f2 (ls-lisp-use-insert-directory-program): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 22154
diff changeset
202 (defun insert-directory (file switches &optional wildcard full-directory-p)
f0077d5425f2 (ls-lisp-use-insert-directory-program): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 22154
diff changeset
203 "Insert directory listing for FILE, formatted according to SWITCHES.
f0077d5425f2 (ls-lisp-use-insert-directory-program): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 22154
diff changeset
204 Leaves point after the inserted text.
f0077d5425f2 (ls-lisp-use-insert-directory-program): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 22154
diff changeset
205 SWITCHES may be a string of options, or a list of strings.
f0077d5425f2 (ls-lisp-use-insert-directory-program): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 22154
diff changeset
206 Optional third arg WILDCARD means treat FILE as shell wildcard.
f0077d5425f2 (ls-lisp-use-insert-directory-program): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 22154
diff changeset
207 Optional fourth arg FULL-DIRECTORY-P means file is a directory and
f0077d5425f2 (ls-lisp-use-insert-directory-program): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 22154
diff changeset
208 switches do not contain `d', so that a full listing is expected.
f0077d5425f2 (ls-lisp-use-insert-directory-program): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 22154
diff changeset
209
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
210 This version of the function comes from `ls-lisp.el'.
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
211 If the value of `ls-lisp-use-insert-directory-program' is non-nil then
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
212 it works exactly like the version from `files.el' and runs a directory
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
213 listing program whose name is in the variable
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
214 `insert-directory-program'; if also WILDCARD is non-nil then it runs
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
215 the shell specified by `shell-file-name'. If the value of
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
216 `ls-lisp-use-insert-directory-program' is nil then it runs a Lisp
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
217 emulation.
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
218
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
219 The Lisp emulation does not run any external programs or shells. It
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
220 supports ordinary shell wildcards if `ls-lisp-support-shell-wildcards'
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
221 is non-nil; otherwise, it interprets wildcards as regular expressions
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
222 to match file names. It does not support all `ls' switches -- those
87992
1787561f6c22 (ls-lisp-insert-directory): If -n switch is used, invoke
Eli Zaretskii <eliz@gnu.org>
parents: 87649
diff changeset
223 that work are: A a c i r S s t u U X g G B C R n and F partly."
23452
f0077d5425f2 (ls-lisp-use-insert-directory-program): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 22154
diff changeset
224 (if ls-lisp-use-insert-directory-program
48917
9b8d6678be5c (original-insert-directory): Make this a variable,
Richard M. Stallman <rms@gnu.org>
parents: 48800
diff changeset
225 (funcall original-insert-directory
9b8d6678be5c (original-insert-directory): Make this a variable,
Richard M. Stallman <rms@gnu.org>
parents: 48800
diff changeset
226 file switches wildcard full-directory-p)
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
227 ;; We need the directory in order to find the right handler.
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
228 (let ((handler (find-file-name-handler (expand-file-name file)
52897
6e19e784b4d1 (ls-lisp-insert-directory): Arg is now wildcard-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
229 'insert-directory))
78043
0ef88721691e (insert-directory): If an invalid regexp error is thrown, try using FILE
Eli Zaretskii <eliz@gnu.org>
parents: 78039
diff changeset
230 (orig-file file)
52897
6e19e784b4d1 (ls-lisp-insert-directory): Arg is now wildcard-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
231 wildcard-regexp)
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
232 (if handler
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
233 (funcall handler 'insert-directory file switches
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
234 wildcard full-directory-p)
50992
01a94a546935 (insert-directory): Remove --dired switch when
John Paul Wallington <jpw@pobox.com>
parents: 50767
diff changeset
235 ;; Remove --dired switch
01a94a546935 (insert-directory): Remove --dired switch when
John Paul Wallington <jpw@pobox.com>
parents: 50767
diff changeset
236 (if (string-match "--dired " switches)
01a94a546935 (insert-directory): Remove --dired switch when
John Paul Wallington <jpw@pobox.com>
parents: 50767
diff changeset
237 (setq switches (replace-match "" nil nil switches)))
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
238 ;; Convert SWITCHES to a list of characters.
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
239 (setq switches (delete ?- (append switches nil)))
52897
6e19e784b4d1 (ls-lisp-insert-directory): Arg is now wildcard-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
240 ;; Sometimes we get ".../foo*/" as FILE. While the shell and
6e19e784b4d1 (ls-lisp-insert-directory): Arg is now wildcard-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
241 ;; `ls' don't mind, we certainly do, because it makes us think
6e19e784b4d1 (ls-lisp-insert-directory): Arg is now wildcard-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
242 ;; there is no wildcard, only a directory name.
6e19e784b4d1 (ls-lisp-insert-directory): Arg is now wildcard-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
243 (if (and ls-lisp-support-shell-wildcards
78039
ed97a96f45fc (insert-directory): Don't treat FILE as a wildcard if FILE exists as
Eli Zaretskii <eliz@gnu.org>
parents: 77711
diff changeset
244 (string-match "[[?*]" file)
78043
0ef88721691e (insert-directory): If an invalid regexp error is thrown, try using FILE
Eli Zaretskii <eliz@gnu.org>
parents: 78039
diff changeset
245 ;; Prefer an existing file to wildcards, like
78039
ed97a96f45fc (insert-directory): Don't treat FILE as a wildcard if FILE exists as
Eli Zaretskii <eliz@gnu.org>
parents: 77711
diff changeset
246 ;; dired-noselect does.
78043
0ef88721691e (insert-directory): If an invalid regexp error is thrown, try using FILE
Eli Zaretskii <eliz@gnu.org>
parents: 78039
diff changeset
247 (not (file-exists-p file)))
52897
6e19e784b4d1 (ls-lisp-insert-directory): Arg is now wildcard-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
248 (progn
6e19e784b4d1 (ls-lisp-insert-directory): Arg is now wildcard-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
249 (or (not (eq (aref file (1- (length file))) ?/))
6e19e784b4d1 (ls-lisp-insert-directory): Arg is now wildcard-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
250 (setq file (substring file 0 (1- (length file)))))
6e19e784b4d1 (ls-lisp-insert-directory): Arg is now wildcard-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
251 (setq wildcard t)))
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
252 (if wildcard
52897
6e19e784b4d1 (ls-lisp-insert-directory): Arg is now wildcard-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
253 (setq wildcard-regexp
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
254 (if ls-lisp-support-shell-wildcards
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
255 (wildcard-to-regexp (file-name-nondirectory file))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
256 (file-name-nondirectory file))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
257 file (file-name-directory file))
52897
6e19e784b4d1 (ls-lisp-insert-directory): Arg is now wildcard-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
258 (if (memq ?B switches) (setq wildcard-regexp "[^~]\\'")))
78043
0ef88721691e (insert-directory): If an invalid regexp error is thrown, try using FILE
Eli Zaretskii <eliz@gnu.org>
parents: 78039
diff changeset
259 (condition-case err
0ef88721691e (insert-directory): If an invalid regexp error is thrown, try using FILE
Eli Zaretskii <eliz@gnu.org>
parents: 78039
diff changeset
260 (ls-lisp-insert-directory
0ef88721691e (insert-directory): If an invalid regexp error is thrown, try using FILE
Eli Zaretskii <eliz@gnu.org>
parents: 78039
diff changeset
261 file switches (ls-lisp-time-index switches)
0ef88721691e (insert-directory): If an invalid regexp error is thrown, try using FILE
Eli Zaretskii <eliz@gnu.org>
parents: 78039
diff changeset
262 wildcard-regexp full-directory-p)
0ef88721691e (insert-directory): If an invalid regexp error is thrown, try using FILE
Eli Zaretskii <eliz@gnu.org>
parents: 78039
diff changeset
263 (invalid-regexp
0ef88721691e (insert-directory): If an invalid regexp error is thrown, try using FILE
Eli Zaretskii <eliz@gnu.org>
parents: 78039
diff changeset
264 ;; Maybe they wanted a literal file that just happens to
0ef88721691e (insert-directory): If an invalid regexp error is thrown, try using FILE
Eli Zaretskii <eliz@gnu.org>
parents: 78039
diff changeset
265 ;; use characters special to shell wildcards.
0ef88721691e (insert-directory): If an invalid regexp error is thrown, try using FILE
Eli Zaretskii <eliz@gnu.org>
parents: 78039
diff changeset
266 (if (equal (cadr err) "Unmatched [ or [^")
0ef88721691e (insert-directory): If an invalid regexp error is thrown, try using FILE
Eli Zaretskii <eliz@gnu.org>
parents: 78039
diff changeset
267 (progn
0ef88721691e (insert-directory): If an invalid regexp error is thrown, try using FILE
Eli Zaretskii <eliz@gnu.org>
parents: 78039
diff changeset
268 (setq wildcard-regexp (if (memq ?B switches) "[^~]\\'")
0ef88721691e (insert-directory): If an invalid regexp error is thrown, try using FILE
Eli Zaretskii <eliz@gnu.org>
parents: 78039
diff changeset
269 file (file-relative-name orig-file))
0ef88721691e (insert-directory): If an invalid regexp error is thrown, try using FILE
Eli Zaretskii <eliz@gnu.org>
parents: 78039
diff changeset
270 (ls-lisp-insert-directory
0ef88721691e (insert-directory): If an invalid regexp error is thrown, try using FILE
Eli Zaretskii <eliz@gnu.org>
parents: 78039
diff changeset
271 file switches (ls-lisp-time-index switches)
0ef88721691e (insert-directory): If an invalid regexp error is thrown, try using FILE
Eli Zaretskii <eliz@gnu.org>
parents: 78039
diff changeset
272 nil full-directory-p))
0ef88721691e (insert-directory): If an invalid regexp error is thrown, try using FILE
Eli Zaretskii <eliz@gnu.org>
parents: 78039
diff changeset
273 (signal (car err) (cdr err)))))
42239
1e736b882b4f (insert-directory): Insert the amount of free disk
Eli Zaretskii <eliz@gnu.org>
parents: 42206
diff changeset
274 ;; Try to insert the amount of free space.
1e736b882b4f (insert-directory): Insert the amount of free disk
Eli Zaretskii <eliz@gnu.org>
parents: 42206
diff changeset
275 (save-excursion
1e736b882b4f (insert-directory): Insert the amount of free disk
Eli Zaretskii <eliz@gnu.org>
parents: 42206
diff changeset
276 (goto-char (point-min))
1e736b882b4f (insert-directory): Insert the amount of free disk
Eli Zaretskii <eliz@gnu.org>
parents: 42206
diff changeset
277 ;; First find the line to put it on.
1e736b882b4f (insert-directory): Insert the amount of free disk
Eli Zaretskii <eliz@gnu.org>
parents: 42206
diff changeset
278 (when (re-search-forward "^total" nil t)
1e736b882b4f (insert-directory): Insert the amount of free disk
Eli Zaretskii <eliz@gnu.org>
parents: 42206
diff changeset
279 (let ((available (get-free-disk-space ".")))
1e736b882b4f (insert-directory): Insert the amount of free disk
Eli Zaretskii <eliz@gnu.org>
parents: 42206
diff changeset
280 (when available
42427
f1a88fb2fb4e (insert-directory): Modify the "total" line wording, in accordance with
Eli Zaretskii <eliz@gnu.org>
parents: 42239
diff changeset
281 ;; Replace "total" with "total used", to avoid confusion.
f1a88fb2fb4e (insert-directory): Modify the "total" line wording, in accordance with
Eli Zaretskii <eliz@gnu.org>
parents: 42239
diff changeset
282 (replace-match "total used in directory")
42239
1e736b882b4f (insert-directory): Insert the amount of free disk
Eli Zaretskii <eliz@gnu.org>
parents: 42206
diff changeset
283 (end-of-line)
1e736b882b4f (insert-directory): Insert the amount of free disk
Eli Zaretskii <eliz@gnu.org>
parents: 42206
diff changeset
284 (insert " available " available)))))))))
416
954d6271f0e9 (dired-lisp-ls): handles A a S r i s switches now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 185
diff changeset
285
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
286 (defun ls-lisp-insert-directory
52897
6e19e784b4d1 (ls-lisp-insert-directory): Arg is now wildcard-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
287 (file switches time-index wildcard-regexp full-directory-p)
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
288 "Insert directory listing for FILE, formatted according to SWITCHES.
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
289 Leaves point after the inserted text. This is an internal function
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
290 optionally called by the `ls-lisp.el' version of `insert-directory'.
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
291 It is called recursively if the -R switch is used.
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
292 SWITCHES is a *list* of characters. TIME-INDEX is the time index into
52897
6e19e784b4d1 (ls-lisp-insert-directory): Arg is now wildcard-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
293 file-attributes according to SWITCHES. WILDCARD-REGEXP is nil or an *Emacs
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
294 regexp*. FULL-DIRECTORY-P means file is a directory and SWITCHES does
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
295 not contain `d', so that a full listing is expected."
52897
6e19e784b4d1 (ls-lisp-insert-directory): Arg is now wildcard-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
296 (if (or wildcard-regexp full-directory-p)
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
297 (let* ((dir (file-name-as-directory file))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
298 (default-directory dir) ; so that file-attributes works
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
299 (file-alist
87992
1787561f6c22 (ls-lisp-insert-directory): If -n switch is used, invoke
Eli Zaretskii <eliz@gnu.org>
parents: 87649
diff changeset
300 (directory-files-and-attributes dir nil wildcard-regexp t
1787561f6c22 (ls-lisp-insert-directory): If -n switch is used, invoke
Eli Zaretskii <eliz@gnu.org>
parents: 87649
diff changeset
301 (if (memq ?n switches)
1787561f6c22 (ls-lisp-insert-directory): If -n switch is used, invoke
Eli Zaretskii <eliz@gnu.org>
parents: 87649
diff changeset
302 'integer
1787561f6c22 (ls-lisp-insert-directory): If -n switch is used, invoke
Eli Zaretskii <eliz@gnu.org>
parents: 87649
diff changeset
303 'string)))
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
304 (now (current-time))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
305 (sum 0)
94345
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
306 (max-uid-len 0)
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
307 (max-gid-len 0)
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
308 (max-file-size 0)
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
309 ;; do all bindings here for speed
94345
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
310 total-line files elt short file-size fil attr
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
311 fuid fgid uid-len gid-len)
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
312 (cond ((memq ?A switches)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
313 (setq file-alist
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
314 (ls-lisp-delete-matching "^\\.\\.?$" file-alist)))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
315 ((not (memq ?a switches))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
316 ;; if neither -A nor -a, flush . files
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
317 (setq file-alist
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
318 (ls-lisp-delete-matching "^\\." file-alist))))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
319 (setq file-alist
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
320 (ls-lisp-handle-switches file-alist switches))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
321 (if (memq ?C switches) ; column (-C) format
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
322 (ls-lisp-column-format file-alist)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
323 (setq total-line (cons (point) (car-safe file-alist)))
94345
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
324 ;; Find the appropriate format for displaying uid, gid, and
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
325 ;; file size, by finding the longest strings among all the
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
326 ;; files we are about to display.
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
327 (dolist (elt file-alist)
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
328 (setq attr (cdr elt)
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
329 fuid (nth 2 attr)
94580
9a020be031da (ls-lisp-insert-directory): Use `string-width' instead of `length'
Eli Zaretskii <eliz@gnu.org>
parents: 94345
diff changeset
330 uid-len (if (stringp fuid) (string-width fuid)
9a020be031da (ls-lisp-insert-directory): Use `string-width' instead of `length'
Eli Zaretskii <eliz@gnu.org>
parents: 94345
diff changeset
331 (length (format "%d" fuid)))
94345
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
332 fgid (nth 3 attr)
94580
9a020be031da (ls-lisp-insert-directory): Use `string-width' instead of `length'
Eli Zaretskii <eliz@gnu.org>
parents: 94345
diff changeset
333 gid-len (if (stringp fgid) (string-width fgid)
9a020be031da (ls-lisp-insert-directory): Use `string-width' instead of `length'
Eli Zaretskii <eliz@gnu.org>
parents: 94345
diff changeset
334 (length (format "%d" fgid)))
94345
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
335 file-size (nth 7 attr))
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
336 (if (> uid-len max-uid-len)
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
337 (setq max-uid-len uid-len))
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
338 (if (> gid-len max-gid-len)
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
339 (setq max-gid-len gid-len))
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
340 (if (> file-size max-file-size)
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
341 (setq max-file-size file-size)))
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
342 (setq ls-lisp-uid-d-fmt (format " %%-%dd" max-uid-len))
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
343 (setq ls-lisp-uid-s-fmt (format " %%-%ds" max-uid-len))
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
344 (setq ls-lisp-gid-d-fmt (format " %%-%dd" max-gid-len))
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
345 (setq ls-lisp-gid-s-fmt (format " %%-%ds" max-gid-len))
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
346 (setq ls-lisp-filesize-d-fmt
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
347 (format " %%%dd"
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
348 (if (memq ?s switches)
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
349 (length (format "%.0f"
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
350 (fceiling (/ max-file-size 1024.0))))
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
351 (length (format "%.0f" max-file-size)))))
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
352 (setq ls-lisp-filesize-f-fmt
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
353 (format " %%%d.0f"
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
354 (if (memq ?s switches)
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
355 (length (format "%.0f"
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
356 (fceiling (/ max-file-size 1024.0))))
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
357 (length (format "%.0f" max-file-size)))))
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
358 (setq files file-alist)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
359 (while files ; long (-l) format
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
360 (setq elt (car files)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
361 files (cdr files)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
362 short (car elt)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
363 attr (cdr elt)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
364 file-size (nth 7 attr))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
365 (and attr
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
366 (setq sum (+ file-size
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
367 ;; Even if neither SUM nor file's size
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
368 ;; overflow, their sum could.
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
369 (if (or (< sum (- 134217727 file-size))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
370 (floatp sum)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
371 (floatp file-size))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
372 sum
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
373 (float sum))))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
374 (insert (ls-lisp-format short attr file-size
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
375 switches time-index now))))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
376 ;; Insert total size of all files:
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
377 (save-excursion
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
378 (goto-char (car total-line))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
379 (or (cdr total-line)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
380 ;; Shell says ``No match'' if no files match
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
381 ;; the wildcard; let's say something similar.
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
382 (insert "(No match)\n"))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
383 (insert (format "total %.0f\n" (fceiling (/ sum 1024.0))))))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
384 (if (memq ?R switches)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
385 ;; List the contents of all directories recursively.
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
386 ;; cadr of each element of `file-alist' is t for
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
387 ;; directory, string (name linked to) for symbolic
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
388 ;; link, or nil.
1334
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
389 (while file-alist
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
390 (setq elt (car file-alist)
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
391 file-alist (cdr file-alist))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
392 (when (and (eq (cadr elt) t) ; directory
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
393 (not (string-match "\\`\\.\\.?\\'" (car elt))))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
394 (setq elt (expand-file-name (car elt) dir))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
395 (insert "\n" elt ":\n")
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
396 (ls-lisp-insert-directory
52897
6e19e784b4d1 (ls-lisp-insert-directory): Arg is now wildcard-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
397 elt switches time-index wildcard-regexp full-directory-p)))))
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
398 ;; If not full-directory-p, FILE *must not* end in /, as
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
399 ;; file-attributes will not recognize a symlink to a directory,
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
400 ;; so must make it a relative filename as ls does:
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
401 (if (eq (aref file (1- (length file))) ?/)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
402 (setq file (substring file 0 -1)))
53320
15f16532d823 (ls-lisp-insert-directory): Add parameter 'string in
Lars Hansen <larsh@soem.dk>
parents: 52897
diff changeset
403 (let ((fattr (file-attributes file 'string)))
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
404 (if fattr
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
405 (insert (ls-lisp-format file fattr (nth 7 fattr)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
406 switches time-index (current-time)))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
407 (message "%s: doesn't exist or is inaccessible" file)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
408 (ding) (sit-for 2))))) ; to show user the message!
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
409
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
410 (defun ls-lisp-column-format (file-alist)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
411 "Insert the file names (only) in FILE-ALIST into the current buffer.
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
412 Format in columns, sorted vertically, following GNU ls -C.
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
413 Responds to the window width as ls should but may not!"
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
414 (let (files fmt ncols collen (nfiles 0) (colwid 0))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
415 ;; Count number of files as `nfiles', build list of filenames as
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
416 ;; `files', and find maximum filename length as `colwid':
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
417 (let (file len)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
418 (while file-alist
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
419 (setq nfiles (1+ nfiles)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
420 file (caar file-alist)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
421 files (cons file files)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
422 file-alist (cdr file-alist)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
423 len (length file))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
424 (if (> len colwid) (setq colwid len))))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
425 (setq files (nreverse files)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
426 colwid (+ 2 colwid) ; 2 character column gap
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
427 fmt (format "%%-%ds" colwid) ; print format
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
428 ncols (/ (window-width) colwid) ; no of columns
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
429 collen (/ nfiles ncols)) ; floor of column length
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
430 (if (> nfiles (* collen ncols)) (setq collen (1+ collen)))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
431 ;; Output the file names in columns, sorted vertically:
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
432 (let ((i 0) j)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
433 (while (< i collen)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
434 (setq j i)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
435 (while (< j nfiles)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
436 (insert (format fmt (nth j files)))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
437 (setq j (+ j collen)))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
438 ;; FJW: This is completely unnecessary, but I don't like
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
439 ;; trailing white space...
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
440 (delete-region (point) (progn (skip-chars-backward " \t") (point)))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
441 (insert ?\n)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
442 (setq i (1+ i))))))
416
954d6271f0e9 (dired-lisp-ls): handles A a S r i s switches now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 185
diff changeset
443
1334
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
444 (defun ls-lisp-delete-matching (regexp list)
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
445 "Delete all elements matching REGEXP from LIST, return new list."
417
51793184f9a9 (dired-lisp-format): format can pad after all.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 416
diff changeset
446 ;; Should perhaps use setcdr for efficiency.
416
954d6271f0e9 (dired-lisp-ls): handles A a S r i s switches now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 185
diff changeset
447 (let (result)
954d6271f0e9 (dired-lisp-ls): handles A a S r i s switches now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 185
diff changeset
448 (while list
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
449 (or (string-match regexp (caar list))
416
954d6271f0e9 (dired-lisp-ls): handles A a S r i s switches now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 185
diff changeset
450 (setq result (cons (car list) result)))
954d6271f0e9 (dired-lisp-ls): handles A a S r i s switches now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 185
diff changeset
451 (setq list (cdr list)))
954d6271f0e9 (dired-lisp-ls): handles A a S r i s switches now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 185
diff changeset
452 result))
954d6271f0e9 (dired-lisp-ls): handles A a S r i s switches now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 185
diff changeset
453
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
454 (defsubst ls-lisp-string-lessp (s1 s2)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
455 "Return t if string S1 is less than string S2 in lexicographic order.
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
456 Case is significant if `ls-lisp-ignore-case' is nil.
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
457 Unibyte strings are converted to multibyte for comparison."
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
458 (let ((u (compare-strings s1 0 nil s2 0 nil ls-lisp-ignore-case)))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
459 (and (numberp u) (< u 0))))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
460
1334
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
461 (defun ls-lisp-handle-switches (file-alist switches)
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
462 "Return new FILE-ALIST sorted according to SWITCHES.
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
463 SWITCHES is a list of characters. Default sorting is alphabetic."
416
954d6271f0e9 (dired-lisp-ls): handles A a S r i s switches now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 185
diff changeset
464 ;; FILE-ALIST's elements are (FILE . FILE-ATTRIBUTES).
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
465 (or (memq ?U switches) ; unsorted
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
466 ;; Catch and ignore unexpected sorting errors
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
467 (condition-case err
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
468 (setq file-alist
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
469 (let (index)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
470 ;; Copy file-alist in case of error
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
471 (sort (copy-sequence file-alist) ; modifies its argument!
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
472 (cond ((memq ?S switches)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
473 (lambda (x y) ; sorted on size
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
474 ;; 7th file attribute is file size
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
475 ;; Make largest file come first
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
476 (< (nth 7 (cdr y))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
477 (nth 7 (cdr x)))))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
478 ((setq index (ls-lisp-time-index switches))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
479 (lambda (x y) ; sorted on time
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
480 (ls-lisp-time-lessp (nth index (cdr y))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
481 (nth index (cdr x)))))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
482 ((memq ?X switches)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
483 (lambda (x y) ; sorted on extension
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
484 (ls-lisp-string-lessp
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
485 (ls-lisp-extension (car x))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
486 (ls-lisp-extension (car y)))))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
487 (t
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
488 (lambda (x y) ; sorted alphabetically
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
489 (ls-lisp-string-lessp (car x) (car y))))))))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
490 (error (message "Unsorted (ls-lisp sorting error) - %s"
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
491 (error-message-string err))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
492 (ding) (sit-for 2)))) ; to show user the message!
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
493 (if (memq ?F switches) ; classify switch
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
494 (setq file-alist (mapcar 'ls-lisp-classify file-alist)))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
495 (if ls-lisp-dirs-first
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
496 ;; Re-sort directories first, without otherwise changing the
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
497 ;; ordering, and reverse whole list. cadr of each element of
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
498 ;; `file-alist' is t for directory, string (name linked to) for
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
499 ;; symbolic link, or nil.
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
500 (let (el dirs files)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
501 (while file-alist
67079
0bf8f7505426 (ls-lisp-parse-symlink): Delete.
Lars Hansen <larsh@soem.dk>
parents: 67004
diff changeset
502 (if (or (eq (cadr (setq el (car file-alist))) t) ; directory
0bf8f7505426 (ls-lisp-parse-symlink): Delete.
Lars Hansen <larsh@soem.dk>
parents: 67004
diff changeset
503 (and (stringp (cadr el))
0bf8f7505426 (ls-lisp-parse-symlink): Delete.
Lars Hansen <larsh@soem.dk>
parents: 67004
diff changeset
504 (file-directory-p (cadr el)))) ; symlink to a directory
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
505 (setq dirs (cons el dirs))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
506 (setq files (cons el files)))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
507 (setq file-alist (cdr file-alist)))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
508 (setq file-alist
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
509 (if (memq ?U switches) ; unsorted order is reversed
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
510 (nconc dirs files)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
511 (nconc files dirs)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
512 ))))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
513 ;; Finally reverse file alist if necessary.
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
514 ;; (eq below MUST compare `(not (memq ...))' to force comparison of
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
515 ;; `t' or `nil', rather than list tails!)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
516 (if (eq (eq (not (memq ?U switches)) ; unsorted order is reversed
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
517 (not (memq ?r switches))) ; reversed sort order requested
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
518 ls-lisp-dirs-first) ; already reversed
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
519 (nreverse file-alist)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
520 file-alist))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
521
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
522 (defun ls-lisp-classify (filedata)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
523 "Append a character to each file name indicating the file type.
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
524 Also, for regular files that are executable, append `*'.
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
525 The file type indicators are `/' for directories, `@' for symbolic
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
526 links, `|' for FIFOs, `=' for sockets, and nothing for regular files.
63504
da31b0c1effe (ls-lisp-classify): Fix spelling in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 57219
diff changeset
527 \[But FIFOs and sockets are not recognized.]
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
528 FILEDATA has the form (filename . `file-attributes'). Its `cadr' is t
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
529 for directory, string (name linked to) for symbolic link, or nil."
67079
0bf8f7505426 (ls-lisp-parse-symlink): Delete.
Lars Hansen <larsh@soem.dk>
parents: 67004
diff changeset
530 (let ((file-name (car filedata))
0bf8f7505426 (ls-lisp-parse-symlink): Delete.
Lars Hansen <larsh@soem.dk>
parents: 67004
diff changeset
531 (type (cadr filedata)))
0bf8f7505426 (ls-lisp-parse-symlink): Delete.
Lars Hansen <larsh@soem.dk>
parents: 67004
diff changeset
532 (cond (type
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
533 (cons
67079
0bf8f7505426 (ls-lisp-parse-symlink): Delete.
Lars Hansen <larsh@soem.dk>
parents: 67004
diff changeset
534 (concat file-name (if (eq type t) "/" "@"))
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
535 (cdr filedata)))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
536 ((string-match "x" (nth 9 filedata))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
537 (cons
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
538 (concat file-name "*")
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
539 (cdr filedata)))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
540 (t filedata))))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
541
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
542 (defun ls-lisp-extension (filename)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
543 "Return extension of FILENAME (ignoring any version extension)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
544 FOLLOWED by null and full filename, SOLELY for full alpha sort."
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
545 ;; Force extension sort order: `no ext' then `null ext' then `ext'
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
546 ;; to agree with GNU ls.
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
547 (concat
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
548 (let* ((i (length filename)) end)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
549 (if (= (aref filename (1- i)) ?.) ; null extension
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
550 "\0"
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
551 (while (and (>= (setq i (1- i)) 0)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
552 (/= (aref filename i) ?.)))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
553 (if (< i 0) "\0\0" ; no extension
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
554 (if (/= (aref filename (1+ i)) ?~)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
555 (substring filename (1+ i))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
556 ;; version extension found -- ignore it
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
557 (setq end i)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
558 (while (and (>= (setq i (1- i)) 0)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
559 (/= (aref filename i) ?.)))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
560 (if (< i 0) "\0\0" ; no extension
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
561 (substring filename (1+ i) end))))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
562 )) "\0" filename))
183
121e45aa6ad0 Initial revision
Sebastian Kremer <sk@thp.uni-koeln.de>
parents:
diff changeset
563
626
ff8773516db2 (dired-lisp-handle-switches): understands `-t' now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 623
diff changeset
564 ;; From Roland McGrath. Can use this to sort on time.
1334
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
565 (defun ls-lisp-time-lessp (time0 time1)
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
566 "Return t if time TIME0 is earlier than time TIME1."
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
567 (let ((hi0 (car time0)) (hi1 (car time1)))
626
ff8773516db2 (dired-lisp-handle-switches): understands `-t' now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 623
diff changeset
568 (or (< hi0 hi1)
ff8773516db2 (dired-lisp-handle-switches): understands `-t' now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 623
diff changeset
569 (and (= hi0 hi1)
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
570 (< (cadr time0) (cadr time1))))))
626
ff8773516db2 (dired-lisp-handle-switches): understands `-t' now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 623
diff changeset
571
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
572 (defun ls-lisp-format (file-name file-attr file-size switches time-index now)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
573 "Format one line of long ls output for file FILE-NAME.
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
574 FILE-ATTR and FILE-SIZE give the file's attributes and size.
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
575 SWITCHES, TIME-INDEX and NOW give the full switch list and time data."
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
576 (let ((file-type (nth 0 file-attr))
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
577 ;; t for directory, string (name linked to)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
578 ;; for symbolic link, or nil.
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
579 (drwxrwxrwx (nth 8 file-attr))) ; attribute string ("drwxrwxrwx")
416
954d6271f0e9 (dired-lisp-ls): handles A a S r i s switches now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 185
diff changeset
580 (concat (if (memq ?i switches) ; inode number
93697
513fb6886f41 (ls-lisp-format): Support inodes that are 2- or 3-member cons cells.
Eli Zaretskii <eliz@gnu.org>
parents: 87992
diff changeset
581 (let ((inode (nth 10 file-attr)))
513fb6886f41 (ls-lisp-format): Support inodes that are 2- or 3-member cons cells.
Eli Zaretskii <eliz@gnu.org>
parents: 87992
diff changeset
582 (if (consp inode)
513fb6886f41 (ls-lisp-format): Support inodes that are 2- or 3-member cons cells.
Eli Zaretskii <eliz@gnu.org>
parents: 87992
diff changeset
583 (if (consp (cdr inode))
94341
5eb3109ca278 (ls-lisp-format): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 93975
diff changeset
584 ;; 2^(24+16) = 1099511627776.0, but
5eb3109ca278 (ls-lisp-format): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 93975
diff changeset
585 ;; multiplying by it and then adding the
5eb3109ca278 (ls-lisp-format): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 93975
diff changeset
586 ;; other members of the cons cell in one go
5eb3109ca278 (ls-lisp-format): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 93975
diff changeset
587 ;; loses precision, since a double does not
5eb3109ca278 (ls-lisp-format): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 93975
diff changeset
588 ;; have enough significant digits to hold a
5eb3109ca278 (ls-lisp-format): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 93975
diff changeset
589 ;; full 64-bit value. So below we split
5eb3109ca278 (ls-lisp-format): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 93975
diff changeset
590 ;; 1099511627776 into high 13 and low 5
5eb3109ca278 (ls-lisp-format): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 93975
diff changeset
591 ;; digits and compute in two parts.
5eb3109ca278 (ls-lisp-format): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 93975
diff changeset
592 (let ((p1 (* (car inode) 10995116.0))
5eb3109ca278 (ls-lisp-format): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 93975
diff changeset
593 (p2 (+ (* (car inode) 27776.0)
5eb3109ca278 (ls-lisp-format): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 93975
diff changeset
594 (* (cadr inode) 65536.0)
5eb3109ca278 (ls-lisp-format): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 93975
diff changeset
595 (cddr inode))))
5eb3109ca278 (ls-lisp-format): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 93975
diff changeset
596 (format " %13.0f%05.0f "
5eb3109ca278 (ls-lisp-format): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 93975
diff changeset
597 ;; Use floor to emulate integer
5eb3109ca278 (ls-lisp-format): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 93975
diff changeset
598 ;; division.
5eb3109ca278 (ls-lisp-format): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 93975
diff changeset
599 (+ p1 (floor p2 100000.0))
5eb3109ca278 (ls-lisp-format): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 93975
diff changeset
600 (mod p2 100000.0)))
5eb3109ca278 (ls-lisp-format): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 93975
diff changeset
601 (format " %18.0f "
93697
513fb6886f41 (ls-lisp-format): Support inodes that are 2- or 3-member cons cells.
Eli Zaretskii <eliz@gnu.org>
parents: 87992
diff changeset
602 (+ (* (car inode) 65536.0)
513fb6886f41 (ls-lisp-format): Support inodes that are 2- or 3-member cons cells.
Eli Zaretskii <eliz@gnu.org>
parents: 87992
diff changeset
603 (cdr inode))))
94341
5eb3109ca278 (ls-lisp-format): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 93975
diff changeset
604 (format " %18d " inode))))
417
51793184f9a9 (dired-lisp-format): format can pad after all.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 416
diff changeset
605 ;; nil is treated like "" in concat
416
954d6271f0e9 (dired-lisp-ls): handles A a S r i s switches now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 185
diff changeset
606 (if (memq ?s switches) ; size in K
94345
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
607 (format ls-lisp-filesize-f-fmt
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
608 (fceiling (/ file-size 1024.0))))
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
609 drwxrwxrwx ; attribute string
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
610 (if (memq 'links ls-lisp-verbosity)
94345
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
611 (format "%3d" (nth 1 file-attr))) ; link count
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
612 ;; Numeric uid/gid are more confusing than helpful;
416
954d6271f0e9 (dired-lisp-ls): handles A a S r i s switches now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 185
diff changeset
613 ;; Emacs should be able to make strings of them.
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
614 ;; They tend to be bogus on non-UNIX platforms anyway so
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
615 ;; optionally hide them.
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
616 (if (memq 'uid ls-lisp-verbosity)
53320
15f16532d823 (ls-lisp-insert-directory): Add parameter 'string in
Lars Hansen <larsh@soem.dk>
parents: 52897
diff changeset
617 ;; uid can be a sting or an integer
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
618 (let ((uid (nth 2 file-attr)))
94345
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
619 (format (if (stringp uid)
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
620 ls-lisp-uid-s-fmt
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
621 ls-lisp-uid-d-fmt)
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
622 uid)))
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
623 (if (not (memq ?G switches)) ; GNU ls -- shows group by default
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
624 (if (or (memq ?g switches) ; UNIX ls -- no group by default
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
625 (memq 'gid ls-lisp-verbosity))
53320
15f16532d823 (ls-lisp-insert-directory): Add parameter 'string in
Lars Hansen <larsh@soem.dk>
parents: 52897
diff changeset
626 (let ((gid (nth 3 file-attr)))
94345
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
627 (format (if (stringp gid)
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
628 ls-lisp-gid-s-fmt
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
629 ls-lisp-gid-d-fmt)
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
630 gid))))
50767
5e248d2a95e7 (ls-lisp-format-file-size): New function to implement "-h" switch.
Juanma Barranquero <lekktu@gmail.com>
parents: 49328
diff changeset
631 (ls-lisp-format-file-size file-size (memq ?h switches))
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
632 " "
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
633 (ls-lisp-format-time file-attr time-index now)
622
1d4abb4dfecb (dired-lisp-format-time): in Emacs 19 we can format times.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 417
diff changeset
634 " "
57219
fb4fab5030ec (ls-lisp-format): Mark file names with poperty dired-filename.
Lars Hansen <larsh@soem.dk>
parents: 53320
diff changeset
635 (propertize file-name 'dired-filename t)
183
121e45aa6ad0 Initial revision
Sebastian Kremer <sk@thp.uni-koeln.de>
parents:
diff changeset
636 (if (stringp file-type) ; is a symbolic link
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
637 (concat " -> " file-type))
183
121e45aa6ad0 Initial revision
Sebastian Kremer <sk@thp.uni-koeln.de>
parents:
diff changeset
638 "\n"
121e45aa6ad0 Initial revision
Sebastian Kremer <sk@thp.uni-koeln.de>
parents:
diff changeset
639 )))
121e45aa6ad0 Initial revision
Sebastian Kremer <sk@thp.uni-koeln.de>
parents:
diff changeset
640
1334
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
641 (defun ls-lisp-time-index (switches)
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
642 "Return time index into file-attributes according to ls SWITCHES list.
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
643 Return nil if no time switch found."
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
644 ;; FJW: Default of nil is IMPORTANT and used in `ls-lisp-handle-switches'!
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
645 (cond ((memq ?c switches) 6) ; last mode change
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
646 ((memq ?t switches) 5) ; last modtime
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
647 ((memq ?u switches) 4))) ; last access
626
ff8773516db2 (dired-lisp-handle-switches): understands `-t' now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 623
diff changeset
648
40755
08abdcc6bcf5 (ls-lisp-time-to-seconds): New function.
Paul Eggert <eggert@twinsun.com>
parents: 38412
diff changeset
649 (defun ls-lisp-time-to-seconds (time)
08abdcc6bcf5 (ls-lisp-time-to-seconds): New function.
Paul Eggert <eggert@twinsun.com>
parents: 38412
diff changeset
650 "Convert TIME to a floating point number."
08abdcc6bcf5 (ls-lisp-time-to-seconds): New function.
Paul Eggert <eggert@twinsun.com>
parents: 38412
diff changeset
651 (+ (* (car time) 65536.0)
08abdcc6bcf5 (ls-lisp-time-to-seconds): New function.
Paul Eggert <eggert@twinsun.com>
parents: 38412
diff changeset
652 (cadr time)
08abdcc6bcf5 (ls-lisp-time-to-seconds): New function.
Paul Eggert <eggert@twinsun.com>
parents: 38412
diff changeset
653 (/ (or (nth 2 time) 0) 1000000.0)))
08abdcc6bcf5 (ls-lisp-time-to-seconds): New function.
Paul Eggert <eggert@twinsun.com>
parents: 38412
diff changeset
654
34884
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
655 (defun ls-lisp-format-time (file-attr time-index now)
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
656 "Format time for file with attributes FILE-ATTR according to TIME-INDEX.
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
657 Use the same method as ls to decide whether to show time-of-day or year,
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
658 depending on distance between file date and NOW.
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
659 All ls time options, namely c, t and u, are handled."
469d99929953 From Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 26914
diff changeset
660 (let* ((time (nth (or time-index 5) file-attr)) ; default is last modtime
40755
08abdcc6bcf5 (ls-lisp-time-to-seconds): New function.
Paul Eggert <eggert@twinsun.com>
parents: 38412
diff changeset
661 (diff (- (ls-lisp-time-to-seconds time)
08abdcc6bcf5 (ls-lisp-time-to-seconds): New function.
Paul Eggert <eggert@twinsun.com>
parents: 38412
diff changeset
662 (ls-lisp-time-to-seconds now)))
08abdcc6bcf5 (ls-lisp-time-to-seconds): New function.
Paul Eggert <eggert@twinsun.com>
parents: 38412
diff changeset
663 ;; Consider a time to be recent if it is within the past six
08abdcc6bcf5 (ls-lisp-time-to-seconds): New function.
Paul Eggert <eggert@twinsun.com>
parents: 38412
diff changeset
664 ;; months. A Gregorian year has 365.2425 * 24 * 60 * 60 ==
08abdcc6bcf5 (ls-lisp-time-to-seconds): New function.
Paul Eggert <eggert@twinsun.com>
parents: 38412
diff changeset
665 ;; 31556952 seconds on the average, and half of that is 15778476.
08abdcc6bcf5 (ls-lisp-time-to-seconds): New function.
Paul Eggert <eggert@twinsun.com>
parents: 38412
diff changeset
666 ;; Write the constant explicitly to avoid roundoff error.
08abdcc6bcf5 (ls-lisp-time-to-seconds): New function.
Paul Eggert <eggert@twinsun.com>
parents: 38412
diff changeset
667 (past-cutoff -15778476)) ; half a Gregorian year
24660
809c3c8f6b77 (ls-lisp-format-time): Trap errors from
Andrew Innes <andrewi@gnu.org>
parents: 24436
diff changeset
668 (condition-case nil
40755
08abdcc6bcf5 (ls-lisp-time-to-seconds): New function.
Paul Eggert <eggert@twinsun.com>
parents: 38412
diff changeset
669 ;; Use traditional time format in the C or POSIX locale,
08abdcc6bcf5 (ls-lisp-time-to-seconds): New function.
Paul Eggert <eggert@twinsun.com>
parents: 38412
diff changeset
670 ;; ISO-style time format otherwise, so columns line up.
08abdcc6bcf5 (ls-lisp-time-to-seconds): New function.
Paul Eggert <eggert@twinsun.com>
parents: 38412
diff changeset
671 (let ((locale system-time-locale))
08abdcc6bcf5 (ls-lisp-time-to-seconds): New function.
Paul Eggert <eggert@twinsun.com>
parents: 38412
diff changeset
672 (if (not locale)
08abdcc6bcf5 (ls-lisp-time-to-seconds): New function.
Paul Eggert <eggert@twinsun.com>
parents: 38412
diff changeset
673 (let ((vars '("LC_ALL" "LC_TIME" "LANG")))
08abdcc6bcf5 (ls-lisp-time-to-seconds): New function.
Paul Eggert <eggert@twinsun.com>
parents: 38412
diff changeset
674 (while (and vars (not (setq locale (getenv (car vars)))))
08abdcc6bcf5 (ls-lisp-time-to-seconds): New function.
Paul Eggert <eggert@twinsun.com>
parents: 38412
diff changeset
675 (setq vars (cdr vars)))))
08abdcc6bcf5 (ls-lisp-time-to-seconds): New function.
Paul Eggert <eggert@twinsun.com>
parents: 38412
diff changeset
676 (if (member locale '("C" "POSIX"))
08abdcc6bcf5 (ls-lisp-time-to-seconds): New function.
Paul Eggert <eggert@twinsun.com>
parents: 38412
diff changeset
677 (setq locale nil))
08abdcc6bcf5 (ls-lisp-time-to-seconds): New function.
Paul Eggert <eggert@twinsun.com>
parents: 38412
diff changeset
678 (format-time-string
08abdcc6bcf5 (ls-lisp-time-to-seconds): New function.
Paul Eggert <eggert@twinsun.com>
parents: 38412
diff changeset
679 (if (and (<= past-cutoff diff) (<= diff 0))
75426
7b38b48667a7 (ls-lisp-use-localized-time-format): New defcustom.
Eli Zaretskii <eliz@gnu.org>
parents: 75347
diff changeset
680 (if (and locale (not ls-lisp-use-localized-time-format))
7b38b48667a7 (ls-lisp-use-localized-time-format): New defcustom.
Eli Zaretskii <eliz@gnu.org>
parents: 75347
diff changeset
681 "%m-%d %H:%M"
7b38b48667a7 (ls-lisp-use-localized-time-format): New defcustom.
Eli Zaretskii <eliz@gnu.org>
parents: 75347
diff changeset
682 (nth 0 ls-lisp-format-time-list))
7b38b48667a7 (ls-lisp-use-localized-time-format): New defcustom.
Eli Zaretskii <eliz@gnu.org>
parents: 75347
diff changeset
683 (if (and locale (not ls-lisp-use-localized-time-format))
7b38b48667a7 (ls-lisp-use-localized-time-format): New defcustom.
Eli Zaretskii <eliz@gnu.org>
parents: 75347
diff changeset
684 "%Y-%m-%d "
7b38b48667a7 (ls-lisp-use-localized-time-format): New defcustom.
Eli Zaretskii <eliz@gnu.org>
parents: 75347
diff changeset
685 (nth 1 ls-lisp-format-time-list)))
40755
08abdcc6bcf5 (ls-lisp-time-to-seconds): New function.
Paul Eggert <eggert@twinsun.com>
parents: 38412
diff changeset
686 time))
24854
2f2786f7d960 (ls-lisp-format-time): If timestamp is invalid,
Andrew Innes <andrewi@gnu.org>
parents: 24660
diff changeset
687 (error "Unk 0 0000"))))
622
1d4abb4dfecb (dired-lisp-format-time): in Emacs 19 we can format times.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 417
diff changeset
688
50767
5e248d2a95e7 (ls-lisp-format-file-size): New function to implement "-h" switch.
Juanma Barranquero <lekktu@gmail.com>
parents: 49328
diff changeset
689 (defun ls-lisp-format-file-size (file-size human-readable)
94345
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
690 (if (not human-readable)
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
691 (format (if (floatp file-size)
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
692 ls-lisp-filesize-f-fmt
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
693 ls-lisp-filesize-d-fmt)
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
694 file-size)
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
695 (if (< file-size 1024)
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
696 (format " %4d" file-size)
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
697 (do ((file-size (/ file-size 1024.0) (/ file-size 1024.0))
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
698 ;; kilo, mega, giga, tera, peta, exa
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
699 (post-fixes (list "k" "M" "G" "T" "P" "E") (cdr post-fixes)))
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
700 ((< file-size 1024)
4ebe66bf947b (ls-lisp-uid-d-fmt, ls-lisp-uid-s-fmt, ls-lisp-gid-d-fmt)
Eli Zaretskii <eliz@gnu.org>
parents: 94341
diff changeset
701 (format " %3.0f%s" file-size (car post-fixes)))))))
50767
5e248d2a95e7 (ls-lisp-format-file-size): New function to implement "-h" switch.
Juanma Barranquero <lekktu@gmail.com>
parents: 49328
diff changeset
702
1334
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
703 (provide 'ls-lisp)
622
1d4abb4dfecb (dired-lisp-format-time): in Emacs 19 we can format times.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 417
diff changeset
704
93975
1e3a407766b9 Fix up comment convention on the arch-tag lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93697
diff changeset
705 ;; arch-tag: e55f399b-05ec-425c-a6d5-f5e349c35ab4
2233
fb0ed5a1d0f3 Add standard library headers.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1672
diff changeset
706 ;;; ls-lisp.el ends here