xyzzy用のoccurを作った。
occurが見つからないので作った。(同じ挙動じゃないけど)
とりあえず、以下を満たせばいいことにした。
カーソルの近くの言葉がdefault値として渡される?それとも、以前調べた言葉がdefaultになる?忘れてしまいました><。調べるのが面倒なのであとで直すかもしれません。とりあえず、今回は履歴が残るようにしてみました。
(defmacro number-to-string (int) "number -> string" `(format nil "~A" ,int)) (defvar last-occur-word "" "履歴が残っているとうれしい") (defun occur (re) (interactive "sregexp:" :default0 last-occur-word) "渡された正規表現を含む行を『行番号:行の内容』という形で表示する(上から下だと出力の向きが逆さになるので下から上に走査する。)" (setq last-occur-word re) (let* ((occur "*occur*") (buf (progn (when (find-buffer occur) (delete-buffer occur)) (get-buffer-create occur)))) (save-excursion (let ((start (point-min))) (goto-char (point-max)) (while (< start (point)) (let ((line (buffer-substring (progn (goto-bol) (point)) (progn (end-of-line) (point))))) (when (string-match re line) (with-output-to-buffer ((find-buffer occur)) (print (concat (number-to-string (current-line-number)) ":" line)))) (previous-line))))) (switch-to-buffer-other-window occur)) (unless (selected-buffer) (other-window)))