배경
다른 많은 패키지와 마찬가지로 Eww는 display
text 속성을 사용하여 이미지를 표시합니다. 따라서 invisible
텍스트 속성을 전환 해도 도움이되지 않습니다. 텍스트 자체는 보이지 않지만 display
속성은 계속 표시됩니다.
실제로 이것은 아래 코드가 이미지를 표시하는 버퍼 (eww뿐만 아니라)에서 작동 해야하는 매우 일반적인 것입니다.
해결책
가장 쉬운 해결책은 display
전체 버퍼에서 속성을 제거하는 것 입니다. 그러나 이것은 돌이킬 수없는 동작이므로 페이지를 새로 고치지 않으면 이미지를 다시 켤 수 없습니다.
아래 제시된보다 강력한 솔루션 display
은 버퍼의 속성을 제거 하고 동시에 이미지를 다른 (쓸모없는) 속성으로 백업합니다. 다시 호출하면이 명령은 백업 된 이미지를 display
속성으로 다시 이동합니다 .
(defvar-local endless/display-images t)
(defun endless/toggle-image-display ()
"Toggle images display on current buffer."
(interactive)
(setq endless/display-images
(null endless/display-images))
(endless/backup-display-property endless/display-images))
이것은 어디에서나 백업 및 복원을 수행하는 사람입니다. 텍스트 속성 코드는 읽기가 쉽지 않지만이 함수는 설명이 충분할 정도로 짧습니다.
(defun endless/backup-display-property (invert &optional object)
"Move the 'display property at POS to 'display-backup.
Only applies if display property is an image.
If INVERT is non-nil, move from 'display-backup to 'display
instead.
Optional OBJECT specifies the string or buffer. Nil means current
buffer."
(let* ((inhibit-read-only t)
(from (if invert 'display-backup 'display))
(to (if invert 'display 'display-backup))
(pos (point-min))
left prop)
(while (and pos (/= pos (point-max)))
(if (get-text-property pos from object)
(setq left pos)
(setq left (next-single-property-change pos from object)))
(if (or (null left) (= left (point-max)))
(setq pos nil)
(setq prop (get-text-property left from object))
(setq pos (or (next-single-property-change left from object)
(point-max)))
(when (eq (car prop) 'image)
(add-text-properties left pos (list from nil to prop) object))))))
작동하는지 알려주세요! 매우 간단한 웹 페이지에서만 테스트했습니다.