Next: テキストの比較, Previous: ポイント近傍のテキストを調べる, Up: テキスト [Contents][Index]
このセクションではLispプログラムがバッファー内の任意の範囲にあるテキストを文字列に変換するための関数を説明します。
この関数はカレントバッファー内の位置startとendで定義されるリージョンのテキストのコピーを含む文字列をリターンする。引数がバッファーのアクセス可能範囲内の位置でなければ、buffer-substringはargs-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))
これはbuffer-substringと同様だが、テキストプロパティはコピーせずに文字自体だけをコピーする点が異なる。テキストのプロパティを参照のこと。
この関数はカレントバッファーのアクセス可能範囲全体のコンテンツを文字列としてリターンする。コピーするテキストに何らかのテキストプロパティがあれば、それらを所有する文字とともに文字列にコピーされる。
異なる場所からのコピー時に双方向テキストの再配置によって結果の文字列の視覚的外見が変更されないように保証する必要があるなら、buffer-substring-with-bidi-context関数を使用すること(buffer-substring-with-bidi-contextを参照)。
この関数は変数filter-buffer-substring-functionにより指定された関数を使用して、startとendの間のバッファーテキストをフィルターしてその結果をリターンする。
デフォルトのフィルター関数は時代遅れとなったラッパーフックfilter-buffer-substring-functions
(この時代遅れの機能に関する詳細はマクロwith-wrapper-hookのドキュメント文字列を参照)、および時代遅れの変数buffer-substring-filtersの両方がnilなら、バッファーから未変更のテキスト、すなわちbuffer-substringがリターンするであろうテキストをリターンする。
deleteが非nilなら、この関数はdelete-and-extract-regionと同じように、コピー後にstartとendの間のテキストを削除する。
Lispコードはkillリング、Xクリップボード、レジスターのようなユーザーがアクセス可能なデータ構造内にコピーする際にはbuffer-substring、buffer-substring-no-properties、delete-and-extract-regionのかわりにこの関数を使用すること。メジャーモードとマイナーモードはバッファー外部にコピーするテキストを変更するために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により時代遅れになりましたが、後方互換のために依然としてサポートされます。
これは時代遅れとなったラッパーフックであり、このフックのメンバーはfun、start、end、deleteの4つの引数を受け取る関数であること。funは3つの引数(start、end、delete)を受け取り、文字列をリターンする関数。いずれも引数start、end、deleteはfilter-buffer-substringのときと同様の意味をもつ。
1つ目のフック関数はfilter-buffer-substringのデフォルトの処理と同じくstartとendの間のバッファー部分文字列を(buffer-substring-filtersのすべての関数で処理して)リターン(オプションでバッファーから元テキストを削除)する関数であり、それがfunに渡される。ほとんどの場合にはフック関数はfunを1回だけ呼び出してから、その結果にたいして自身の処理を行う。次のフック関数はこれと等しいfunを受け取って、それが順次繰り返されていく。実際のリターン値はすべてのフック関数が順次処理した結果。
この時代遅れの変数の値は、単一の文字列を引数として受け取り別の文字列をリターンする関数のリストであること。デフォルトであるfilter-buffer-substring関数はこのリストの1つ目の関数にバッファーの部分文字列を渡して、リターンされた値を次の関数へと渡していき最後の関数がリターンした値がfilter-buffer-substring-functionsに渡される。
この関数はポイント位置またはその付近のシンボル(または単語)を文字列としてリターンする。リターン値にテキストプロパティは含まれない。
オプション引数really-wordが非nilなら単語、それ以外はシンボル(単語文字とシンボル構成文字の両方を含む)を探す。
オプション引数strictが非nilのならポイントは単語(またはシンボル)の内部にあるか隣接しなければならない。そこに単語(またはシンボル)がなければ、この関数はnilをリターンする。strictがnilならポイントと同一行にある近接する単語(またはシンボル)を許容する。
ポイントに隣接または周辺にあるthingを文字列としてリターンする。
引数thingは構文エンティティの種別を指定するシンボルである。可能なシンボルとしてはsymbol、list、sexp、defun、filename、existing-filename、url、word、sentence、whitespace、line、page、string、および他が含まれる。
オプション引数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
ユーザーおよびモードは、この変数によって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を計算する。
Next: テキストの比較, Previous: ポイント近傍のテキストを調べる, Up: テキスト [Contents][Index]