Next: , Previous: , Up: テキスト   [Contents][Index]


33.2 バッファーのコンテンツを調べる

このセクションではLispプログラムがバッファー内の任意の範囲にあるテキストを文字列に変換するための関数を説明します。

Function: buffer-substring start end

この関数はカレントバッファー内の位置startendで定義されるリージョンのテキストのコピーを含む文字列をリターンする。引数がバッファーのアクセス可能範囲内の位置でなければ、buffer-substringargs-out-of-rangeエラーをリターンする。

以下の例ではFont-Lockモードが有効でないものとする:

---------- Buffer: foo ----------
This is the contents of buffer foo

---------- Buffer: foo ----------

(buffer-substring 1 10)
     ⇒ "This is t"
(buffer-substring (point-max) 10)
     ⇒ "he contents of buffer foo\n"

コピーされるテキストが何らかのテキストプロパティをもっていたら、それらのプロパティが属する文字とともに文字列にコピーされる。しかしバッファー内のオーバーレイ(オーバーレイを参照)、およびそれらのプロパティは無視されるためコピーされない。

たとえばFont-Lockモードが有効なら以下のような結果を得るだろう:

(buffer-substring 1 10)
     ⇒ #("This is t" 0 1 (fontified t) 1 9 (fontified t))
Function: buffer-substring-no-properties start end

これはbuffer-substringと同様だが、テキストプロパティはコピーせずに文字自体だけをコピーする点が異なる。テキストのプロパティを参照のこと。

Function: buffer-string

この関数はカレントバッファーのアクセス可能範囲全体のコンテンツを文字列としてリターンする。コピーするテキストに何らかのテキストプロパティがあれば、それらを所有する文字とともに文字列にコピーされる。

異なる場所からのコピー時に双方向テキストの再配置によって結果の文字列の視覚的外見が変更されないように保証する必要があるなら、buffer-substring-with-bidi-context関数を使用すること(buffer-substring-with-bidi-contextを参照)。

Function: filter-buffer-substring start end &optional delete

この関数は変数filter-buffer-substring-functionにより指定された関数を使用して、startendの間のバッファーテキストをフィルターしてその結果をリターンする。

デフォルトのフィルター関数は時代遅れとなったラッパーフックfilter-buffer-substring-functions (この時代遅れの機能に関する詳細はマクロwith-wrapper-hookのドキュメント文字列を参照)がnilならバッファーから未変更のテキスト、すなわちbuffer-substringがリターンするであろうテキストをリターンする。

deleteが非nilなら、この関数はdelete-and-extract-regionと同じように、コピー後にstartendの間のテキストを削除する。

Lispコードはkillリング、Xクリップボード、レジスターのようなユーザーがアクセス可能なデータ構造内にコピーする際にはbuffer-substringbuffer-substring-no-propertiesdelete-and-extract-regionのかわりにこの関数を使用すること。メジャーモードとマイナーモードはバッファー外部にコピーするテキストを変更するためにfilter-buffer-substring-functionを変更することができる。

Variable: filter-buffer-substring-function

この変数の値は実際の処理を行うためにfilter-buffer-substringが呼び出す関数。その関数はfilter-buffer-substringと同じように3つの引数を受けとり、それらはfilter-buffer-substringにドキュメントされているように扱うこと。関数はフィルターされたテキストをリターン(およびオプションでソーステキストを削除)すること。

The following two variables are obsoleted by 以下の2つの変数はfilter-buffer-substring-functionにより時代遅れになりましたが、後方互換のために依然としてサポートされます。

Variable: filter-buffer-substring-functions

これは時代遅れとなったラッパーフックであり、このフックのメンバーはfunstartenddeleteの4つの引数を受け取る関数であること。funは3つの引数(startenddelete)を受け取り、文字列をリターンする関数。いずれも引数startenddeletefilter-buffer-substringのときと同様の意味をもつ。

1つ目のフック関数はfilter-buffer-substringのデフォルトの処理と同じくstartendの間のバッファー部分文字列をリターン(オプションでバッファーから元テキストを削除)する関数であり、それがfunに渡される。ほとんどの場合にはフック関数はfunを1回だけ呼び出してから、その結果にたいして自身の処理を行う。次のフック関数はこれと等しいfunを受け取って、それが順次繰り返されていく。実際のリターン値はすべてのフック関数が順次処理した結果。

Function: current-word &optional strict really-word

この関数はポイント位置またはその付近のシンボル(または単語)を文字列としてリターンする。リターン値にテキストプロパティは含まれない。

オプション引数really-wordが非nilなら単語、それ以外はシンボル(単語文字とシンボル構成文字の両方を含む)を探す。

オプション引数strictが非nilのならポイントは単語(またはシンボル)の内部にあるか隣接しなければならない。そこに単語(またはシンボル)がなければ、この関数はnilをリターンする。strictnilならポイントと同一行にある近接する単語(またはシンボル)を許容する。

Function: thing-at-point thing &optional no-properties

ポイントに隣接または周辺にあるthingを文字列としてリターンする。

引数thingは構文エンティティの種別を指定するシンボルである。可能なシンボルとしてはsymbollistsexpdefunfilenameexisting-filenameurlwordsentencewhitespacelinepagestring、および他が含まれる。

オプション引数no-propertiesは非nilなら、この関数はリターン値からテキストプロパティを取り除く。

---------- Buffer: foo ----------
Gentlemen may cry ``Pea∗ce! Peace!,''
but there is no peace.
---------- Buffer: foo ----------

(thing-at-point 'word)
     ⇒ "Peace"
(thing-at-point 'line)
     ⇒ "Gentlemen may cry ``Peace! Peace!,''\n"
(thing-at-point 'whitespace)
     ⇒ nil
Variable: thing-at-point-provider-alist

ユーザーおよびモードは、この変数によってthing-at-pointが機能する方法を調節できる。これはthing、およびそれ(thing)をリターンする関数(パラメーターなしで呼び出される)の連想リストである。thingのエントリーは非nilの結果がリターンされるまで順に評価される。

たとえばメジャーモードは以下のように指定できる:

(setq-local thing-at-point-provider-alist
            (append thing-at-point-provider-alist
                    '((url . my-mode--url-at-point))))

nilをリターンするproviderがなければ、標準的な方法によってthingを計算する。