トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

Search

Table of Contents

Grep

 grep-dialogに相当するコマンド版

M-x xgrep で使えます。[xyzzy:00843](Tetsuya Kamei さん)より。

 (defun xgrep (pattern directory files)
   (interactive "sgrep: \nDdirectory: \nsfiles: " :history0 'search)
   (require "grepd")
   (let ((ed::*grep-case-fold-search* nil)
         (ed::*grep-regexp-search* t)
         (ed::*grep-subdir* nil)
         (ed::*grep-name-only* nil))
     (ed::scan-files pattern (split-string files #\; t " ") directory)))

この関数を M-x grep と置き換えたい場合は,関数名 xgrep を grep に変更して下さい。とのこと。

毎回サブディレクトリをも対象とするならば,

 (ed::*grep-subdir* nil)

nilt にしておけばおっけー。また,上記の行を削除してしまえば grep-dialog の設定値が使われるようになるようです。

 gresreg-dialogに相当するコマンド版

M-x xgresreg でじっこ。サブディレクトリまでを対象にし,勝手にセーブします。xyzzy Part11(556 さん)より。

(defun xgresreg (pattern replacement directory files)
  (interactive "sxgresreg: \nswith: \nDdirectory: \nsfiles: " :history0 'search)
  (require "gresregd")
  (let ((ed::*gresreg-case-fold-search* nil)
        (ed::*gresreg-word-search* nil)
        (ed::*gresreg-regexp-search* t)
        (ed::*gresreg-subdir* t)
        (ed::*gresreg-save-buffer* t))
    (ed::gresreg-process pattern replacement
                         (split-string files #\; t " ")
                         directory
                         nil
                         ed::*gresreg-save-buffer*)))

isearch

 いつも正規表現でisearch

xyzzy Part10(728 さん)より。

(setq *isearch-scanner-hook* #'(lambda (p) (setq ed::*isearch-regexp* t) p))

 ”正規表現でisearch”の切替

isearch 実行中に,C-t で切替。xyzzy Part10(727 さん)より。

(defvar *isearch-use-regexp* nil)
(setq *isearch-scanner-hook*
      #'(lambda (p)
          (setq ed::*isearch-regexp* *isearch-use-regexp*)
          p))

(defun toggle-regex-isearch ()
  (interactive)
  (setq *isearch-use-regexp*
        (not *isearch-use-regexp*))
  (message "isearch ~[nomal~;regexp~]"
           (if *isearch-use-regexp* 1 0)))
(define-key ed::*isearch-map* '#\C-t 'toggle-regex-isearch)

 isearch 検索パターンをキルリングにコピーし終了

xyzzyの使い方がわからぬやし 励ましあえ その4(485,486,490 さん)より。パッケージの指定を関数単位でするようにしたもの。あとはそのまんま。

isearch 実行中に C-c すると,検索パターンがキルリングにコピーされ,isearch が終了します。

 (defun isearch-copy-as-kill ()
   (ed::kill-new ed::*isearch-current-string*)
   (message "Current string copied")
   (ed::isearch-exit))
 (define-key ed::*isearch-map* #\C-c 'isearch-copy-as-kill)

csearch

 連続検索中は表示色を変更

連続検索(csearch)を開始するとバッファの表示色を変更し,終了すると元に戻します。連続検索の終了に気付かず,改行を入れてしまったりするので…。

 (require "csearch")
 (in-package "editor")
 (defvar *csearch-buffer-colors* #(0 #xe0ffe0))
 (defun search-continuously (pattern reverse regexp interactive-p noerror)
   (set-buffer-colors *csearch-buffer-colors*)
   (while (search-command pattern reverse regexp interactive-p t)
     (unless (pos-visible-in-window-p (point))
       (recenter))
     (refresh-screen)
     (loop
       (let ((def (lookup-keymap *continuous-search-map* (read-char *keyboard*) t)))
       (cond ((eq def 'next)
              (return))
             ((eq def 'quit)
              (hide-match)
              (set-buffer-colors nil)
              (quit))
             ((eq def 'backward)
              (setq reverse t)
              (return))
             ((eq def 'forward)
              (setq reverse nil)
              (return))
             ((eq def 'recenter)
              (recenter)
              (refresh-screen))
             (t
              (message "(RET)継続, (C-g)中止, (s)前へ, (r)後ろへ"))))))
   (hide-match)
   (set-buffer-colors nil)
   (or noerror
       (plain-error "文字列が見つかりません")))
 (in-package "user")

Web 検索

 goo 辞書検索

C-c n でセレクションの文字列を goo 辞書から引く。セレクションがない場合は,ミニバッファから検索語を入力してエンタ。

(defun lookup-goo-dict-selection ()
  (interactive)
  (let* ((str (if (pre-selection-p)
                  (selection-start-end (beg end)
                    (buffer-substring beg end))
                (read-string "goo辞書: ")))
         (url (concat "http://dictionary.goo.ne.jp/search.php?MT="
                      (si:www-url-encode str))))
    (shell-execute url t)))
(global-set-key '(#\C-c #\n) 'lookup-goo-dict-selection)

最終更新時間:2005年07月27日 00時34分49秒 GMT