要从使用2秒空闲计时器(自定义函数梳理缓冲区)的自定义函数的运行时间大约.3
秒开始,我使用{{禁用字体锁定模式1}}。副作用是我的(font-lock-mode -1)
和flyspell-incorrect
被删除了。要将这些flyspell字体重新放回flyspell-duplicate
,费用远远超过 (flyspell-region (window-start) (window-end))
秒。因此,除了 .3
和flyspell-incorrect
之外,删除所有字体锁定字体,我想到了一个中间点。有没有办法从flyspell-duplicate
添加条件到以下代码片段,它将保留flyspell字体,但删除其他所有内容?
font-core
答案 0 :(得分:0)
(font-lock-mode -1)
不会删除flyspell-wrong和flyspell-duplicate thingies。它只会禁用它们的视觉效果(使用您发布的代码)。因此,您可以在之后重新设置char-property-alias-alist
,然后“立即”再次显示那些飞行物品。
我确实想知道你正在做什么,通过font-lock减慢了0.3秒。也许还有另一种方法可以避免0.3秒而不是(font-lock-mode -1)
,因为启用/禁用font-lock非常昂贵。
答案 1 :(得分:0)
令我惊讶的是,事实证明,flyspell使用叠加,不是字体锁。我的问题发生了,因为我未正确使用remove-overlays
未能包含存在的精确值。使用不当remove-overlays
会移除该地区的整个小猫 - kaboodle - 包括flyspell叠加层。以下相关主题描述了如何通过确保在使用remove-overlays
时始终包含正确的值来避免此问题:
https://stackoverflow.com/a/23773934/2112489
这是一个有用的小功能,可以看到幕后发生的事情:
(defun reveal-overlays (&optional beg end)
(interactive)
(let* (
(beg (if beg beg (window-start)))
(end (if end end (window-end))))
(overlay-recenter end)
(dolist (o (overlays-in beg end))
(when o
(message "%s\n%s\n" (overlay-properties o) o)))
(switch-to-buffer "*Messages*")))