[emacs] replace-regexp と isearch の組み合わせ
これの続き。
結局、紹介していただいた ireplace に搭載されてた機能は全部 emacs 22 の新機能に含まれてるので、必要無いという結論に達しました。これを .emacs に書いて終わり。
(defun my-isearch-query-replace-regexp (prefix) (interactive "P") (if prefix (query-replace-string) (let ((search-whitespace-regexp nil) (my-ireplace-user-quit-search-p nil) (isearch-mode-end-hook (cons (lambda () (setq my-ireplace-user-quit-search-p isearch-mode-end-hook-quit)) isearch-mode-end-hook))) (isearch-forward-regexp) (unless my-ireplace-user-quit-search-p (isearch-query-replace-regexp))))) (global-set-key "\C-\M-r" 'my-isearch-query-replace-regexp)
追記: isearch を C-g で中止しても、構わず query-replace に進むので修正。どうも quit は isearch の内部で処理してるっぽいので、終了 hook で flag を立ててそれを確認するという安易な手法。まぁ .emacs の code なんてこんなもの(顔