8

関数を定義し、リージョンをoptionalパラメーターとして使用したいと考えました。

(defun my-grep-select(&optional beg end)
  (interactive "r")
    (if mark-active
       (....)
      (....))

マークがアクティブな場合はバッファ内の選択文字をgrepし、マークがアクティブでない場合はバッファ内のカーソルの下の単語をgrepしたかった。

しかし、状況: ファイルを開いて何も選択していない場合、次にコマンドを実行するとmy-grep-select、emacs が不平を言います:

The mark is not set now, so there is no region

どうすればこの不満を解消できますか? ありがとう。

4

3 に答える 3

8

それを行う正しい方法は次のとおりです。

(defun my-grep-select(&optional beg end)
  (interactive
   (if (use-region-p) (list (region-beginning) (region-end))
     (list <wordbegin> <wordend>)))
  ...)
于 2012-11-08T03:35:49.153 に答える
7

を使用する必要はありません(interactive "r")。代わりに、を使用してリージョンがアクティブであるかどうかを確認して(region-active-p)から、を使用(region-beginning)して(region-end) 他のことを行うことができます。

おそらく、リージョンがアクティブで、異なるパラメータのセットが渡されたときに選択する必要があります...

于 2012-11-08T05:23:42.353 に答える