top  Index  Search  Changes  RSS  Login

ExcludedFile

「*.howm」だけを検索対象にしたい - 2ch3:598

;; *.howm だけを検索対象に. howm-1.3.7rc3 でテスト.
(defadvice howm-exclude-p (around howm-suffix-only (filename) activate)
  ad-do-it
  (setq ad-return-value
        (or ad-return-value
            ;; include directories and *.howm
            (not (or (file-directory-p filename)
                     (string-match "[.]howm$" filename))))))

検索対象外ファイルについて. (ref) 2ch2:230-233n

結局 grep -r なもんで, 「検索してから対象外ファイルを捨てる」っていうあほ手順になってます.

;; 「検索してから対象外ファイルを捨てる」っていう現状を
;; 「対象外ファイルを捨ててから検索」に直すコードのでっちあげ.
;; テストしてません.

;; (my-divide-list #'oddp '(1 2 3 4 5 6 7 8)) ==> ((nil 8 6 4 2) (t 7 5 3 1))
(defun my-divide-list (typefunc a)
  (let ((result nil))
    (mapc (lambda (x)
            (let* ((type (funcall typefunc x))
                   (pair (assoc type result)))
              (if (null pair)
                  (setq result
                        `((,type . (,x)) ,@result))
                (setcdr pair (cons x (cdr pair))))))
          a)
    result))

(defvar *my-howm-view-original* nil)
(defun my-howm-directory-files (d)
  (mapcar (lambda (f) (expand-file-name f d))
          (remove-if (lambda (f) (string-match howm-excluded-file-regexp f))
                     (directory-files d))))
(defadvice howm-view-grep (around exclude
                                  (str file-list &optional fixed-p)
                                  activate)
  (if *my-howm-view-original*
      ad-do-it
    (let* ((filtered (remove-if (lambda (f)
                                  (string-match howm-excluded-file-regexp
                                                f))
                                file-list))
           (expanded (mapcar (lambda (f) (expand-file-name f howm-directory))
                             filtered))
           (a (my-divide-list #'file-directory-p expanded))
           (dirs (cdr (assoc t a)))
           (files (cdr (assoc nil a))))
      (let* ((d-hits-list (mapcar (lambda (d)
                                    (howm-view-grep str
                                                    (my-howm-directory-files d)
                                                    fixed-p))
                                  dirs))
             (f-hits (let ((*my-howm-view-original* t))
                           (howm-view-grep str files fixed-p))))
        (setq ad-return-value
              (apply #'append (cons f-hits d-hits-list)))))))

  • 2004-06-10 (木) 21:07:28 名無しさん : バグいっこなおす. thx > 2ch2:276
  • 2004-06-22 (火) 11:47:18 276 : thx !! ちゃんと動いていまふ。
  • 2004-06-22 (火) 23:21:58 名無しさん : 問題は効果があるのかなんですが…どないでしょう?
  • 2004-06-22 (火) 23:23:47 名無しさん : もっと速くしたければ, こんなふうに elisp でえっちらおっちらやるよりも, grep のラッパースクリプト書くとか?

   $ find . -name '*.rd' -print | wc -l
      1442
   $ time egrep -r foo . > /dev/null
   egrep -r foo . > /dev/null  0.05s user 0.03s system 100% cpu 0.080 total
   $ time find . -name '*.rd' -print | xargs egrep foo > /dev/null
   find . -name '*.rd' -print  0.02s user 0.00s system 103% cpu 0.019 total
   xargs egrep foo > /dev/null  0.08s user 0.02s system 108% cpu 0.092 total
   $ time find . -name '*.rd' -exec egrep foo '{}' ';' > /dev/null
   find . -name '*.rd' -exec egrep foo '{}' ';' > /dev/null  14.86s user 1.88s system 97% cpu 17.181 total
  • 2004-06-22 (火) 23:27:43 名無しさん : xargs ならまあまあ速いけど, 「セキュリティよろしくないんちゃうかったっけ?」「egrep -f - と組合せたいねんけど」がうれしくない… (後者は, 複合ComeFrom の実装に使用)
  • 2004-06-22 (火) 23:27:53 名無しさん : セキュリティは, GNU 物で「… -print0 | xargs -0 …」にすればまし?
  • 2004-06-22 (火) 23:28:04 名無しさん : 最強なのは, grep のソースをいじって --accept=.howm とか --reject=.jpg,.gif,.png とかってオプションをつける, でしょうか.
  • 2005-04-25 (月) 22:47:06 : 遅さ比べ。Duron 1GHz, Debian。
$ find  . -name "*.howm" -print | wc -l
1354
$ du -ks
6828   .
$ time egrep -r foo . > /dev/null
real   0m0.565s
user   0m0.503s
sys    0m0.048s
$ time find  -name "*.howm" -print | xargs egrep foo > /dev/null
real   0m0.846s
user   0m0.786s
sys    0m0.060s
$ time find  -name "*.howm" -exec egrep foo "{}" \; > /dev/null
real   0m33.411s
user   0m25.094s
sys    0m7.575s

  • 2005-07-23 (土) 20:31:22 名無しさん : thx > 2ch2:746-750n
  • 手元では発症せずでした(xemacs 21.4, linux). svn の使い方これであってます?
cd howm-1.3.0rc3
svnadmin create ~/SVNREP
svn import sample/ file:///home/oreore/SVNREP/sample
mv sample /tmp
svn checkout file:///home/oreore/SVNREP/sample
cd sample
svn add 2005
svn commit
  • …ということで, そちらでのテストをお願いしないとだめそうです. 今度こそ詰めたいので, おつきあいいただけたら幸いです. (ref. 2ch2:230-236n 2ch2:581-588n)
  • まずは, sample/dot.emacs は配布状態そのままにして, 「make test → C-c , y」で出る予定表だと重複はあるでしょうか. もしあるなら, ファイル名はどうなっているでしょうか.
  • (ファイル名は, その項目へカーソルを動かすと表示されます. ミニバッファにも *howmC* バッファにも.)
(略)
top.txt                | 木 [2005-07-07]@ ほげ
top.txt                | 金 [2005-07-08]@ ほげ
2005-07-21-102807.howm.svn-base | 木 [2005-07-21 10:28]@ test
2005-07-21-102807.howm | 木 [2005-07-21 10:28]@ test
  • 2005-07-25 (月) 10:22:49 746 : 上記のように表示されます。howmCのファイル名はこうです。======>>> z:\howm-1.3.0rc3\sample\2005\07\.svn\text-base\2005-07-21-102807.howm.svn-base
  • 2005-07-25 (月) 21:39:23 Anonymous : そういうオチでしたか ^^; Windows でディレクトリの区切りが \ になることを忘れてました.
  • 2005-07-25 (月) 21:39:31 Anonymous : というわけで howm-1.3.0rc4. もっと適切な直し方があればご指摘ください. (howm-vars.el の howm-excluded-file-regexp の手前あたり)
  • 2005-07-26 (火) 13:27:48 746 : rc4のファイルが404です。
  • 2005-07-26 (火) 22:42:53 Anonymous : 置き直しました ^^; 2ch2:754さんも thx です.
(Please LogIn to post comments.)

Last modified:2008/10/14 23:35:21
Keyword(s):
References:[なんでも] [実装済] [文字コード]