Mercurial > emacs
changeset 22208:5b05d45bfbbf
(grep-tag-default): New function.
(grep): New default arg when prefix arg is specified.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sun, 24 May 1998 01:10:12 +0000 |
parents | 51847ba069f8 |
children | 571020b7fc5e |
files | lisp/progmodes/compile.el |
diffstat | 1 files changed, 38 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/progmodes/compile.el Sun May 24 01:00:03 1998 +0000 +++ b/lisp/progmodes/compile.el Sun May 24 01:10:12 1998 +0000 @@ -553,10 +553,28 @@ to find the text that grep hits refer to. This command uses a special history list for its arguments, so you can -easily repeat a grep command." +easily repeat a grep command. + +A prefix argument says to default the argument based upon the current +tag the cursor is over." (interactive - (list (read-from-minibuffer "Run grep (like this): " - grep-command nil nil 'grep-history))) + (let (grep-default) + (when (and current-prefix-arg grep-history) + (let* ((tag-default + (funcall (or find-tag-default-function + (get major-mode 'find-tag-default-function) + ;; We use grep-tag-default instead of + ;; find-tag-default, to avoid loading etags. + 'grep-tag-default)))) + (setq grep-default (car grep-history)) + ;; Replace the thing matching for with that around cursor + (if (string-match "[^ ]+\\s +\\(-[^ ]+\\)*\\s *\\(\"[^\"]+\"\\|[^ ]+\\)" grep-default) + (setq grep-default (replace-match tag-default t t + grep-default 2))))) + (list (read-from-minibuffer "Run grep (like this): " + (or grep-default grep-command) + nil nil 'grep-history)))) + ;; Setting process-setup-function makes exit-message-function work ;; even when async processes aren't supported. (let* ((compilation-process-setup-function 'grep-process-setup) @@ -567,6 +585,23 @@ ;; Give it a simpler regexp to match. nil grep-regexp-alist))))) +;; This is a copy of find-tag-default from etags.el. +(defun grep-tag-default () + (save-excursion + (while (looking-at "\\sw\\|\\s_") + (forward-char 1)) + (when (or (re-search-backward "\\sw\\|\\s_" + (save-excursion (beginning-of-line) (point)) + t) + (re-search-forward "\\(\\sw\\|\\s_\\)+" + (save-excursion (end-of-line) (point)) + t)) + (goto-char (match-end 0)) + (buffer-substring (point) + (progn (forward-sexp -1) + (while (looking-at "\\s'") + (forward-char 1)) + (point)))))) ;;;###autoload (defun grep-find (command-args)