top  Index  Search  Changes  RSS  Login

howm wiki - ExcludedFile Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

「*.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$" "[.]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 のラッパースクリプト書くとか?
----
*2004-06-22 (火) 23:24:05 ''[[名無しさん]]'' : 参考に, 速さくらべ

    $ 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 - と組合せたいねんけど」がうれしくない… (後者は, CompoundComeFrom の実装に使用)
*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 です.
{{comment}}
----