พื้นหลัง
Eww เช่นเดียวกับแพ็คเกจอื่น ๆ ใช้display
คุณสมบัติข้อความเพื่อแสดงรูปภาพ นั่นคือเหตุผลที่การสลับ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))))))
โปรดแจ้งให้เราทราบหากใช้งานได้! ฉันทดสอบบนหน้าเว็บที่ง่ายมากเท่านั้น