删除所有fontlock面(flyspell-incorrect flyspell-duplicate除外)

时间:2014-05-20 00:08:12

标签: emacs elisp font-lock

要从使用2秒空闲计时器(自定义函数梳理缓冲区)的自定义函数的运行时间大约.3秒开始,我使用{{禁用字体锁定模式1}}。副作用是我的(font-lock-mode -1)flyspell-incorrect被删除了。要将这些flyspell字体重新放回flyspell-duplicate,费用远远超过 (flyspell-region (window-start) (window-end))秒。因此,除了 .3flyspell-incorrect之外,删除所有字体锁定字体,我想到了一个中间点。有没有办法从flyspell-duplicate添加条件到以下代码片段,它将保留flyspell字体,但删除其他所有内容?

font-core

2 个答案:

答案 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*")))