为了从使用2秒空闲计时器设置的自定义函数的运行时减少大约.3秒(自定义函数通过缓冲区进行筛选),我禁用了(font-lock-mode -1)的字体锁定模式。副作用是我的flyspell-incorrect和flyspell-duplicate被删除了。再用(flyspell-region (window-start) (window-end))把那些拼字字体放回去,花费的时间要远远超过.3秒。因此,除了flyspell-incorrect和flyspell-duplicate之外,我还在考虑删除所有字体锁定字体的中间位置。是否有一种方法可以将条件添加到font-core中的以下代码片段中,以保留反拼写字体,同时删除其他所有内容?
;; Turn off Font Lock mode.
(unless mode
;; Remove `font-lock-face' as an alias for the `face' property.
(set (make-local-variable 'char-property-alias-alist)
(copy-tree char-property-alias-alist))
(let ((elt (assq 'face char-property-alias-alist)))
(when elt
(setcdr elt (remq 'font-lock-face (cdr elt)))
(when (null (cdr elt))
(setq char-property-alias-alist
(delq elt char-property-alias-alist))))))发布于 2014-05-21 04:28:49
令我惊讶的是,飞咒使用的是覆盖,而不是字体锁。我的问题之所以出现,是因为我错误地使用了remove-overlays,因为我没有包含存在的精确值。remove-overlays的不当使用移除了整个小猫--该区域的乱七八糟--包括咒语的覆盖。以下相关线程描述了如何通过确保在使用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*")))发布于 2014-05-20 15:15:58
(font-lock-mode -1)不移除不正确的和重复的拼写.它只是禁用它们的视觉效果(使用您发布的代码)。因此,您可以重新设置char-property-alias-alist之后,这些飞行拼写细化将“立即”再次显示。
我很想知道你在做什么,被字体锁的速度减慢了0.3秒。也许还有一种比(font-lock-mode -1)更能避免0.3秒的方法,因为启用/禁用字体锁是非常昂贵的。
https://stackoverflow.com/questions/23749051
复制相似问题