moccur-grep-findをちょっと便利に
higeponさんのid:higepon:20080717:1216264518を見て、そういえば自分も
moccur-grep-findの拡張子の指定のところで困ってたな〜と思い出した。
いい機会なので自分も少し設定をごにょごにょしてみることに。
せっかくなので、id:higepon さんとは別のアプローチをとることにしてみた。
拡張子(本当は拡張子ではなくてファイルマスクか?)の指定で何が面倒かって、
例えば、拡張子がcppだったかhppだったか、それともただのhだったかわからない、
という時に、
searchstring \.cpp$\|\.hpp$\|\.h$
としなければいけなくてこれをタイプするのが面倒だった。
これが、
searchstring cpp,hpp,h
となっただけでだいぶ便利になるんじゃないか。というわけで作ったのがこれ。
ほとんどmoccur-grep-findそのままで、マスクの文字列のところをカンマでsplit
してガチャガチャやってるだけです。(例えばcpp,hpp,hなら\.cpp$\|\.hpp$\|\.h$にしてるだけ)
(defun moccur-grep-find-ext (dir inputs) (interactive (list (moccur-grep-read-directory) (moccur-grep-read-regexp moccur-grep-default-mask))) (moccur-setup) (setq moccur-last-command 'moccur-grep-find) (let (regexps mask (files nil) ;;(default-directory dir) ) (setq regexps (mapconcat 'concat (if (= 1 (length inputs)) inputs (cdr (reverse inputs))) " ")) (setq mask (if (= 1 (length inputs)) "." (car (reverse inputs)))) (setq mask2 (concat "\\." (mapconcat 'identity (split-string mask ",") "$\\|\\.") "$" )) (message "Listing files...") (cond ((listp dir) (while dir (cond ((file-directory-p (car dir)) (setq files (append (reverse (moccur-grep-find-subdir (car dir) mask2)) files))) (t (setq files (cons (car dir) files)))) (setq dir (cdr dir)))) (t (setq files (reverse (moccur-grep-find-subdir dir mask2))))) (message "Listing files done!") (moccur-search-files regexps files) ))
あとは除きたい拡張子を
searchstring ^svn-base
みたいにできたら便利かなぁ。