특정 얼굴의 텍스트를 어떻게 삽입합니까?


15

나는 이런 식으로 만든 얼굴을 가지고있다 :

(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)))

문제는 얼굴의 정의가 아닙니다. 얼마나 커스터마이징하면 높이가 두 배나 커지기 때문입니다. 그럼에도 불구하고 얼굴 인라인도 작동하지 않습니다.

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

그러면 특정 얼굴로 텍스트를 어떻게 넣을 수 있습니까? 오버레이를 사용할 수 있다는 것을 알고 있지만 더 장황하고 텍스트를 먼저 삽입해야하므로 (오버레이 할 텍스트의 크기와 위치를 찾아야 함) 더 많은 쓰레기를 만들어야하기 때문에 과잉처럼 보입니다. 모은.


2
기본 모드 또는 글꼴 잠금을 사용하지 않는 다른 모드에서 위의 예제를 시도하십시오 (잘 작동합니다). 문제는 글꼴 잠금 face이 구문 강조 코드 에도 사용 되므로 얼굴 속성을 대체한다는 것입니다. 주어진 텍스트에 대해 글꼴 잠금을 비활성화하는 방법이 있어야하지만 코드를 조금 연구해야합니다 (지금은 시간이 없습니다). 아마도 읽는 font-lock.el코드하는 것은 몇 가지 단서 줄 것
이크발 안사리

답변:


16

코드에 문제가 있습니다 :

  • put-text-property개체에 적용됩니다. 이 경우 문자열입니다. 마지막 매개 변수로 전달해야합니다.
  • put-text-property 0부터 카운트를 시작합니다.
  • 경우 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.


명확하고 완전한 답변.
Drew
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.