2012-11-08 8 views
5

私は関数を定義し、 領域をoptionalパラメータとして欲しかったのです。この状況で(インタラクティブな "r")関数の使い方は?

(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 

を、私は、これは文句排除することができますどのように?ありがとう。

+1

がある '(対話型「R」)'とだけ使用し、 '(地域アクティブ - p) 'と'(region-beginning) 'と'(region-end) ' –

+0

非常に良いです。ありがとうございました。 –

+0

私はあなたが受け入れる場合に備えて、答えとしてそれを追加しました... –

答えて

5

それを行うための正しい方法は次のようになります。あなたは(interactive "r")を使用する必要はありません

(defun my-grep-select(&optional beg end) 
    (interactive 
    (if (use-region-p) (list (region-beginning) (region-end)) 
    (list <wordbegin> <wordend>))) 
    ...) 
3

。代わりに、(region-active-p)などを使用して領域がアクティブであるかどうかを確認し、(region-beginning)(region-end)を使用してください。

おそらく領域がアクティブであり、パラメータの異なるセットが渡されたときになされるべき選択肢...私は使用しないこと

関連する問題