"장식 된 문자열"이란
#("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
.세 번째 인수
PROPERTIES
는 새로운 속성 목록입니다.선택적 인수 제 경우
OBJECT
버퍼 (현재 버퍼 수단 또는 무기 호)이고,START
및END
이다 위치 (정수 또는 마커) 버퍼. 경우OBJECT
문자열입니다,START
하고END
있습니다 그것으로 인덱스를 0 기반. 경우PROPERTIES
무기 호입니다, 효과는 개체의 지정된 부분에서 모든 속성을 제거하는 것입니다.
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
여전히 있습니다.