「装飾文字列」とは
#("foo" 0 4 (fontified t face font-lock-function-name-face))
...「プレーン文字列」とは対照的に
"foo"
(Elispコードがバッファから文字列を直接読み取る場合、このように装飾されている可能性があります。)
装飾された文字列を単純なものに変換する最も簡単な方法は何ですか(すべての装飾を取り除くことによって)?
「装飾文字列」とは
#("foo" 0 4 (fontified t face font-lock-function-name-face))
...「プレーン文字列」とは対照的に
"foo"
(Elispコードがバッファから文字列を直接読み取る場合、このように装飾されている可能性があります。)
装飾された文字列を単純なものに変換する最も簡単な方法は何ですか(すべての装飾を取り除くことによって)?
回答:
[あなたの固有化された文字列は間違っているようです-おそらくあなたはそれを間違ってコピーしました。 foo文字が3文字しかないため、0〜4文字(つまり、0、1、2、3文字-4文字)でフォント化することはできません。ここの例では、4ではなく3を使用しています。]
(let* ((foo #("foo" 0 3 (fontified t face font-lock-function-name-face)))
(start 0)
(end (length foo)))
(set-text-properties start end nil foo)
foo)
set-text-propertiesはの組み込み関数ですC source code。
(set-text-properties START END PROPERTIES &optional OBJECT)完全にからのテキストのプロパティを交換
STARTしますEND。3番目の引数
PROPERTIESは、新しいプロパティリストです。オプションの4番目の引数
OBJECTがバッファー(または現在のバッファーを意味するnil)でSTARTありEND、バッファー位置(整数またはマーカー)である場合。ifOBJECTは文字列でSTARTありEND、0から始まるインデックスです。場合はPROPERTIESnilで、効果は、オブジェクトの指定された部分からすべてのプロパティを削除することです。
Elispマニュアルのノード「プロパティの変更」を参照してください。ここで、機能の下にこれが表示されますremove-text-properties(ジョブを実行するためにも使用できます)。
特定のテキストからすべてのテキストプロパティを削除
set-text-propertiesするにnilは、新しいプロパティリストを使用して指定します。
@Danが述べたように、を使用することもできsubstring-no-propertiesますが、新しい文字列を返すことに注意してください。渡した実際の文字列オブジェクトは変更されません。両方でremove-text-properties、set-text-properties渡す文字列を変更します。
例えば:
(setq foo #("foo" 0 3 (fontified t face font-lock-function-name-face)))
(setq bar foo)
(set-text-properties 0 (length foo) nil foo)
との両方がfoo、プロパティなしでbarただ"foo"です。
だが:
(setq foo #("foo" 0 3 (fontified t face font-lock-function-name-face)))
(setq bar foo)
(setq foo (substring-no-properties foo))
現在foo、プロパティはありませんが、barまだあります。