Ugrep作成日記その2−検索ワードに色づけ

今回やったこと

というわけでスムーズにugrepのお話に移れるわけです^^

  • 検索ワードに色を付ける
  • ファイルパスの取得法を変える

検索ワードの色づけ

強調表示の方法

set-text-attributeを使う。これで場所を指定すると、そこに色が付く。
検索語の場所を取得するためにscan-bufferと組み合わせ。

(defun highlight-search-word ()
  (interactive)
    (delete-text-attributes 'search-word)
  (save-excursion
    (goto-char (point-min))
    (while (scan-buffer *ugrep-search-word* :regexp t :no-dup nil :case-fold t :tail t)
      (set-text-attribute (point) (- (point) (length *ugrep-search-word*))  'search-word :bold t :foreground 4 )
      (goto-eol)
      )
    )
)

これで検索ワードが青色になります。

ファイルパスの取得方法

正規表現を使って取得してみる。
正規表現を使って検索できるコマンドはscan-bufferとlooking-atがあるらしい。
これで検索した単語の位置を、match-endとかmatch-beginningで取得できる。

(defvar *file-path* nil)
(defun get-path ()
  (interactive)
    (save-excursion
      (goto-bol)
      (when (looking-at ".*txt")
        (setq *file-path* (buffer-substring (point)
                                    (progn
                                      (goto-char (match-end 0))
                                      (skip-chars-forward "")
				      (point)))))))

これだと、Grepでヒットした語のなかにtxtが入ってた場合にパスがうまく取得できないことになる。何とかできないかと考えたけど、よく考えたらその確率もあまりないし、パスかどうかを調べて、もしパスでなかったらエラーメッセージを出すだけでいいじゃんと気づく。その場合にはEverythingなりなんなり他の方法で開けばいいだけだしね。


他に手直ししたいこと

閲覧だけでなくエディタとしても使えるようにするだとか、サブディレクトリの検索をするだとか色々考えられるけど僕の用途からは正直いらない。
あとは細かいとこを手直ししたりするくらいかな。