2009-03-03 9 views

答えて

49

region-beginningと一緒buffer-substringregion-endそれを行うことができます。

+0

これは素晴らしいことです。ありがとうございます。間違いなく私はそれを自分で見つけたでしょう。 – Singletoned

59

starblueによれば、(buffer-substring (mark) (point))は、マークが設定されている場合、領域の内容を返します。 string propertiesが必要ない場合は、'buffer-substring-no-propertiesの亜種を使用できます。

対話型のコマンドを作成する場合は、(interactive "r")という形式を使用して、地域のエンドポイントを取得するより良い方法があります。ここでsimple.elからの例です:

 
(defun count-lines-region (start end) 
    "Print number of lines and characters in the region." 
    (interactive "r") 
    (message "Region has %d lines, %d characters" 
     (count-lines start end) (- end start))) 

Lispコードから呼び出された場合、(interactive ...)フォームが無視され、あなたがで、におけるラインバッファのいずれかのの部分だけでなく、地域をカウントするために、この機能を使用できるように適切な引数を渡します(たとえば、(count-lines-region (point-min) (point-max)))。バッファの絞り込まれた部分の行を数えます。しかし、対話的に呼び出されると、(interactive ...)フォームが評価され、"r"コードはポイントとマークを2つの数値引数として最小値から供給します。

「Emacs Lispマニュアル」の21.2.1 Using Interactive21.2.2 Code Characters for interactiveを参照してください。

4

Lispコードの領域内容をkill-ring、Xクリップボードまたはレジスタのようなユーザアクセス可能なデータ構造にコピーする場合は、buffer-substringの代わりにfilter-buffer-substringを使用することをお勧めします。コピーする前に、関数はfilter-buffer-substring-functionsというリスト変数からフィルタ関数を適用します。機能はadded in version 22.3でした。

関連する問題