annotate lisp/find-lisp.el @ 51151:fe11e703042b

Summary: MIME support added for e-mail processing that skips encoded regions. Allow user to skip saving Fcc messages with large attachments. Fixed region skipping bug with multi-line comments - e.g. tex $ regions spanning multiple lines. Added support for postscript and uuencoded regions. Redundant dictionary file names purged. Dictionary definition field name changed from "Character Set" to "Coding System". Fixed bug in reloading dictionaries. Modified headers to reflect new version. XEmacs menu now adds customize item. (ispell-check-version): No longer an aliased function. Returns library path if not called interactively. Variable `temporary-file-directory' protected if not loaded. (check-ispell-version): Now the alias for `ispell-check-version'. (ispell-message-fcc-skip): New variable that determines if and when to query about saving Fcc copy of message if an attachment is large. (ispell-skip-html): Declared buffer-local. (ispell-local-dictionary-alist): Docstring expanded. Tag name changed from "Character Set" to "Coding System". (ispell-dictionary-alist-1): Removed redundant command-line option to load brasileiro, british, and castellano dictionary files. (ispell-dictionary-alist-2): Removed redundant command-line option to load czech dictionary file. (ispell-dictionary-alist-3): Moved francais-tex here. (ispell-dictionary-alist-4): Removed german and german8 dictionaries. The deutsch ones are the correct definitions. `nederlands' and `nederlands8' dictionaries moved here. (ispell-dictionary-alist-5): `polish' and `portugues' dictionaries moved here. Removed redundant command-line option to `norsk' and `portugues'. (ispell-dictionary-alist-6): Removed redundant command-line option to load `russian' and `slovak' dictionary files. (ispell-dictionary-alist): Tag name changed from "Character Set" to "Coding System". (ispell-version): Updated to 3.6. (ispell-library-directory): Calls non-deprecated function. (ispell-valid-dictionary-list): New function returning all valid dictionaries on machine. (ispell-checking-message): Documentation string improved. (ispell-skip-region-alist): Added uuencoded and postscript region skipping. Improved http/e-mail/file regexp to not match `/.\w'. (ispell-html-skip-alists): New variable for html region support. (ispell-send-string): Removed redundant xemacs check. (ispell-word): Fix spelling error in documentation string, added extent information to support highlighting in ispell-minor-mode. (ispell-command-loop): Disable horizontal scrollbar in XEmacs choices buffer. (ispell-show-choices): Directly select `choices-window'. (ispell-help): Use default buffer size for electric help. (ispell-adjusted-window-height): Correct for xemacs detection. (ispell-start-process): Don't double specify dictionary file name. (ispell-init-process): Set `ispell-library-path' each call. (ispell-change-dictionary): Now only completes valid dictionaries. (ispell-region): Add support for MIME region skipping and Fcc message query for large attachments. (ispell-begin-skip-region-regexp): Add documentation string. Added message support and cleaned up code for generic and html regions. (ispell-begin-skip-region): Function is now requires alist argument. (ispell-begin-tex-skip-regexp): Added comments and support improved html and message regions. (ispell-skip-region-list): New function for MIME and region skipping. (ispell-tex-arg-end): Add documentation string. (ispell-ignore-fcc): New function to query saving Fcc message. (ispell-skip-region): Calculate alist for key match dynamically, html skipping pushed to alists. (ispell-get-line): Add support for multi-line comment regions. (ispell): Check that variables to continue spelling are bound. (ispell-message-text-end): Postscript and uuencoded regions now supported as MIME regions, rather than as end-of-message region. (ispell-mime-multipartp): New function supporting MIME. (ispell-mime-skip-part): New function supporting MIME. (ispell-message): Add MIME support. (ispell-buffer-local-parsing): Variable `ispell-skip-html' now local. (ispell-buffer-local-dict): Fixed bug for detecting and reloading new dictionary.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Thu, 22 May 2003 21:34:00 +0000
parents 853c3674f20a
children 695cf19ef79e d7ddb3e565de
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38431
853c3674f20a Fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 37471
diff changeset
1 ;;; find-lisp.el --- emulation of find in Emacs Lisp
29696
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2
38431
853c3674f20a Fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 37471
diff changeset
3 ;; Author: Peter Breton
29696
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
4 ;; Created: Fri Mar 26 1999
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
5 ;; Keywords: unix
38431
853c3674f20a Fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 37471
diff changeset
6 ;; Time-stamp: <2001-07-16 12:42:35 pavel>
29696
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
7
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
8 ;; Copyright (C) 1999, 2000 Free Software Foundation, Inc.
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
9
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
10 ;; This file is part of GNU Emacs.
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
11
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
12 ;; GNU Emacs is free software; you can redistribute it and/or modify
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
13 ;; it under the terms of the GNU General Public License as published by
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
14 ;; the Free Software Foundation; either version 2, or (at your option)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
15 ;; any later version.
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
16
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful,
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
20 ;; GNU General Public License for more details.
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
21
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
24 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
25 ;; Boston, MA 02111-1307, USA.
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
26
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
27 ;;; Commentary:
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
28 ;;
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
29 ;; This is a very generalized form of find; it basically implements a
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
30 ;; recursive directory descent. The conditions which bound the search
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
31 ;; are expressed as predicates, and I have not addressed the question
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
32 ;; of how to wrap up the common chores that find does in a simpler
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
33 ;; format than writing code for all the various predicates.
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
34 ;;
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
35 ;; Some random thoughts are to express simple queries directly with
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
36 ;; user-level functions, and perhaps use some kind of forms interface
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
37 ;; for medium-level queries. Really complicated queries can be
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
38 ;; expressed in Lisp.
32116
3f09592bbc80 * find-lisp.el (find-lisp-find-files-internal):
Peter Breton <pbreton@attbi.com>
parents: 29696
diff changeset
39 ;;
29696
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
40
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
41 ;;; Todo
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
42 ;;
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
43 ;; It would be nice if we could sort the results without running the find
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
44 ;; again. Maybe that could work by storing the original file attributes?
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
45
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
46 ;;; Code:
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
47
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
48 ;; Internal variables
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
49
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
50 (defvar find-lisp-regexp nil
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
51 "Internal variable.")
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
52
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
53 (defconst find-lisp-line-indent " "
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
54 "Indentation for dired file lines.")
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
55
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
56 (defvar find-lisp-file-predicate nil
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
57 "Predicate for choosing to include files.")
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
58
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
59 (defvar find-lisp-directory-predicate nil
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
60 "Predicate for choosing to descend into directories.")
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
61
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
62 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
63 ;; Debugging Code
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
64 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
65
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
66 (defvar find-lisp-debug-buffer "*Find Lisp Debug*"
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
67 "Buffer for debugging information.")
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
68
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
69 (defvar find-lisp-debug nil
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
70 "Whether debugging is enabled.")
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
71
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
72 (defun find-lisp-debug-message (message)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
73 "Print a debug message MESSAGE in `find-lisp-debug-buffer'."
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
74 (set-buffer (get-buffer-create find-lisp-debug-buffer))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
75 (goto-char (point-max))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
76 (insert message "\n"))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
77
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
78 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
79 ;; Directory and File predicates
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
80 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
81
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
82 (defun find-lisp-default-directory-predicate (dir parent)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
83 "True if DIR is not a dot file, and not a symlink.
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
84 PARENT is the parent directory of DIR."
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
85 (and find-lisp-debug
32116
3f09592bbc80 * find-lisp.el (find-lisp-find-files-internal):
Peter Breton <pbreton@attbi.com>
parents: 29696
diff changeset
86 (find-lisp-debug-message
29696
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
87 (format "Processing directory %s in %s" dir parent)))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
88 ;; Skip current and parent directories
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
89 (not (or (string= dir ".")
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
90 (string= dir "..")
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
91 ;; Skip directories which are symlinks
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
92 ;; Easy way to circumvent recursive loops
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
93 (file-symlink-p dir))))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
94
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
95 (defun find-lisp-default-file-predicate (file dir)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
96 "True if FILE matches `find-lisp-regexp'.
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
97 DIR is the directory containing FILE."
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
98 (and find-lisp-debug
32116
3f09592bbc80 * find-lisp.el (find-lisp-find-files-internal):
Peter Breton <pbreton@attbi.com>
parents: 29696
diff changeset
99 (find-lisp-debug-message
29696
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
100 (format "Processing file %s in %s" file dir)))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
101 (and (not (file-directory-p (expand-file-name file dir)))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
102 (string-match find-lisp-regexp file)))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
103
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
104 (defun find-lisp-file-predicate-is-directory (file dir)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
105 "True if FILE is a directory.
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
106 Argument DIR is the directory containing FILE."
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
107 (and find-lisp-debug
32116
3f09592bbc80 * find-lisp.el (find-lisp-find-files-internal):
Peter Breton <pbreton@attbi.com>
parents: 29696
diff changeset
108 (find-lisp-debug-message
29696
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
109 (format "Processing file %s in %s" file dir)))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
110 (and (file-directory-p (expand-file-name file dir))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
111 (not (or (string= file ".")
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
112 (string= file "..")))))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
113
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
114 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
115 ;; Find functions
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
116 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
117
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
118 (defun find-lisp-find-files (directory regexp)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
119 "Find files in DIRECTORY which match REGEXP."
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
120 (let ((file-predicate 'find-lisp-default-file-predicate)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
121 (directory-predicate 'find-lisp-default-directory-predicate)
33710
bec245584796 (find-lisp-find-files-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32116
diff changeset
122 (find-lisp-regexp regexp))
32116
3f09592bbc80 * find-lisp.el (find-lisp-find-files-internal):
Peter Breton <pbreton@attbi.com>
parents: 29696
diff changeset
123 (find-lisp-find-files-internal
3f09592bbc80 * find-lisp.el (find-lisp-find-files-internal):
Peter Breton <pbreton@attbi.com>
parents: 29696
diff changeset
124 directory
29696
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
125 file-predicate
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
126 directory-predicate)))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
127
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
128 ;; Workhorse function
32116
3f09592bbc80 * find-lisp.el (find-lisp-find-files-internal):
Peter Breton <pbreton@attbi.com>
parents: 29696
diff changeset
129 (defun find-lisp-find-files-internal (directory file-predicate
29696
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
130 directory-predicate)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
131 "Find files under DIRECTORY which satisfy FILE-PREDICATE.
32116
3f09592bbc80 * find-lisp.el (find-lisp-find-files-internal):
Peter Breton <pbreton@attbi.com>
parents: 29696
diff changeset
132 FILE-PREDICATE is a function which takes two arguments: the file and its
29696
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
133 directory.
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
134
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
135 DIRECTORY-PREDICATE is used to decide whether to descend into directories.
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
136 It is a function which takes two arguments, the directory and its parent."
33710
bec245584796 (find-lisp-find-files-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32116
diff changeset
137 (setq directory (file-name-as-directory directory))
29696
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
138 (let (results sub-results)
33710
bec245584796 (find-lisp-find-files-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32116
diff changeset
139 (dolist (file (directory-files directory nil nil t))
bec245584796 (find-lisp-find-files-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32116
diff changeset
140 (let ((fullname (expand-file-name file directory)))
bec245584796 (find-lisp-find-files-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32116
diff changeset
141 (when (file-readable-p (expand-file-name file directory))
bec245584796 (find-lisp-find-files-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32116
diff changeset
142 ;; If a directory, check it we should descend into it
bec245584796 (find-lisp-find-files-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32116
diff changeset
143 (and (file-directory-p fullname)
bec245584796 (find-lisp-find-files-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32116
diff changeset
144 (funcall directory-predicate file directory)
29696
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
145 (progn
33710
bec245584796 (find-lisp-find-files-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32116
diff changeset
146 (setq sub-results
bec245584796 (find-lisp-find-files-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32116
diff changeset
147 (find-lisp-find-files-internal
bec245584796 (find-lisp-find-files-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32116
diff changeset
148 fullname
bec245584796 (find-lisp-find-files-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32116
diff changeset
149 file-predicate
bec245584796 (find-lisp-find-files-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32116
diff changeset
150 directory-predicate))
bec245584796 (find-lisp-find-files-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32116
diff changeset
151 (if results
bec245584796 (find-lisp-find-files-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32116
diff changeset
152 (nconc results sub-results)
bec245584796 (find-lisp-find-files-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32116
diff changeset
153 (setq results sub-results))))
bec245584796 (find-lisp-find-files-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32116
diff changeset
154 ;; For all files and directories, call the file predicate
bec245584796 (find-lisp-find-files-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32116
diff changeset
155 (and (funcall file-predicate file directory)
bec245584796 (find-lisp-find-files-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32116
diff changeset
156 (if results
bec245584796 (find-lisp-find-files-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32116
diff changeset
157 (nconc results (list fullname))
bec245584796 (find-lisp-find-files-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32116
diff changeset
158 (setq results (list fullname)))))))
29696
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
159 results))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
160
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
161 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
162 ;; Find-dired all in Lisp
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
163 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
164
37471
f335708a19f2 (find-lisp-find-dired-filter)
Eli Zaretskii <eliz@gnu.org>
parents: 33710
diff changeset
165 ;;;###autoload
29696
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
166 (defun find-lisp-find-dired (dir regexp)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
167 "Find files in DIR, matching REGEXP."
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
168 (interactive "DFind files in directory: \nsMatching regexp: ")
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
169 (let ((find-lisp-regexp regexp))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
170 (find-lisp-find-dired-internal
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
171 dir
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
172 'find-lisp-default-file-predicate
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
173 'find-lisp-default-directory-predicate
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
174 "*Find Lisp Dired*")))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
175
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
176 ;; Just the subdirectories
37471
f335708a19f2 (find-lisp-find-dired-filter)
Eli Zaretskii <eliz@gnu.org>
parents: 33710
diff changeset
177 ;;;###autoload
29696
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
178 (defun find-lisp-find-dired-subdirectories (dir)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
179 "Find all subdirectories of DIR."
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
180 (interactive "DFind subdirectories of directory: ")
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
181 (find-lisp-find-dired-internal
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
182 dir
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
183 'find-lisp-file-predicate-is-directory
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
184 'find-lisp-default-directory-predicate
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
185 "*Find Lisp Dired Subdirectories*"))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
186
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
187 ;; Most of this is lifted from find-dired.el
32116
3f09592bbc80 * find-lisp.el (find-lisp-find-files-internal):
Peter Breton <pbreton@attbi.com>
parents: 29696
diff changeset
188 ;;
3f09592bbc80 * find-lisp.el (find-lisp-find-files-internal):
Peter Breton <pbreton@attbi.com>
parents: 29696
diff changeset
189 (defun find-lisp-find-dired-internal (dir file-predicate
29696
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
190 directory-predicate buffer-name)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
191 "Run find (Lisp version) and go into Dired mode on a buffer of the output."
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
192 (let ((dired-buffers dired-buffers)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
193 buf
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
194 (regexp find-lisp-regexp))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
195 ;; Expand DIR ("" means default-directory), and make sure it has a
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
196 ;; trailing slash.
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
197 (setq dir (abbreviate-file-name
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
198 (file-name-as-directory (expand-file-name dir))))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
199 ;; Check that it's really a directory.
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
200 (or (file-directory-p dir)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
201 (error "find-dired needs a directory: %s" dir))
32116
3f09592bbc80 * find-lisp.el (find-lisp-find-files-internal):
Peter Breton <pbreton@attbi.com>
parents: 29696
diff changeset
202 (or
29696
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
203 (and (buffer-name)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
204 (string= buffer-name (buffer-name)))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
205 (switch-to-buffer (setq buf (get-buffer-create buffer-name))))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
206 (widen)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
207 (kill-all-local-variables)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
208 (setq buffer-read-only nil)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
209 (erase-buffer)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
210 (setq default-directory dir)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
211 (dired-mode dir)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
212
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
213 (use-local-map (append (make-sparse-keymap) (current-local-map)))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
214
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
215 (make-local-variable 'find-lisp-file-predicate)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
216 (setq find-lisp-file-predicate file-predicate)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
217 (make-local-variable 'find-lisp-directory-predicate)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
218 (setq find-lisp-directory-predicate directory-predicate)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
219 (make-local-variable 'find-lisp-regexp)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
220 (setq find-lisp-regexp regexp)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
221
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
222 (make-local-variable 'revert-buffer-function)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
223 (setq revert-buffer-function
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
224 (function
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
225 (lambda(ignore1 ignore2)
32116
3f09592bbc80 * find-lisp.el (find-lisp-find-files-internal):
Peter Breton <pbreton@attbi.com>
parents: 29696
diff changeset
226 (find-lisp-insert-directory
29696
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
227 default-directory
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
228 find-lisp-file-predicate
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
229 find-lisp-directory-predicate
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
230 'ignore)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
231 )
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
232 ))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
233
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
234 ;; Set subdir-alist so that Tree Dired will work:
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
235 (if (fboundp 'dired-simple-subdir-alist)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
236 ;; will work even with nested dired format (dired-nstd.el,v 1.15
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
237 ;; and later)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
238 (dired-simple-subdir-alist)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
239 ;; else we have an ancient tree dired (or classic dired, where
32116
3f09592bbc80 * find-lisp.el (find-lisp-find-files-internal):
Peter Breton <pbreton@attbi.com>
parents: 29696
diff changeset
240 ;; this does no harm)
29696
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
241 (set (make-local-variable 'dired-subdir-alist)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
242 (list (cons default-directory (point-min-marker)))))
32116
3f09592bbc80 * find-lisp.el (find-lisp-find-files-internal):
Peter Breton <pbreton@attbi.com>
parents: 29696
diff changeset
243 (find-lisp-insert-directory
29696
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
244 dir file-predicate directory-predicate 'ignore)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
245 (goto-char (point-min))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
246 (dired-goto-next-file)))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
247
32116
3f09592bbc80 * find-lisp.el (find-lisp-find-files-internal):
Peter Breton <pbreton@attbi.com>
parents: 29696
diff changeset
248 (defun find-lisp-insert-directory (dir
3f09592bbc80 * find-lisp.el (find-lisp-find-files-internal):
Peter Breton <pbreton@attbi.com>
parents: 29696
diff changeset
249 file-predicate
3f09592bbc80 * find-lisp.el (find-lisp-find-files-internal):
Peter Breton <pbreton@attbi.com>
parents: 29696
diff changeset
250 directory-predicate
29696
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
251 sort-function)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
252 "Insert the results of `find-lisp-find-files' in the current buffer."
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
253 (let ((buffer-read-only nil)
32116
3f09592bbc80 * find-lisp.el (find-lisp-find-files-internal):
Peter Breton <pbreton@attbi.com>
parents: 29696
diff changeset
254 (files (find-lisp-find-files-internal
3f09592bbc80 * find-lisp.el (find-lisp-find-files-internal):
Peter Breton <pbreton@attbi.com>
parents: 29696
diff changeset
255 dir
3f09592bbc80 * find-lisp.el (find-lisp-find-files-internal):
Peter Breton <pbreton@attbi.com>
parents: 29696
diff changeset
256 file-predicate
29696
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
257 directory-predicate))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
258 (len (length dir)))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
259 (erase-buffer)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
260 ;; Subdir headlerline must come first because the first marker in
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
261 ;; subdir-alist points there.
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
262 (insert find-lisp-line-indent dir ":\n")
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
263 ;; Make second line a ``find'' line in analogy to the ``total'' or
32116
3f09592bbc80 * find-lisp.el (find-lisp-find-files-internal):
Peter Breton <pbreton@attbi.com>
parents: 29696
diff changeset
264 ;; ``wildcard'' line.
29696
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
265 ;;
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
266 ;; No analog for find-lisp?
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
267 (insert find-lisp-line-indent "\n")
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
268 ;; Run the find function
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
269 (mapcar
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
270 (function
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
271 (lambda(file)
32116
3f09592bbc80 * find-lisp.el (find-lisp-find-files-internal):
Peter Breton <pbreton@attbi.com>
parents: 29696
diff changeset
272 (find-lisp-find-dired-insert-file
29696
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
273 (substring file len)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
274 (current-buffer))))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
275 (sort files 'string-lessp))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
276 ;; FIXME: Sort function is ignored for now
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
277 ;; (funcall sort-function files))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
278 (goto-char (point-min))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
279 (dired-goto-next-file)))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
280
37471
f335708a19f2 (find-lisp-find-dired-filter)
Eli Zaretskii <eliz@gnu.org>
parents: 33710
diff changeset
281 ;;;###autoload
29696
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
282 (defun find-lisp-find-dired-filter (regexp)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
283 "Change the filter on a find-lisp-find-dired buffer to REGEXP."
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
284 (interactive "sSet filter to regexp: ")
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
285 (setq find-lisp-regexp regexp)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
286 (revert-buffer))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
287
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
288 (defun find-lisp-find-dired-insert-file (file buffer)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
289 (set-buffer buffer)
32116
3f09592bbc80 * find-lisp.el (find-lisp-find-files-internal):
Peter Breton <pbreton@attbi.com>
parents: 29696
diff changeset
290 (insert find-lisp-line-indent
29696
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
291 (find-lisp-format file (file-attributes file) (list "")
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
292 (current-time))))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
293
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
294 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
295 ;; Lifted from ls-lisp. We don't want to require it, because that
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
296 ;; would alter the insert-directory function.
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
297 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
298
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
299 (defun find-lisp-format (file-name file-attr switches now)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
300 (let ((file-type (nth 0 file-attr)))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
301 (concat (if (memq ?i switches) ; inode number
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
302 (format "%6d " (nth 10 file-attr)))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
303 ;; nil is treated like "" in concat
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
304 (if (memq ?s switches) ; size in K
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
305 (format "%4d " (1+ (/ (nth 7 file-attr) 1024))))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
306 (nth 8 file-attr) ; permission bits
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
307 ;; numeric uid/gid are more confusing than helpful
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
308 ;; Emacs should be able to make strings of them.
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
309 ;; user-login-name and user-full-name could take an
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
310 ;; optional arg.
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
311 (format " %3d %-8s %-8s %8d "
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
312 (nth 1 file-attr) ; no. of links
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
313 (if (= (user-uid) (nth 2 file-attr))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
314 (user-login-name)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
315 (int-to-string (nth 2 file-attr))) ; uid
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
316 (if (eq system-type 'ms-dos)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
317 "root" ; everything is root on MSDOS.
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
318 (int-to-string (nth 3 file-attr))) ; gid
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
319 (nth 7 file-attr) ; size in bytes
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
320 )
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
321 (find-lisp-format-time file-attr switches now)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
322 " "
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
323 file-name
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
324 (if (stringp file-type) ; is a symbolic link
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
325 (concat " -> " file-type)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
326 "")
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
327 "\n")))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
328
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
329 (defun find-lisp-time-index (switches)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
330 ;; Return index into file-attributes according to ls SWITCHES.
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
331 (cond
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
332 ((memq ?c switches) 6) ; last mode change
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
333 ((memq ?u switches) 4) ; last access
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
334 ;; default is last modtime
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
335 (t 5)))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
336
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
337 (defun find-lisp-format-time (file-attr switches now)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
338 ;; Format time string for file with attributes FILE-ATTR according
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
339 ;; to SWITCHES (a list of ls option letters of which c and u are recognized).
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
340 ;; Use the same method as `ls' to decide whether to show time-of-day or year,
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
341 ;; depending on distance between file date and NOW.
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
342 (let* ((time (nth (find-lisp-time-index switches) file-attr))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
343 (diff16 (- (car time) (car now)))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
344 (diff (+ (ash diff16 16) (- (car (cdr time)) (car (cdr now)))))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
345 (past-cutoff (- (* 6 30 24 60 60))) ; 6 30-day months
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
346 (future-cutoff (* 60 60))) ; 1 hour
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
347 (format-time-string
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
348 (if (and
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
349 (<= past-cutoff diff) (<= diff future-cutoff)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
350 ;; Sanity check in case `diff' computation overflowed.
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
351 (<= (1- (ash past-cutoff -16)) diff16)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
352 (<= diff16 (1+ (ash future-cutoff -16))))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
353 "%b %e %H:%M"
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
354 "%b %e %Y")
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
355 time)))
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
356
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
357 (provide 'find-lisp)
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
358
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
359 ;; Local Variables:
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
360 ;; autocompile: t
a5051216d618 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
361 ;; End:
38431
853c3674f20a Fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 37471
diff changeset
362
853c3674f20a Fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 37471
diff changeset
363 ;;; find-lisp.el ends here