Emacsで選択した領域を検索対象にする

EmacsC-sで検索するときに領域が選択されていたら、その領域を検索対象として検索するマクロを、自分の.emacsに追加しました。

  ;; 選択した領域を使ってインクリメンタル検索を実行
  (defadvice isearch-mode (around isearch-mode-default-string
                                  (forward &optional regexp op-fun recursive-edit word-p)
                                  activate)
  (if (and transient-mark-mode mark-active (not (eq (mark) (point))))
      (progn
        (isearch-update-ring (buffer-substring-no-properties (mark) (point)))
        (deactivate-mark)
        ad-do-it
        (if (not forward)
            (isearch-repeat-backward)
          (goto-char (mark))
          (isearch-repeat-forward)))
    ad-do-it))

C-s C-wで単語を検索対象にできますが、これだとカーソルよりも前にあった内容は選択されないので不便に感じていました。そもそも検索しようとしてキーワードを選ぶのではなく、キーワードに注目してから検索するケースは多いので、なかなか便利です。