diff --git a/emacs.el b/emacs.el index cbeadf6..443c0d4 100644 --- a/emacs.el +++ b/emacs.el @@ -2051,96 +2051,160 @@ ARG is ignored." "") "memo.txt")))) -(defvar my-rgrep-gitgrep - "git --no-pager -c color.grep=false grep -nH -e " - "Grep command for git grep.") - -(defvar my-rgrep-ag - "ag --nocolor --nogroup --nopager " - "Grep command for ag") - -(defvar my-rgrep-ack - "ack --nocolor --nogroup --nopager " - "Grep command for ack") - -(defvar my-rgrep-global - "global --result grep " - "Grep command for global") - -(defvar my-rgrep-grep - (concat "find . " - "-path '*/.git' -prune -o " - "-path '*/.svn' -prune -o " - "-type f -print0 | " - "xargs -0 -e grep -nH -e ") - "Grep command for grep") - -(defun my-rgrep-grep-command () - "Return recursive grep command for current directory." - (if (and (require 'gtags nil t) - (gtags-get-rootpath)) - my-rgrep-global - (if (eq 0 - (shell-command "git rev-parse --git-dir")) - my-rgrep-gitgrep - (if (executable-find "ag") - my-rgrep-ag - (if (executable-find "ack") - my-rgrep-ack - my-rgrep-grep))))) +;; (defvar my-rgrep-gitgrep +;; "git --no-pager -c color.grep=false grep -nH -e " +;; "Grep command for git grep.") + +;; (defvar my-rgrep-ag +;; "ag --nocolor --nogroup --nopager " +;; "Grep command for ag") + +;; (defvar my-rgrep-ack +;; "ack --nocolor --nogroup --nopager " +;; "Grep command for ack") + +;; (defvar my-rgrep-global +;; "global --result grep " +;; "Grep command for global") + +;; (defvar my-rgrep-grep +;; (concat "find . " +;; "-path '*/.git' -prune -o " +;; "-path '*/.svn' -prune -o " +;; "-type f -print0 | " +;; "xargs -0 -e grep -nH -e ") +;; "Grep command for grep") + +(defvar my-rgrep-alist + `( + ;; gnu global + ("global" + (and (require 'gtags nil t) + (gtags-get-rootpath)) + "global --result grep ") + + ;; git grep + ("gitgrep" + (eq 0 + (shell-command "git rev-parse --git-dir")) + "git --no-pager -c color.grep=false grep -nH -e ") + + ;; the silver searcher + ("ag" + (executable-find "ag") + "ag --nocolor --nogroup --nopager ") + + ;; ack + ("ack" + (executable-find "ack") + "ack --nocolor --nogroup --nopager ") + + ;; grep + ("grep" + t + ,(concat "find . " + "-path '*/.git' -prune -o " + "-path '*/.svn' -prune -o " + "-type f -print0 | " + "xargs -0 grep -nH -e ")) + ) + "Alist of rgrep command. +Each element is in the form like (NAME SEXP COMMAND), where SEXP returns the +condition to choose COMMAND when evaluated.") + +(defvar my-rgrep-default nil + "Default command name for my-rgrep.") + +(defun my-rgrep-grep-command (&optional name alist) + "Return recursive grep command for current directory or nil. +If NAME is given, use that without testing. +Commands are searched from ALIST." + (if alist + (if name + ;; if name is given search that from alist and return the command + (nth 2 (assoc name + alist)) + + ;; if name is not given try test in 1th elem + (let ((car (car alist)) + (cdr (cdr alist))) + + (if (eval (nth 1 car)) + ;; if the condition is true return the command + (nth 2 car) + + ;; try next one + (and cdr + (my-rgrep-grep-command name cdr))))) + + ;; if alist is not given set default value + (my-rgrep-grep-command name my-rgrep-alist))) + +(my-rgrep-grep-command "ag" nil) (defun my-rgrep (command-args) - "My recursive grep." - (interactive (list (read-shell-command "grep command: " - (my-rgrep-grep-command) - 'grep-find-history))) + "My recursive grep. Run COMMAND-ARGS." + (interactive (let ((cmd (my-rgrep-grep-command my-rgrep-default + nil))) + (if cmd + (list (read-shell-command "grep command: " + cmd + 'grep-find-history)) + (error "my-rgrep: Command for rgrep not found") + ))) (compilation-start command-args 'grep-mode)) -(defun my-rgrep-symbol-at-point (command-args) - "My recursive grep." - (interactive (list (read-shell-command "grep command: " - (concat (my-rgrep-grep-command) - " " - (thing-at-point 'symbol)) - 'grep-find-history))) - (compilation-start command-args - 'grep-mode)) +;; (defun my-rgrep-symbol-at-point (command-args) +;; "My recursive grep. Run COMMAND-ARGS." +;; (interactive (list (read-shell-command "grep command: " +;; (concat (my-rgrep-grep-command) +;; " " +;; (thing-at-point 'symbol)) +;; 'grep-find-history))) +;; (compilation-start command-args +;; 'grep-mode)) + +(defun my-rgrep-ack () + "My recursive grep by ack." + (interactive) + (let ((my-rgrep-default "ack")) + (if (called-interactively-p 'any) + (call-interactively 'my-rgrep) + (error "Not intended to be called noninteractively. Use `my-rgrep'")))) + +(defun my-rgrep-ag () + "My recursive grep by ack." + (interactive) + (let ((my-rgrep-default "ag")) + (if (called-interactively-p 'any) + (call-interactively 'my-rgrep) + (error "Not intended to be called noninteractively. Use `my-rgrep'")))) + +(defun my-rgrep-gitgrep () + "My recursive grep by ack." + (interactive) + (let ((my-rgrep-default "gitgrep")) + (if (called-interactively-p 'any) + (call-interactively 'my-rgrep) + (error "Not intended to be called noninteractively. Use `my-rgrep'")))) + +(defun my-rgrep-grep () + "My recursive grep by ack." + (interactive) + (let ((my-rgrep-default "grep")) + (if (called-interactively-p 'any) + (call-interactively 'my-rgrep) + (error "Not intended to be called noninteractively. Use `my-rgrep'")))) + +(defun my-rgrep-global () + "My recursive grep by ack." + (interactive) + (let ((my-rgrep-default "global")) + (if (called-interactively-p 'any) + (call-interactively 'my-rgrep) + (error "Not intended to be called noninteractively. Use `my-rgrep'")))) -(defun my-rgrep-ack (command-args) - "My recursive grep." - (interactive (list (read-shell-command "grep command: " - my-rgrep-ack - 'grep-find-history))) - (my-rgrep command-args)) - -(defun my-rgrep-ag (command-args) - "My recursive grep." - (interactive (list (read-shell-command "grep command: " - my-rgrep-ag - 'grep-find-history))) - (my-rgrep command-args)) - -(defun my-rgrep-gitgrep (command-args) - "My recursive grep." - (interactive (list (read-shell-command "grep command: " - my-rgrep-gitgrep - 'grep-find-history))) - (my-rgrep command-args)) - -(defun my-rgrep-global (command-args) - "My recursive grep by gnu global." - (interactive (list (read-shell-command "grep command: " - my-rgrep-global - 'grep-find-history))) - (my-rgrep command-args)) - -(defun my-rgrep-grep (command-args) - "My recursive grep." - (interactive (list (read-shell-command "grep command: " - my-rgrep-grep - 'grep-find-history))) - (my-rgrep command-args)) (define-key ctl-x-map "s" 'my-rgrep)