現在の領域の内容に関数内の文字列としてアクセスしたいとします。たとえば、次のようにEmacs Lispで現在の地域のコンテンツにアクセスするにはどうしたらいいですか?
(concat "stringa" (get-region-as-string) "stringb")
おかげ
エド
現在の領域の内容に関数内の文字列としてアクセスしたいとします。たとえば、次のようにEmacs Lispで現在の地域のコンテンツにアクセスするにはどうしたらいいですか?
(concat "stringa" (get-region-as-string) "stringb")
おかげ
エド
region-beginning
と一緒buffer-substring
とregion-end
それを行うことができます。
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 Interactiveと21.2.2 Code Characters for interactiveを参照してください。
Lispコードの領域内容をkill-ring、Xクリップボードまたはレジスタのようなユーザアクセス可能なデータ構造にコピーする場合は、buffer-substring
の代わりにfilter-buffer-substring
を使用することをお勧めします。コピーする前に、関数はfilter-buffer-substring-functions
というリスト変数からフィルタ関数を適用します。機能はadded in version 22.3でした。
これは素晴らしいことです。ありがとうございます。間違いなく私はそれを自分で見つけたでしょう。 – Singletoned