annotate lisp/ls-lisp.el @ 24419:30e478cd167e

(shell-command-default-error-buffer): Renamed from shell-command-on-region-default-error-buffer. (shell-command-on-region): Mention in echo area when there is some error output. Mention success or failure, too. Accumulate multiple error outputs going forward, with formfeed in between. Display the error buffer when we have put something in it. (shell-command): Add the ERROR-BUFFER argument feature.
author Karl Heuer <kwzh@gnu.org>
date Mon, 01 Mar 1999 03:19:32 +0000
parents 40be509c47c2
children 3b5ee0390edd
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
22154
86791cda515c Update copyright notice.
Richard M. Stallman <rms@gnu.org>
parents: 21620
diff changeset
3 ;; Copyright (C) 1992, 1994 Free Software Foundation, Inc.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13883
diff changeset
4
2233
fb0ed5a1d0f3 Add standard library headers.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1672
diff changeset
5 ;; Author: Sebastian Kremer <sk@thp.uni-koeln.de>
17977
727cf56647a4 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 16098
diff changeset
6 ;; Maintainer: FSF
2233
fb0ed5a1d0f3 Add standard library headers.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1672
diff changeset
7 ;; Keywords: unix
183
121e45aa6ad0 Initial revision
Sebastian Kremer <sk@thp.uni-koeln.de>
parents:
diff changeset
8
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13883
diff changeset
9 ;; This file is part of GNU Emacs.
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 ;; 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
12 ;; it under the terms of the GNU General Public License as published by
12244
ac7375e60931 Update GPL to version 2.
Karl Heuer <kwzh@gnu.org>
parents: 8409
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
183
121e45aa6ad0 Initial revision
Sebastian Kremer <sk@thp.uni-koeln.de>
parents:
diff changeset
14 ;; any later version.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13883
diff changeset
15
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13883
diff changeset
16 ;; 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
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
121e45aa6ad0 Initial revision
Sebastian Kremer <sk@thp.uni-koeln.de>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
121e45aa6ad0 Initial revision
Sebastian Kremer <sk@thp.uni-koeln.de>
parents:
diff changeset
19 ;; GNU General Public License for more details.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13883
diff changeset
20
183
121e45aa6ad0 Initial revision
Sebastian Kremer <sk@thp.uni-koeln.de>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13883
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13883
diff changeset
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13883
diff changeset
24 ;; Boston, MA 02111-1307, USA.
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
622
1d4abb4dfecb (dired-lisp-format-time): in Emacs 19 we can format times.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 417
diff changeset
28 ;; INSTALLATION =======================================================
1d4abb4dfecb (dired-lisp-format-time): in Emacs 19 we can format times.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 417
diff changeset
29 ;;
1334
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
30 ;; Put this file into your load-path. To use it, load it
3916
b3f0b10b39c8 (insert-directory): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 3789
diff changeset
31 ;; with (load "ls-lisp").
623
347a8db13650 Doc fixes.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 622
diff changeset
32
622
1d4abb4dfecb (dired-lisp-format-time): in Emacs 19 we can format times.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 417
diff changeset
33 ;; OVERVIEW ===========================================================
183
121e45aa6ad0 Initial revision
Sebastian Kremer <sk@thp.uni-koeln.de>
parents:
diff changeset
34
1334
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
35 ;; This file overloads the function insert-directory to implement it
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
36 ;; directly from Emacs lisp, without running `ls' in a subprocess.
622
1d4abb4dfecb (dired-lisp-format-time): in Emacs 19 we can format times.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 417
diff changeset
37
1334
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
38 ;; It is useful if you cannot afford to fork Emacs on a real memory UNIX,
622
1d4abb4dfecb (dired-lisp-format-time): in Emacs 19 we can format times.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 417
diff changeset
39 ;; under VMS, or if you don't have the ls program, or if you want
1d4abb4dfecb (dired-lisp-format-time): in Emacs 19 we can format times.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 417
diff changeset
40 ;; different format from what ls offers.
183
121e45aa6ad0 Initial revision
Sebastian Kremer <sk@thp.uni-koeln.de>
parents:
diff changeset
41
1334
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
42 ;; This function uses regexps instead of shell
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
43 ;; wildcards. If you enter regexps remember to double each $ sign.
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
44 ;; For example, to include files *.el, enter `.*\.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
45 ;; resulting in the regexp `.*\.el$'.
1d4abb4dfecb (dired-lisp-format-time): in Emacs 19 we can format times.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 417
diff changeset
46
1d4abb4dfecb (dired-lisp-format-time): in Emacs 19 we can format times.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 417
diff changeset
47 ;; RESTRICTIONS =====================================================
1d4abb4dfecb (dired-lisp-format-time): in Emacs 19 we can format times.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 417
diff changeset
48
1334
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
49 ;; * many ls switches are ignored, see docstring of `insert-directory'.
183
121e45aa6ad0 Initial revision
Sebastian Kremer <sk@thp.uni-koeln.de>
parents:
diff changeset
50
622
1d4abb4dfecb (dired-lisp-format-time): in Emacs 19 we can format times.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 417
diff changeset
51 ;; * Only numeric uid/gid
183
121e45aa6ad0 Initial revision
Sebastian Kremer <sk@thp.uni-koeln.de>
parents:
diff changeset
52
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 ;; TODO ==============================================================
1d4abb4dfecb (dired-lisp-format-time): in Emacs 19 we can format times.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 417
diff changeset
54
623
347a8db13650 Doc fixes.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 622
diff changeset
55 ;; Recognize some more ls switches: R F
622
1d4abb4dfecb (dired-lisp-format-time): in Emacs 19 we can format times.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 417
diff changeset
56
2233
fb0ed5a1d0f3 Add standard library headers.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1672
diff changeset
57 ;;; Code:
fb0ed5a1d0f3 Add standard library headers.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1672
diff changeset
58
14213
aaa459c274b9 (ls-lisp-support-shell-wildcards): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
59 ;;;###autoload
13883
a4eef7470b6b (ls-lisp-support-shell-wildcards): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
60 (defvar ls-lisp-support-shell-wildcards t
a4eef7470b6b (ls-lisp-support-shell-wildcards): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
61 "*Non-nil means file patterns are treated as shell wildcards.
a4eef7470b6b (ls-lisp-support-shell-wildcards): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
62 nil means they are treated as Emacs regexps (for backward compatibility).
a4eef7470b6b (ls-lisp-support-shell-wildcards): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
63 This variable is checked by \\[insert-directory] only when `ls-lisp.el'
a4eef7470b6b (ls-lisp-support-shell-wildcards): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
64 package is used.")
a4eef7470b6b (ls-lisp-support-shell-wildcards): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
65
21620
611b5f660ee6 (ls-lisp-dired-ignore-case): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 17977
diff changeset
66 (defvar ls-lisp-dired-ignore-case nil
611b5f660ee6 (ls-lisp-dired-ignore-case): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 17977
diff changeset
67 "Non-nil causes dired buffers to sort alphabetically regardless of case.")
611b5f660ee6 (ls-lisp-dired-ignore-case): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 17977
diff changeset
68
23452
f0077d5425f2 (ls-lisp-use-insert-directory-program): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 22154
diff changeset
69 (defvar ls-lisp-use-insert-directory-program nil
f0077d5425f2 (ls-lisp-use-insert-directory-program): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 22154
diff changeset
70 "Non-nil causes ls-lisp to revert back to using `insert-directory-program'.
f0077d5425f2 (ls-lisp-use-insert-directory-program): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 22154
diff changeset
71 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
72 Microsoft Windows, but you would still like to use a program to list
f0077d5425f2 (ls-lisp-use-insert-directory-program): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 22154
diff changeset
73 the contents of a directory.")
f0077d5425f2 (ls-lisp-use-insert-directory-program): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 22154
diff changeset
74
f0077d5425f2 (ls-lisp-use-insert-directory-program): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 22154
diff changeset
75 ;; Remember the original insert-directory function.
f0077d5425f2 (ls-lisp-use-insert-directory-program): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 22154
diff changeset
76 (fset 'original-insert-directory (symbol-function 'insert-directory))
f0077d5425f2 (ls-lisp-use-insert-directory-program): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 22154
diff changeset
77
f0077d5425f2 (ls-lisp-use-insert-directory-program): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 22154
diff changeset
78 (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
79 "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
80 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
81 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
82 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
83 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
84 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
85
f0077d5425f2 (ls-lisp-use-insert-directory-program): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 22154
diff changeset
86 This version of the function comes from `ls-lisp.el'. Depending upon
f0077d5425f2 (ls-lisp-use-insert-directory-program): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 22154
diff changeset
87 the value of `ls-lisp-use-insert-directory-program', it will use an
f0077d5425f2 (ls-lisp-use-insert-directory-program): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 22154
diff changeset
88 external program if non-nil or the lisp function `ls-lisp-insert-directory'
f0077d5425f2 (ls-lisp-use-insert-directory-program): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 22154
diff changeset
89 otherwise."
f0077d5425f2 (ls-lisp-use-insert-directory-program): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 22154
diff changeset
90 (if ls-lisp-use-insert-directory-program
f0077d5425f2 (ls-lisp-use-insert-directory-program): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 22154
diff changeset
91 (original-insert-directory file switches wildcard full-directory-p)
f0077d5425f2 (ls-lisp-use-insert-directory-program): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 22154
diff changeset
92 (ls-lisp-insert-directory file switches wildcard full-directory-p)))
f0077d5425f2 (ls-lisp-use-insert-directory-program): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 22154
diff changeset
93
f0077d5425f2 (ls-lisp-use-insert-directory-program): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 22154
diff changeset
94 (defun ls-lisp-insert-directory (file switches &optional wildcard full-directory-p)
13883
a4eef7470b6b (ls-lisp-support-shell-wildcards): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
95 "Insert directory listing for FILE, formatted according to SWITCHES.
1334
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
96 Leaves point after the inserted text.
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
97 Optional third arg WILDCARD means treat FILE as shell wildcard.
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
98 Optional fourth arg FULL-DIRECTORY-P means file is a directory and
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
99 switches do not contain `d', so that a full listing is expected.
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
100
23452
f0077d5425f2 (ls-lisp-use-insert-directory-program): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 22154
diff changeset
101 This version of the function comes from `ls-lisp.el'. It does not
13883
a4eef7470b6b (ls-lisp-support-shell-wildcards): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
102 run any external programs or shells. It supports ordinary shell
a4eef7470b6b (ls-lisp-support-shell-wildcards): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
103 wildcards if `ls-lisp-support-shell-wildcards' variable is non-nil;
a4eef7470b6b (ls-lisp-support-shell-wildcards): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
104 otherwise, it interprets wildcards as regular expressions to match
a4eef7470b6b (ls-lisp-support-shell-wildcards): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
105 file names.
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
106
13883
a4eef7470b6b (ls-lisp-support-shell-wildcards): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
107 Not all `ls' switches are supported. The switches that work
a4eef7470b6b (ls-lisp-support-shell-wildcards): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
108 are: A a c i r S s t u"
7030
9e51b51e8595 Pass operation to find-file-name-handler.
Karl Heuer <kwzh@gnu.org>
parents: 5457
diff changeset
109 (let ((handler (find-file-name-handler file 'insert-directory)))
1334
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
110 (if handler
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
111 (funcall handler 'insert-directory file switches
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
112 wildcard full-directory-p)
13883
a4eef7470b6b (ls-lisp-support-shell-wildcards): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
113 ;; Sometimes we get ".../foo*/" as FILE. While the shell and
a4eef7470b6b (ls-lisp-support-shell-wildcards): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
114 ;; `ls' don't mind, we certainly do, because it makes us think
a4eef7470b6b (ls-lisp-support-shell-wildcards): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
115 ;; there is no wildcard, only a directory name.
a4eef7470b6b (ls-lisp-support-shell-wildcards): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
116 (if (and ls-lisp-support-shell-wildcards
a4eef7470b6b (ls-lisp-support-shell-wildcards): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
117 (string-match "[[?*]" file))
a4eef7470b6b (ls-lisp-support-shell-wildcards): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
118 (progn
a4eef7470b6b (ls-lisp-support-shell-wildcards): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
119 (or (not (eq (aref file (1- (length file))) ?/))
a4eef7470b6b (ls-lisp-support-shell-wildcards): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
120 (setq file (substring file 0 (1- (length file)))))
a4eef7470b6b (ls-lisp-support-shell-wildcards): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
121 (setq wildcard t)))
3789
0af7cedb1081 * ls-lisp.el (insert-directory): If no handler, convert SWITCHES
Jim Blandy <jimb@redhat.com>
parents: 2233
diff changeset
122 ;; Convert SWITCHES to a list of characters.
0af7cedb1081 * ls-lisp.el (insert-directory): If no handler, convert SWITCHES
Jim Blandy <jimb@redhat.com>
parents: 2233
diff changeset
123 (setq switches (append switches nil))
1334
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
124 (if wildcard
13883
a4eef7470b6b (ls-lisp-support-shell-wildcards): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
125 (setq wildcard
a4eef7470b6b (ls-lisp-support-shell-wildcards): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
126 (if ls-lisp-support-shell-wildcards
a4eef7470b6b (ls-lisp-support-shell-wildcards): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
127 (wildcard-to-regexp (file-name-nondirectory file))
a4eef7470b6b (ls-lisp-support-shell-wildcards): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
128 (file-name-nondirectory file))
1334
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
129 file (file-name-directory file)))
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
130 (if (or wildcard
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
131 full-directory-p)
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
132 (let* ((dir (file-name-as-directory file))
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
133 (default-directory dir);; so that file-attributes works
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
134 (sum 0)
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
135 elt
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
136 short
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
137 (file-list (directory-files dir nil wildcard))
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
138 file-alist
16098
b463288de0a8 (insert-directory): Use same value of `now' for all files.
Richard M. Stallman <rms@gnu.org>
parents: 14213
diff changeset
139 (now (current-time))
1334
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
140 ;; do all bindings here for speed
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
141 fil attr)
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
142 (cond ((memq ?A switches)
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
143 (setq file-list
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
144 (ls-lisp-delete-matching "^\\.\\.?$" file-list)))
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
145 ((not (memq ?a switches))
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
146 ;; if neither -A nor -a, flush . files
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
147 (setq file-list
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
148 (ls-lisp-delete-matching "^\\." file-list))))
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
149 (setq file-alist
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
150 (mapcar
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
151 (function
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
152 (lambda (x)
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
153 ;; file-attributes("~bogus") bombs
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
154 (cons x (file-attributes (expand-file-name x)))))
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
155 ;; inserting the call to directory-files right here
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
156 ;; seems to stimulate an Emacs bug
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
157 ;; ILLEGAL DATATYPE (#o37777777727) or #o67
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
158 file-list))
13883
a4eef7470b6b (ls-lisp-support-shell-wildcards): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
159 ;; ``Total'' line (filled in afterwards).
a4eef7470b6b (ls-lisp-support-shell-wildcards): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
160 (insert (if (car-safe file-alist)
a4eef7470b6b (ls-lisp-support-shell-wildcards): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
161 "total \007\n"
a4eef7470b6b (ls-lisp-support-shell-wildcards): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
162 ;; Shell says ``No match'' if no files match
a4eef7470b6b (ls-lisp-support-shell-wildcards): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
163 ;; the wildcard; let's say something similar.
a4eef7470b6b (ls-lisp-support-shell-wildcards): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
164 "(No match)\ntotal \007\n"))
1334
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
165 (setq file-alist
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
166 (ls-lisp-handle-switches file-alist switches))
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
167 (while file-alist
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
168 (setq elt (car file-alist)
8409
4a27ca4bcdf4 (insert-directory): Gracefully handle the case
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
169 file-alist (cdr file-alist)
1334
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
170 short (car elt)
8409
4a27ca4bcdf4 (insert-directory): Gracefully handle the case
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
171 attr (cdr elt))
4a27ca4bcdf4 (insert-directory): Gracefully handle the case
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
172 (and attr
4a27ca4bcdf4 (insert-directory): Gracefully handle the case
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
173 (setq sum (+ sum (nth 7 attr)))
16098
b463288de0a8 (insert-directory): Use same value of `now' for all files.
Richard M. Stallman <rms@gnu.org>
parents: 14213
diff changeset
174 (insert (ls-lisp-format short attr switches now))))
1334
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
175 ;; Fill in total size of all files:
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
176 (save-excursion
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
177 (search-backward "total \007")
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
178 (goto-char (match-end 0))
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
179 (delete-char -1)
24329
40be509c47c2 (ls-lisp-insert-directory): Call fceiling to round
Eli Zaretskii <eliz@gnu.org>
parents: 23452
diff changeset
180 (insert (format "%.0f" (fceiling (/ sum 1024.0))))))
1334
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
181 ;; if not full-directory-p, FILE *must not* end in /, as
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
182 ;; file-attributes will not recognize a symlink to a directory
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
183 ;; must make it a relative filename as ls does:
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
184 (setq file (file-name-nondirectory file))
16098
b463288de0a8 (insert-directory): Use same value of `now' for all files.
Richard M. Stallman <rms@gnu.org>
parents: 14213
diff changeset
185 (insert (ls-lisp-format file (file-attributes file) switches
b463288de0a8 (insert-directory): Use same value of `now' for all files.
Richard M. Stallman <rms@gnu.org>
parents: 14213
diff changeset
186 (current-time)))))))
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
187
1334
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
188 (defun ls-lisp-delete-matching (regexp 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
189 ;; 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
190 ;; 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
191 (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
192 (while 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
193 (or (string-match regexp (car 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
194 (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
195 (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
196 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
197
1334
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
198 (defun ls-lisp-handle-switches (file-alist switches)
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
199 ;; FILE-ALIST's elements are (FILE . FILE-ATTRIBUTES).
622
1d4abb4dfecb (dired-lisp-format-time): in Emacs 19 we can format times.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 417
diff changeset
200 ;; Return new alist sorted according to SWITCHES which is a list of
1d4abb4dfecb (dired-lisp-format-time): in Emacs 19 we can format times.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 417
diff changeset
201 ;; characters. Default sorting is alphabetically.
626
ff8773516db2 (dired-lisp-handle-switches): understands `-t' now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 623
diff changeset
202 (let (index)
ff8773516db2 (dired-lisp-handle-switches): understands `-t' now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 623
diff changeset
203 (setq file-alist
ff8773516db2 (dired-lisp-handle-switches): understands `-t' now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 623
diff changeset
204 (sort file-alist
ff8773516db2 (dired-lisp-handle-switches): understands `-t' now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 623
diff changeset
205 (cond ((memq ?S switches) ; sorted on size
ff8773516db2 (dired-lisp-handle-switches): understands `-t' now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 623
diff changeset
206 (function
ff8773516db2 (dired-lisp-handle-switches): understands `-t' now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 623
diff changeset
207 (lambda (x y)
ff8773516db2 (dired-lisp-handle-switches): understands `-t' now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 623
diff changeset
208 ;; 7th file attribute is file size
ff8773516db2 (dired-lisp-handle-switches): understands `-t' now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 623
diff changeset
209 ;; Make largest file come first
ff8773516db2 (dired-lisp-handle-switches): understands `-t' now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 623
diff changeset
210 (< (nth 7 (cdr y))
ff8773516db2 (dired-lisp-handle-switches): understands `-t' now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 623
diff changeset
211 (nth 7 (cdr x))))))
ff8773516db2 (dired-lisp-handle-switches): understands `-t' now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 623
diff changeset
212 ((memq ?t switches) ; sorted on time
1334
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
213 (setq index (ls-lisp-time-index switches))
626
ff8773516db2 (dired-lisp-handle-switches): understands `-t' now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 623
diff changeset
214 (function
ff8773516db2 (dired-lisp-handle-switches): understands `-t' now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 623
diff changeset
215 (lambda (x y)
1334
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
216 (ls-lisp-time-lessp (nth index (cdr y))
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
217 (nth index (cdr x))))))
626
ff8773516db2 (dired-lisp-handle-switches): understands `-t' now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 623
diff changeset
218 (t ; sorted alphabetically
21620
611b5f660ee6 (ls-lisp-dired-ignore-case): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 17977
diff changeset
219 (if ls-lisp-dired-ignore-case
611b5f660ee6 (ls-lisp-dired-ignore-case): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 17977
diff changeset
220 (function
611b5f660ee6 (ls-lisp-dired-ignore-case): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 17977
diff changeset
221 (lambda (x y)
611b5f660ee6 (ls-lisp-dired-ignore-case): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 17977
diff changeset
222 (string-lessp (upcase (car x))
611b5f660ee6 (ls-lisp-dired-ignore-case): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 17977
diff changeset
223 (upcase (car y)))))
611b5f660ee6 (ls-lisp-dired-ignore-case): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 17977
diff changeset
224 (function
611b5f660ee6 (ls-lisp-dired-ignore-case): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 17977
diff changeset
225 (lambda (x y)
611b5f660ee6 (ls-lisp-dired-ignore-case): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 17977
diff changeset
226 (string-lessp (car x)
611b5f660ee6 (ls-lisp-dired-ignore-case): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 17977
diff changeset
227 (car y))))))))))
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
228 (if (memq ?r switches) ; reverse sort order
954d6271f0e9 (dired-lisp-ls): handles A a S r i s switches now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 185
diff changeset
229 (setq file-alist (nreverse file-alist)))
954d6271f0e9 (dired-lisp-ls): handles A a S r i s switches now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 185
diff changeset
230 file-alist)
183
121e45aa6ad0 Initial revision
Sebastian Kremer <sk@thp.uni-koeln.de>
parents:
diff changeset
231
626
ff8773516db2 (dired-lisp-handle-switches): understands `-t' now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 623
diff changeset
232 ;; 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
233 (defun ls-lisp-time-lessp (time0 time1)
626
ff8773516db2 (dired-lisp-handle-switches): understands `-t' now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 623
diff changeset
234 (let ((hi0 (car time0))
ff8773516db2 (dired-lisp-handle-switches): understands `-t' now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 623
diff changeset
235 (hi1 (car time1))
ff8773516db2 (dired-lisp-handle-switches): understands `-t' now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 623
diff changeset
236 (lo0 (car (cdr time0)))
ff8773516db2 (dired-lisp-handle-switches): understands `-t' now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 623
diff changeset
237 (lo1 (car (cdr time1))))
ff8773516db2 (dired-lisp-handle-switches): understands `-t' now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 623
diff changeset
238 (or (< hi0 hi1)
ff8773516db2 (dired-lisp-handle-switches): understands `-t' now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 623
diff changeset
239 (and (= hi0 hi1)
ff8773516db2 (dired-lisp-handle-switches): understands `-t' now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 623
diff changeset
240 (< lo0 lo1)))))
ff8773516db2 (dired-lisp-handle-switches): understands `-t' now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 623
diff changeset
241
ff8773516db2 (dired-lisp-handle-switches): understands `-t' now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 623
diff changeset
242
16098
b463288de0a8 (insert-directory): Use same value of `now' for all files.
Richard M. Stallman <rms@gnu.org>
parents: 14213
diff changeset
243 (defun ls-lisp-format (file-name file-attr switches now)
183
121e45aa6ad0 Initial revision
Sebastian Kremer <sk@thp.uni-koeln.de>
parents:
diff changeset
244 (let ((file-type (nth 0 file-attr)))
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
245 (concat (if (memq ?i switches) ; inode number
417
51793184f9a9 (dired-lisp-format): format can pad after all.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 416
diff changeset
246 (format "%6d " (nth 10 file-attr)))
51793184f9a9 (dired-lisp-format): format can pad after all.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 416
diff changeset
247 ;; 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
248 (if (memq ?s switches) ; size in K
24329
40be509c47c2 (ls-lisp-insert-directory): Call fceiling to round
Eli Zaretskii <eliz@gnu.org>
parents: 23452
diff changeset
249 (format "%4d " (fceiling (/ (nth 7 file-attr) 1024.0))))
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
250 (nth 8 file-attr) ; permission bits
183
121e45aa6ad0 Initial revision
Sebastian Kremer <sk@thp.uni-koeln.de>
parents:
diff changeset
251 ;; 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
252 ;; Emacs should be able to make strings of them.
954d6271f0e9 (dired-lisp-ls): handles A a S r i s switches now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 185
diff changeset
253 ;; user-login-name and user-full-name could take an
954d6271f0e9 (dired-lisp-ls): handles A a S r i s switches now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 185
diff changeset
254 ;; optional arg.
13883
a4eef7470b6b (ls-lisp-support-shell-wildcards): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
255 (format " %3d %-8s %-8s %8d "
417
51793184f9a9 (dired-lisp-format): format can pad after all.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 416
diff changeset
256 (nth 1 file-attr) ; no. of links
3916
b3f0b10b39c8 (insert-directory): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 3789
diff changeset
257 (if (= (user-uid) (nth 2 file-attr))
b3f0b10b39c8 (insert-directory): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 3789
diff changeset
258 (user-login-name)
5457
4fe8a94b0aa6 (ls-lisp-format): Bad format for uid and gid fixed.
Richard M. Stallman <rms@gnu.org>
parents: 3916
diff changeset
259 (int-to-string (nth 2 file-attr))) ; uid
3916
b3f0b10b39c8 (insert-directory): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 3789
diff changeset
260 (if (eq system-type 'ms-dos)
b3f0b10b39c8 (insert-directory): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 3789
diff changeset
261 "root" ; everything is root on MSDOS.
5457
4fe8a94b0aa6 (ls-lisp-format): Bad format for uid and gid fixed.
Richard M. Stallman <rms@gnu.org>
parents: 3916
diff changeset
262 (int-to-string (nth 3 file-attr))) ; gid
417
51793184f9a9 (dired-lisp-format): format can pad after all.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 416
diff changeset
263 (nth 7 file-attr) ; size in bytes
51793184f9a9 (dired-lisp-format): format can pad after all.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 416
diff changeset
264 )
16098
b463288de0a8 (insert-directory): Use same value of `now' for all files.
Richard M. Stallman <rms@gnu.org>
parents: 14213
diff changeset
265 (ls-lisp-format-time file-attr switches 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
266 " "
183
121e45aa6ad0 Initial revision
Sebastian Kremer <sk@thp.uni-koeln.de>
parents:
diff changeset
267 file-name
121e45aa6ad0 Initial revision
Sebastian Kremer <sk@thp.uni-koeln.de>
parents:
diff changeset
268 (if (stringp file-type) ; is a symbolic link
121e45aa6ad0 Initial revision
Sebastian Kremer <sk@thp.uni-koeln.de>
parents:
diff changeset
269 (concat " -> " file-type)
121e45aa6ad0 Initial revision
Sebastian Kremer <sk@thp.uni-koeln.de>
parents:
diff changeset
270 "")
121e45aa6ad0 Initial revision
Sebastian Kremer <sk@thp.uni-koeln.de>
parents:
diff changeset
271 "\n"
121e45aa6ad0 Initial revision
Sebastian Kremer <sk@thp.uni-koeln.de>
parents:
diff changeset
272 )))
121e45aa6ad0 Initial revision
Sebastian Kremer <sk@thp.uni-koeln.de>
parents:
diff changeset
273
1334
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
274 (defun ls-lisp-time-index (switches)
626
ff8773516db2 (dired-lisp-handle-switches): understands `-t' now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 623
diff changeset
275 ;; Return index into file-attributes according to ls SWITCHES.
ff8773516db2 (dired-lisp-handle-switches): understands `-t' now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 623
diff changeset
276 (cond
ff8773516db2 (dired-lisp-handle-switches): understands `-t' now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 623
diff changeset
277 ((memq ?c switches) 6) ; last mode change
ff8773516db2 (dired-lisp-handle-switches): understands `-t' now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 623
diff changeset
278 ((memq ?u switches) 4) ; last access
ff8773516db2 (dired-lisp-handle-switches): understands `-t' now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 623
diff changeset
279 ;; default is last modtime
ff8773516db2 (dired-lisp-handle-switches): understands `-t' now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 623
diff changeset
280 (t 5)))
ff8773516db2 (dired-lisp-handle-switches): understands `-t' now.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 623
diff changeset
281
16098
b463288de0a8 (insert-directory): Use same value of `now' for all files.
Richard M. Stallman <rms@gnu.org>
parents: 14213
diff changeset
282 (defun ls-lisp-format-time (file-attr switches 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
283 ;; Format time string for file with attributes FILE-ATTR according
1d4abb4dfecb (dired-lisp-format-time): in Emacs 19 we can format times.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 417
diff changeset
284 ;; to SWITCHES (a list of ls option letters of which c and u are recognized).
16098
b463288de0a8 (insert-directory): Use same value of `now' for all files.
Richard M. Stallman <rms@gnu.org>
parents: 14213
diff changeset
285 ;; Use the same method as `ls' to decide whether to show time-of-day or year,
b463288de0a8 (insert-directory): Use same value of `now' for all files.
Richard M. Stallman <rms@gnu.org>
parents: 14213
diff changeset
286 ;; depending on distance between file date and NOW.
b463288de0a8 (insert-directory): Use same value of `now' for all files.
Richard M. Stallman <rms@gnu.org>
parents: 14213
diff changeset
287 (let* ((time (nth (ls-lisp-time-index switches) file-attr))
b463288de0a8 (insert-directory): Use same value of `now' for all files.
Richard M. Stallman <rms@gnu.org>
parents: 14213
diff changeset
288 (diff16 (- (car time) (car now)))
b463288de0a8 (insert-directory): Use same value of `now' for all files.
Richard M. Stallman <rms@gnu.org>
parents: 14213
diff changeset
289 (diff (+ (ash diff16 16) (- (car (cdr time)) (car (cdr now)))))
b463288de0a8 (insert-directory): Use same value of `now' for all files.
Richard M. Stallman <rms@gnu.org>
parents: 14213
diff changeset
290 (past-cutoff (- (* 6 30 24 60 60))) ; 6 30-day months
b463288de0a8 (insert-directory): Use same value of `now' for all files.
Richard M. Stallman <rms@gnu.org>
parents: 14213
diff changeset
291 (future-cutoff (* 60 60))) ; 1 hour
b463288de0a8 (insert-directory): Use same value of `now' for all files.
Richard M. Stallman <rms@gnu.org>
parents: 14213
diff changeset
292 (format-time-string
b463288de0a8 (insert-directory): Use same value of `now' for all files.
Richard M. Stallman <rms@gnu.org>
parents: 14213
diff changeset
293 (if (and
b463288de0a8 (insert-directory): Use same value of `now' for all files.
Richard M. Stallman <rms@gnu.org>
parents: 14213
diff changeset
294 (<= past-cutoff diff) (<= diff future-cutoff)
b463288de0a8 (insert-directory): Use same value of `now' for all files.
Richard M. Stallman <rms@gnu.org>
parents: 14213
diff changeset
295 ;; Sanity check in case `diff' computation overflowed.
b463288de0a8 (insert-directory): Use same value of `now' for all files.
Richard M. Stallman <rms@gnu.org>
parents: 14213
diff changeset
296 (<= (1- (ash past-cutoff -16)) diff16)
b463288de0a8 (insert-directory): Use same value of `now' for all files.
Richard M. Stallman <rms@gnu.org>
parents: 14213
diff changeset
297 (<= diff16 (1+ (ash future-cutoff -16))))
b463288de0a8 (insert-directory): Use same value of `now' for all files.
Richard M. Stallman <rms@gnu.org>
parents: 14213
diff changeset
298 "%b %e %H:%M"
b463288de0a8 (insert-directory): Use same value of `now' for all files.
Richard M. Stallman <rms@gnu.org>
parents: 14213
diff changeset
299 "%b %e %Y")
b463288de0a8 (insert-directory): Use same value of `now' for all files.
Richard M. Stallman <rms@gnu.org>
parents: 14213
diff changeset
300 time)))
622
1d4abb4dfecb (dired-lisp-format-time): in Emacs 19 we can format times.
Sebastian Kremer <sk@thp.uni-koeln.de>
parents: 417
diff changeset
301
1334
92791ed2d1eb Most functions renamed to start with ls-lisp.
Richard M. Stallman <rms@gnu.org>
parents: 1333
diff changeset
302 (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
303
2233
fb0ed5a1d0f3 Add standard library headers.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1672
diff changeset
304 ;;; ls-lisp.el ends here