Mercurial > emacs
comparison lisp/finder.el @ 95750:6c14c564fa23
(finder-font-lock-keywords): Handle ``quotes''.
(finder-compile-keywords): Move let to where needed.
(finder-mouse-face-on-line): Go back one more line if needed.
(finder-list-matches): Use cadr.
(finder-goto-xref): New function.
(finder-commentary): Add buttons to jump to foo.el libraries.
author | Glenn Morris <rgm@gnu.org> |
---|---|
date | Tue, 10 Jun 2008 03:06:30 +0000 |
parents | 470520f9b596 |
children | afc4aa03c2d5 |
comparison
equal
deleted
inserted
replaced
95749:7957e6e1f9b6 | 95750:6c14c564fa23 |
---|---|
107 (modify-syntax-entry ?\; ". " st) | 107 (modify-syntax-entry ?\; ". " st) |
108 st) | 108 st) |
109 "Syntax table used while in `finder-mode'.") | 109 "Syntax table used while in `finder-mode'.") |
110 | 110 |
111 (defvar finder-font-lock-keywords | 111 (defvar finder-font-lock-keywords |
112 '(("`\\([^']+\\)'" 1 font-lock-constant-face prepend)) | 112 '(("`\\([^'`]+\\)'" 1 font-lock-constant-face prepend)) |
113 "Font-lock keywords for Finder mode.") | 113 "Font-lock keywords for Finder mode.") |
114 | 114 |
115 (defvar finder-headmark nil | 115 (defvar finder-headmark nil |
116 "Internal finder-mode variable, local in finder buffer.") | 116 "Internal finder-mode variable, local in finder buffer.") |
117 | 117 |
136 (defun finder-compile-keywords (&rest dirs) | 136 (defun finder-compile-keywords (&rest dirs) |
137 "Regenerate the keywords association list into `generated-finder-keywords-file'. | 137 "Regenerate the keywords association list into `generated-finder-keywords-file'. |
138 Optional arguments DIRS are a list of Emacs Lisp directories to compile from; | 138 Optional arguments DIRS are a list of Emacs Lisp directories to compile from; |
139 no arguments compiles from `load-path'." | 139 no arguments compiles from `load-path'." |
140 (save-excursion | 140 (save-excursion |
141 (find-file generated-finder-keywords-file) | |
142 (setq buffer-undo-list t) | |
143 (erase-buffer) | |
144 (insert (autoload-rubric generated-finder-keywords-file | |
145 "keyword-to-package mapping")) | |
146 (search-backward "") | |
147 (insert "(setq finder-package-info '(\n") | |
141 (let (processed summary keywords) | 148 (let (processed summary keywords) |
142 (find-file generated-finder-keywords-file) | |
143 (setq buffer-undo-list t) | |
144 (erase-buffer) | |
145 (insert (autoload-rubric generated-finder-keywords-file | |
146 "keyword-to-package mapping")) | |
147 (search-backward "") | |
148 (insert "(setq finder-package-info '(\n") | |
149 (mapc | 149 (mapc |
150 (lambda (d) | 150 (lambda (d) |
151 (when (file-exists-p (directory-file-name d)) | 151 (when (file-exists-p (directory-file-name d)) |
152 (message "Directory %s" d) | 152 (message "Directory %s" d) |
153 (mapc | 153 (mapc |
173 ;; Allow compressed files also. FIXME: | 173 ;; Allow compressed files also. FIXME: |
174 ;; generalize this, especially for | 174 ;; generalize this, especially for |
175 ;; MS-DOG-type filenames. | 175 ;; MS-DOG-type filenames. |
176 "^[^=].*\\.el\\(\\.\\(gz\\|Z\\)\\)?$" | 176 "^[^=].*\\.el\\(\\.\\(gz\\|Z\\)\\)?$" |
177 )))) | 177 )))) |
178 (or dirs load-path)) | 178 (or dirs load-path))) |
179 (insert " ))\n") | 179 (insert " ))\n") |
180 (eval-buffer) ; so we get the new keyword list immediately | 180 (eval-buffer) ; so we get the new keyword list immediately |
181 (basic-save-buffer)))) | 181 (basic-save-buffer))) |
182 | 182 |
183 (defun finder-compile-keywords-make-dist () | 183 (defun finder-compile-keywords-make-dist () |
184 "Regenerate `finder-inf.el' for the Emacs distribution." | 184 "Regenerate `finder-inf.el' for the Emacs distribution." |
185 (apply 'finder-compile-keywords command-line-args-left) | 185 (apply 'finder-compile-keywords command-line-args-left) |
186 (kill-emacs)) | 186 (kill-emacs)) |
197 | 197 |
198 (defun finder-mouse-face-on-line () | 198 (defun finder-mouse-face-on-line () |
199 "Put `mouse-face' and `help-echo' properties on the previous line." | 199 "Put `mouse-face' and `help-echo' properties on the previous line." |
200 (save-excursion | 200 (save-excursion |
201 (forward-line -1) | 201 (forward-line -1) |
202 ;; If finder-insert-at-column moved us to a new line, go back one more. | |
203 (if (looking-at "[ \t]") (forward-line -1)) | |
202 (unless finder-help-echo | 204 (unless finder-help-echo |
203 (setq finder-help-echo | 205 (setq finder-help-echo |
204 (let* ((keys1 (where-is-internal 'finder-select | 206 (let* ((keys1 (where-is-internal 'finder-select |
205 finder-mode-map)) | 207 finder-mode-map)) |
206 (keys (nconc (where-is-internal | 208 (keys (nconc (where-is-internal |
248 (insert | 250 (insert |
249 "The following packages match the keyword `" key "':\n\n") | 251 "The following packages match the keyword `" key "':\n\n") |
250 (setq finder-headmark (point)) | 252 (setq finder-headmark (point)) |
251 (mapc | 253 (mapc |
252 (lambda (x) | 254 (lambda (x) |
253 (if (memq id (car (cdr (cdr x)))) | 255 (when (memq id (cadr (cdr x))) |
254 (progn | 256 (insert (car x)) |
255 (insert (car x)) | 257 (finder-insert-at-column 16 (concat (cadr x) "\n")) |
256 (finder-insert-at-column 16 (concat (nth 1 x) "\n")) | 258 (finder-mouse-face-on-line))) |
257 (finder-mouse-face-on-line)))) | |
258 finder-package-info) | 259 finder-package-info) |
259 (goto-char (point-min)) | 260 (goto-char (point-min)) |
260 (forward-line) | 261 (forward-line) |
261 (setq buffer-read-only t) | 262 (setq buffer-read-only t) |
262 (set-buffer-modified-p nil) | 263 (set-buffer-modified-p nil) |
263 (shrink-window-if-larger-than-buffer) | 264 (shrink-window-if-larger-than-buffer) |
264 (finder-summary))) | 265 (finder-summary))) |
266 | |
267 (define-button-type 'finder-xref 'action #'finder-goto-xref) | |
268 | |
269 (defun finder-goto-xref (button) | |
270 "Jump to a lisp file for the BUTTON at point." | |
271 (let* ((file (button-get button 'xref)) | |
272 (lib (locate-library file))) | |
273 (if lib (finder-commentary lib) | |
274 (message "Unable to locate `%s'" file)))) | |
265 | 275 |
266 ;;;###autoload | 276 ;;;###autoload |
267 (defun finder-commentary (file) | 277 (defun finder-commentary (file) |
268 "Display FILE's commentary section. | 278 "Display FILE's commentary section. |
269 FILE should be in a form suitable for passing to `locate-library'." | 279 FILE should be in a form suitable for passing to `locate-library'." |
289 (delete-blank-lines) | 299 (delete-blank-lines) |
290 (goto-char (point-min)) | 300 (goto-char (point-min)) |
291 (while (re-search-forward "^;+ ?" nil t) | 301 (while (re-search-forward "^;+ ?" nil t) |
292 (replace-match "" nil nil)) | 302 (replace-match "" nil nil)) |
293 (goto-char (point-min)) | 303 (goto-char (point-min)) |
304 (while (re-search-forward "\\<\\([-[:alnum:]]+\\.el\\)\\>" nil t) | |
305 (if (locate-library (match-string 1)) | |
306 (make-text-button (match-beginning 1) (match-end 1) | |
307 'xref (match-string-no-properties 1) | |
308 'help-echo "Read this file's commentary" | |
309 :type 'finder-xref))) | |
310 (goto-char (point-min)) | |
294 (setq buffer-read-only t) | 311 (setq buffer-read-only t) |
295 (set-buffer-modified-p nil) | 312 (set-buffer-modified-p nil) |
296 (shrink-window-if-larger-than-buffer) | 313 (shrink-window-if-larger-than-buffer) |
297 (finder-mode) | 314 (finder-mode) |
298 (finder-summary))) | 315 (finder-summary))) |