문자열을 가져 와서 버퍼 텍스트 다음에 시간 초과로 일시적으로 표시하는 함수의 실제 예제를 작성했습니다.
(defun my-momentarily-display-after-buffer-end (string &optional timeout)
(let ((ov (make-overlay (point-max) (point-max))))
(overlay-put ov 'after-string
(concat (propertize " " 'display
'(space :align-to (+ left-fringe 10)))
(propertize string 'display
'(raise -1))
"\n\n"))
(sit-for (or timeout 5))
(delete-overlay ov)))
다음의 주문은 아래의 빨간색 상자 예입니다.
(my-momentarily-display-after-buffer-end "Nothing to see here...")
이것이 작동하는 이유는 오버레이가 마커를 표시 할 위치로 사용하기 때문입니다. 오버레이의 시작과 끝으로 가장 바깥 쪽 위치를 사용하면 속성 을 사용하여 그 다음에 텍스트를 표시 할 수 있습니다 after-string
. 오버레이는 적절한 텍스트를 포함 할 수 있기 때문에 들여 쓰기와 그 주변에 공백이 나타나도록 설정했습니다.
다른 예제는 같은 아이디어를 사용하여 줄 끝 뒤에 텍스트를 표시 할 수 있습니다.
(defun my-momentarily-display-after-line-end (string &optional timeout)
(let ((ov (make-overlay (line-end-position) (line-end-position))))
(overlay-put
ov 'after-string
(concat (propertize " " 'display
`(space :align-to (- right-fringe
,(1+ (length string)))))
string))
(sit-for (or timeout 5))
(delete-overlay ov)))
다음과 같은 호출로 오른쪽 빨간색 상자 예제가 나타납니다.
(my-momentarily-display-after-line-end "annotation")
버퍼 텍스트와 이러한 오버레이를 구별하고, 시간 초과보다 더 길게 표시하고, 위치를 조정하고, 빈 공간이 없을 때를 감지하고, 일반 텍스트의 일반 오버레이를 사용하는 등의 방법으로 훨씬 더 미친 얼굴을 추가 할 수 있습니다. 회사 모드 의 소스 코드는
매우 읽기 쉽고 제안 된 기능을 가진 유연한 팝업 메뉴를 만들기 위해보다 정교하고 (대부분 버그가없는) 오버레이 사용을 보여주기 때문입니다.