Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Change the default find-grep command in emacs

Tags:

linux

emacs

fish

When I execute find-grep command in emacs, I got find . -type f -exec grep -nH -e {} +, since I'm using fish shell as the default shell, to make this command work I have to execute find . -type f -exec grep -nH -e \{\} +.

I tried to modify the emacs source code, below are my changes:

/usr/share/emacs/24.4/lisp/ldefs-boot.el line 12669: If `exec-plus' use `find -exec \{\} +'.

/usr/share/emacs/24.4/lisp/loaddefs.el line 12669: If `exec-plus' use `find -exec \{\} +'.

But it doesn't make any sense, when I execute find-grep still shows find . -type f -exec grep -nH -e {} +. Can anyone tell me where I am doing wrong or how should I figure out this?

like image 813
Joey Avatar asked Mar 07 '15 13:03

Joey


3 Answers

The text you changed does not look like executable code. Probably you just changed a doc string (actually, a bit of googling reveals that this is in the documentation string for grep-find-use-xargs). But Emacs is eminently customizable; all you have to do is to set the value of grep-find-template to something which is more suitable for you personally, in your own .emacs/init.el or similar.

(setq grep-find-template
      "find <D> <X> -type f <F> -exec grep <C> -nH -e <R> \\{\\} +")

See the manual for further documentation and, of course, the built-in documentation (ctrl-h v grep-find-template RET).

The actual source code is in http://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/progmodes/grep.el#n174 but you really, really, really do not want to edit the source code. The user-level customizability without code changes is one of the foundational designs of Emacs. Learn to use this facility.

like image 97
tripleee Avatar answered Oct 21 '22 00:10

tripleee


(grep-apply-setting 'grep-find-command '("find . -type f -exec grep -nH -e  \\{\\} +" . 34))

Will place the cursor on just slightly after the -e

like image 26
tty Avatar answered Oct 21 '22 01:10

tty


You need to use the function grep-apply-setting to set the variable grep-find-command, and double up on the backslashes before the curly braces:

(grep-apply-setting 'grep-find-command "find . -type f -exec grep -nH -e  \\{\\} +")
like image 23
Luke Girvin Avatar answered Oct 21 '22 01:10

Luke Girvin