特定の顔のテキストを挿入するにはどうすればよいですか?


14

このように作成された顔があります:

(defface test-face
  '((t . (:height 2.0)))
  "A face for testing.")

その顔にテキストを挿入したいと思います。しかし、これらの方法は顔なしでテキストを挿入します:

(insert (propertize "text to insert" 'face 'test-face))

(let ((current-string "text to insert"))
  (put-text-property 1 (length current-string) 'face 'test-face)
  (insert current-string))

そして、最初にテキストを挿入してから、戻ってその上に顔を置くことも機能しません:

(progn
  (insert "text to insert")
  (add-text-properties
   (save-excursion
     (backward-word 3)
     (point))
   (point)
   '(face test-face)))

問題は、顔の定義ではありません。カスタマイズに行けば、すでに2倍の高さで表示されているからです。それでも、顔のインライン化も機能しません。

(insert (propertize "to insert" 'face '(:height 2.0)))

それでは、特定の顔でテキストを入力するにはどうすればよいですか?私はオーバーレイを使用できることを知っていますが、それはより冗長で、最初にテキストを挿入する必要があるため(オーバーラップするテキストのサイズと位置を見つける必要があります)、より多くのゴ​​ミを作成する必要があるため、やり過ぎのようです集めました。


2
基本モードまたはフォントロックが無効になっている他のモードで上記の例を試してください(正常に動作します)。問題は、font-lock faceが構文強調コードにも使用するため、faceプロパティが置き換えられることです。特定のテキストのフォントロックを無効にする方法があるはずですが、コードを少し調査する必要があります(今は時間がない)。おそらく読んfont-lock.elコードは、いくつかの手掛かり与えるだろう
イクバルアンサリ

回答:


15

コードにはいくつかの問題があります。

  • put-text-propertyオブジェクトに適用されます。この場合、文字列。最後のパラメーターとして渡す必要があります。
  • put-text-property ゼロからカウントを開始します。
  • 場合はfont-lock-mode有効になっている、それは、任意のテキストを取り除きますfaceプロパティを。

フォントロックモードが無効になっている場合、次のコードが機能します。

(let ((current-string "text to insert"))
  (put-text-property 0 (length current-string) 'face 'font-lock-warning-face
                     current-string)
  (insert current-string))

フォントロックを有効にしてこれを使用する場合は、font-lock-face代わりにプロパティを設定できます。同じ効果がありますが、影響を受けませんfont-lock


明確かつ完全な回答。
ドリュー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.