annotate lisp/locate.el @ 17846:c427501449a1

(display_text_line): Move the code to fill out the line with the newline's face to the end of the newline code. Add changes (commented out) to record ellipsis positions in charstarts.
author Richard M. Stallman <rms@gnu.org>
date Fri, 16 May 1997 07:32:59 +0000
parents 8f952e921136
children 2fd9f2883ad4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
17517
8f952e921136 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 16795
diff changeset
1 ;;; locate.el --- interface to the locate command
16781
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3 ;; Copyright (C) 1996 Free Software Foundation, Inc.
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5 ;; Author: Peter Breton <pbreton@i-kinetics.com>
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7 ;; This file is part of GNU Emacs.
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9 ;; GNU Emacs is free software; you can redistribute it and/or modify
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10 ;; it under the terms of the GNU General Public License as published by
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11 ;; the Free Software Foundation; either version 2, or (at your option)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 ;; any later version.
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 ;; GNU Emacs is distributed in the hope that it will be useful,
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; GNU General Public License for more details.
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; You should have received a copy of the GNU General Public License
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 ;; along with GNU Emacs; see the file COPYING. If not, write to the
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 ;; Boston, MA 02111-1307, USA.
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24 ;;; Commentary:
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26 ;; Search a database of files and use dired commands on
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27 ;; the result.
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28 ;;
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 ;;;;; Building a database of files ;;;;;;;;;
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 ;;
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 ;; You can create a simple files database with a port of the Unix find command
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 ;; and one of the various Windows NT various scheduling utilities,
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 ;; for example the AT command from the NT Resource Kit, WinCron which is
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35 ;; included with Microsoft FrontPage, or the shareware NTCron program.
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36 ;;
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37 ;; To set up a function which searches the files database, do something
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 ;; like this:
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39 ;;
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40 ;; (defvar locate-fcodes-file (concat my-home "/fcodes"))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 ;; (defvar locate-make-command-line 'nt-locate-make-command-line)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 ;;
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43 ;; (defun nt-locate-make-command-line (arg)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
44 ;; (cons "grep"
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45 ;; (mapconcat 'identity
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46 ;; (list "-i" arg locate-fcodes-file)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47 ;; " ")))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48 ;;
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49 ;;;;;;;; ADVICE For dired-make-relative: ;;;;;;;;;
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50 ;;
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51 ;; For certain dired commands to work right, you should also include the
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52 ;; following in your _emacs/.emacs:
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53 ;;
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54 ;; (defadvice dired-make-relative (before set-no-error activate)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55 ;; "For locate mode and Windows, don't return errors"
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 ;; (if (and (eq major-mode 'locate-mode)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57 ;; (memq system-type (list 'windows-nt 'ms-dos)))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58 ;; (ad-set-arg 2 t)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 ;; ))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60 ;;
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61 ;; Otherwise, dired-make-relative will give error messages like
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62 ;; "FILENAME: not in directory tree growing at /"
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64 ;;; Commentary:
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65 ;;
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 ;; Locate.el provides an interface to a program which searches a
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 ;; database of file names. By default, this program is the GNU locate
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 ;; command, but it could also be the BSD-style find command, or even a
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 ;; user specified command.
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70 ;;
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71 ;; To use the BSD-style "fast find", or any other shell command of the
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72 ;; form
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 ;;
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
74 ;; SHELLPROGRAM Name-to-find
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75 ;;
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76 ;; set the variable locate-command in your .emacs file.
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77 ;;
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78 ;; To use a more complicated expression, create a function which
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
79 ;; takes a string (the name to find) as input and returns a cons
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
80 ;; pair: the car should be the command to be executed, the cdr
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
81 ;; should be the arguments, concatenated into a string (including
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
82 ;; the name to find). Then do
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83 ;;
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84 ;; (setq locate-make-command-line 'my-locate-command-line)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85 ;;
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
86 ;; in your .emacs, using the name of your function in place of
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87 ;; my-locate-command-line
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
88 ;;
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
89 ;; You should make sure that whichever command you use works correctly
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
90 ;; from a shell prompt. GNU locate and BSD find expect the file databases
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
91 ;; to either be in standard places or located via environment variables.
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
92 ;; If the latter, make sure these environment variables are set in
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
93 ;; your emacs process
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
94 ;;
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95 ;; Locate-mode assumes that each line output from the locate-command
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96 ;; consists exactly of a file name, possibly preceded or trailed by
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 ;; whitespace. If your file database has other information on the line (for
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
98 ;; example, the file size), you will need to redefine the function
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
99 ;; locate-get-file-positions to return a list consisting of the first
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
100 ;; character in the file name and the last character in the file name.
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
101 ;;
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
102 ;; To use locate-mode, simply type M-x locate and then the string
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
103 ;; you wish to find. You can use almost all of the dired commands in
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
104 ;; the resulting *Locate* buffer. It is worth noting that your commands
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105 ;; do not, of course, affect the file database. For example, if you
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106 ;; compress a file in the locate buffer, the actual file will be
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107 ;; compressed, but the entry in the file database will not be
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 ;; affected. Consequently, the database and the filesystem will be out
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109 ;; of sync until the next time the database is updated
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110 ;;
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111 ;; The command locate-with-filter keeps only lines matching a
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112 ;; regular expression; this is often useful to constrain a big search.
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113 ;;
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 ;;; Code:
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 (eval-when-compile
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 (require 'dired))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 ;; Variables
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121 (defvar locate-command "locate"
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 "*The executable program used to search a database of files.")
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 (defvar locate-history-list nil
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125 "The history list used by the \\[locate] command.")
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127 (defvar locate-make-command-line 'locate-default-make-command-line
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128 "*Function used to create the locate command line.")
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130 (defvar locate-buffer-name "*Locate*"
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131 "*Name of the buffer to show results from the \\[locate] command.")
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133 (defvar locate-fcodes-file nil
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 "*Database of filenames.")
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136 (defvar locate-mouse-face 'highlight
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137 "*Face used to highlight locate entries.")
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139 (defvar locate-header-face 'region
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140 "*Face used to highlight the locate header.")
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 (defvar locate-current-filter nil)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 ;; Functions
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146 (defun locate-default-make-command-line (search-string)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147 (cons locate-command search-string))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 ;;;### autoload
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150 (defun locate (search-string &optional filter)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151 "Run the \\[locate] command, putting results in `*Locate*' buffer."
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152 (interactive
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153 (list (read-from-minibuffer "Locate: " nil nil
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 nil 'locate-history-list)))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155 (let* ((pop-up-windows 1)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156 (locate-cmd-list (funcall locate-make-command-line search-string))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157 (locate-cmd (car locate-cmd-list))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158 (locate-cmd-args (cdr locate-cmd-list))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
159 (locate-proc)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160 )
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162 ;; Find the Locate buffer
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163 (if (not (string-equal (buffer-name) locate-buffer-name))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164 (switch-to-buffer-other-window locate-buffer-name))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 (locate-mode)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167 (erase-buffer)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169 (setq locate-current-filter filter)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171 (call-process locate-cmd nil t nil locate-cmd-args)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 (if filter
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173 (locate-filter-output filter))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
175 (locate-do-setup)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
176 )
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177 )
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179 ;;;### autoload
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180 (defun locate-with-filter (search-string filter)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181 "Run the locate command with a filter."
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182 (interactive
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183 (list (read-from-minibuffer "Locate: " nil nil
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184 nil 'locate-history-list)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
185 (read-from-minibuffer "Filter: " nil nil
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186 nil 'grep-history)))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
187 (locate search-string filter))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189 (defun locate-filter-output (filter)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
190 "Filter output from the locate command."
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
191 (goto-char (point-min))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
192 (delete-non-matching-lines (regexp-quote filter)))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
193
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
194 (defvar locate-mode-map nil
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195 "Local keymap for Locate mode buffers.")
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
196 (if locate-mode-map
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197 nil
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199 (require 'dired)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
200
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
201 (setq locate-mode-map (copy-keymap dired-mode-map))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203 ;; Undefine Useless Dired Menu bars
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 (define-key locate-mode-map [menu-bar Dired] 'undefined)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205 (define-key locate-mode-map [menu-bar subdir] 'undefined)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207 (define-key locate-mode-map [menu-bar mark executables] 'undefined)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208 (define-key locate-mode-map [menu-bar mark directory] 'undefined)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209 (define-key locate-mode-map [menu-bar mark directories] 'undefined)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210 (define-key locate-mode-map [menu-bar mark symlinks] 'undefined)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212 (define-key locate-mode-map [mouse-2] 'mouse-locate-view-file)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213 (define-key locate-mode-map "\C-ct" 'locate-tags)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
215 (define-key locate-mode-map "U" 'dired-unmark-all-files-no-query)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216 )
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
218 ;; This variable is used to indent the lines and then to search for
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219 ;; the file name
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220 (defconst locate-filename-indentation 4
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221 "The amount of indentation for each file.")
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223 (defun locate-get-file-positions ()
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 (save-excursion
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 (end-of-line)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 (let ((eol (point)))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 (beginning-of-line)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229 ;; Assumes names end at the end of the line
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 (forward-char locate-filename-indentation)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 (list (point) eol))))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233 ;; From SQL-mode
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 (defun current-line ()
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 "Return the current line number, as an integer."
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 (interactive)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 (+ (count-lines (point-min) (point))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 (if (eq (current-column) 0)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239 1
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240 0)))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242 (defun locate-get-filename ()
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243 (let ((pos (locate-get-file-positions))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
244 (lineno (current-line)))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245 (and (not (eq lineno 1))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
246 (not (eq lineno 2))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247 (buffer-substring (elt pos 0) (elt pos 1)))))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
248
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249 (defun mouse-locate-view-file (event)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250 "In Locate mode, view a file, using the mouse."
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251 (interactive "@e")
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252 (save-excursion
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253 (goto-char (posn-point (event-start event)))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254 (view-file (locate-get-filename))))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256 ;; Define a mode for locate
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257 ;; Default directory is set to "/" so that dired commands, which
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258 ;; expect to be in a tree, will work properly
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
259 (defun locate-mode ()
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
260 "Major mode for the `*Locate*' buffer made by \\[locate]."
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261 (kill-all-local-variables)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
262 (use-local-map locate-mode-map)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263 (setq major-mode 'locate-mode
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
264 mode-name "Locate"
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265 default-directory "/"
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
266 dired-subdir-alist (list (cons "/" (point-min-marker))))
16795
2a9ae2be61ae (locate-mode): Locally set dired-move-to-filename-regexp,
Richard M. Stallman <rms@gnu.org>
parents: 16781
diff changeset
267 (make-local-variable 'dired-move-to-filename-regexp)
2a9ae2be61ae (locate-mode): Locally set dired-move-to-filename-regexp,
Richard M. Stallman <rms@gnu.org>
parents: 16781
diff changeset
268 (setq dired-move-to-filename-regexp
2a9ae2be61ae (locate-mode): Locally set dired-move-to-filename-regexp,
Richard M. Stallman <rms@gnu.org>
parents: 16781
diff changeset
269 (make-string locate-filename-indentation ?\ ))
2a9ae2be61ae (locate-mode): Locally set dired-move-to-filename-regexp,
Richard M. Stallman <rms@gnu.org>
parents: 16781
diff changeset
270 (make-local-variable 'dired-actual-switches)
2a9ae2be61ae (locate-mode): Locally set dired-move-to-filename-regexp,
Richard M. Stallman <rms@gnu.org>
parents: 16781
diff changeset
271 (setq dired-actual-switches "")
2a9ae2be61ae (locate-mode): Locally set dired-move-to-filename-regexp,
Richard M. Stallman <rms@gnu.org>
parents: 16781
diff changeset
272 (make-local-variable 'dired-permission-flags-regexp)
2a9ae2be61ae (locate-mode): Locally set dired-move-to-filename-regexp,
Richard M. Stallman <rms@gnu.org>
parents: 16781
diff changeset
273 (setq dired-permission-flags-regexp "^\\( \\)")
16781
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
274 (run-hooks 'locate-mode-hook))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
275
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
276 (defun locate-do-setup ()
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277 (let ((search-string (car locate-history-list)))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278 (goto-char (point-min))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
279 (save-excursion
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
280
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
281 ;; Nothing returned from locate command?
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
282 (if (eobp)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
283 (progn
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
284 (kill-buffer locate-buffer-name)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
285 (delete-window)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
286 (if locate-current-filter
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
287 (error "Locate: no match for %s in database using filter %s"
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
288 search-string locate-current-filter)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
289 (error "Locate: no match for %s in database" search-string))))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
290
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
291 (locate-insert-header search-string)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
292
16795
2a9ae2be61ae (locate-mode): Locally set dired-move-to-filename-regexp,
Richard M. Stallman <rms@gnu.org>
parents: 16781
diff changeset
293 (while (not (eobp))
2a9ae2be61ae (locate-mode): Locally set dired-move-to-filename-regexp,
Richard M. Stallman <rms@gnu.org>
parents: 16781
diff changeset
294 (insert-char ?\ locate-filename-indentation t)
2a9ae2be61ae (locate-mode): Locally set dired-move-to-filename-regexp,
Richard M. Stallman <rms@gnu.org>
parents: 16781
diff changeset
295 (locate-set-properties)
2a9ae2be61ae (locate-mode): Locally set dired-move-to-filename-regexp,
Richard M. Stallman <rms@gnu.org>
parents: 16781
diff changeset
296 (forward-line 1)))))
16781
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
297
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298 (defun locate-set-properties ()
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
299 (save-excursion
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
300 (let ((pos (locate-get-file-positions)))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
301 (add-text-properties (elt pos 0) (elt pos 1)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
302 (list 'mouse-face locate-mouse-face)))))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
303
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
304 (defun locate-insert-header (search-string)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
305 (let ((locate-format-string "Matches for %s")
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
306 (locate-regexp-match
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307 (concat " *Matches for \\(" (regexp-quote search-string) "\\)"))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
308 (locate-format-args (list search-string))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
309 )
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
310
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
311 (if locate-fcodes-file
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
312 (setq locate-format-string
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
313 (concat locate-format-string " in %s")
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
314 locate-regexp-match
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
315 (concat locate-regexp-match
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
316 " in \\("
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
317 (regexp-quote locate-fcodes-file)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
318 "\\)")
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
319 locate-format-args
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
320 (append (list locate-fcodes-file) locate-format-args)))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
321
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
322 (if locate-current-filter
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
323 (setq locate-format-string
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
324 (concat locate-format-string " using filter %s")
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
325 locate-regexp-match
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
326 (concat locate-regexp-match
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
327 " using filter "
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
328 "\\("
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
329 (regexp-quote locate-current-filter)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
330 "\\)")
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
331 locate-format-args
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
332 (append (list locate-current-filter) locate-format-args)))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
333
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
334 (setq locate-format-string
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
335 (concat locate-format-string ": \n\n")
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
336 locate-regexp-match
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
337 (concat locate-regexp-match ": \n"))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
338
16795
2a9ae2be61ae (locate-mode): Locally set dired-move-to-filename-regexp,
Richard M. Stallman <rms@gnu.org>
parents: 16781
diff changeset
339 (insert (apply 'format locate-format-string (reverse locate-format-args)))
16781
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
340
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
341 (save-excursion
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
342 (goto-char (point-min))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
343 (if (not (looking-at locate-regexp-match))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
344 nil
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
345 (add-text-properties (match-beginning 1) (match-end 1)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
346 (list 'face locate-header-face))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
347 (and (match-beginning 2)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
348 (add-text-properties (match-beginning 2) (match-end 2)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
349 (list 'face locate-header-face)))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
350 (and (match-beginning 3)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
351 (add-text-properties (match-beginning 3) (match-end 3)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
352 (list 'face locate-header-face)))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
353 ))))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
354
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
355 (defun locate-tags ()
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
356 "Visit a tags table in `*Locate*' mode."
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
357 (interactive)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
358 (let ((tags-table (locate-get-filename)))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
359 (if (y-or-n-p (format "Visit tags table %s? " tags-table))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
360 (visit-tags-table tags-table)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
361 nil)))
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
362
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
363 (provide 'locate)
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
364
d63e41403d58 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
365 ;;; locate.el ends here