2014-05-20 58 views
1

若要從使用2秒空閒計時器(自定義函數梳理整個緩衝區)設置的自定義函數的運行時間中減去約.3秒,我使用(font-lock-mode -1)禁用字體鎖定模式。副作用是我的flyspell-incorrectflyspell-duplicate被刪除。將這些fly字體再次放回(flyspell-region (window-start) (window-end))費用.3秒多了很多。所以,我想通過移除除了flyspell-incorrectflyspell-duplicate之外的所有字體鎖字體來中途停留。有沒有一種方法可以將條件添加到font-core以下的代碼片段中,該代碼片段可以保留flyspell字體,但可以刪除其他所有內容?刪除所有字體鎖定面(除flyspell-flyspell-duplicate外)

;; 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)))))) 

回答

0

令我驚訝的是,事實證明,flyspell使用覆蓋,而不是字體鎖。我的問題發生是因爲我未正確使用remove-overlays,因爲未能包含存在的精確值。 remove-overlays的不當使用會消除該地區的整個小貓 - kaboodle - 包括蠅類覆蓋物。以下相關主題介紹瞭如何通過確保正確的值是使用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*"))) 
0

(font-lock-mode -1)不會刪除flyspell-incorrect和flyspell-duplicate thingies。它只是禁用他們的視覺效果(用你發佈的代碼)。因此,您可以事後重新設置char-property-alias-alist,並且這些蠅類物品將會「立即」再次顯示。

我真的不知道你在做什麼,這是通過字體鎖減緩了0.3秒。也許還有另一種方法可以避免那些比(font-lock-mode -1)長0.3秒的方法,因爲啓用/禁用字體鎖非常昂貴。

+0

我有一個垂直線高亮顯示器的工作草案,它在'visual-line-mode'中跟蹤我的光標位置。它經過'window-start'和'window-end'之間的緩衝區兩(2)次。第一遍是「重新搜索後退」\ n「。 。 。第二遍是'垂直運動-1'。第一遍在所有行結尾處放置覆蓋(例如,硬回車),並且在每個*第一行*(直到窗口結束)。第二遍按照「可視線模式」佈局在字符包裹區域放置覆蓋圖。在tex-mode緩衝區中,運行時間是字體鎖定模式的兩倍。 – lawlist

+0

通過在每次「重新搜索後退」和每個「垂直運動-1」開始時執行一次計算,我已經對運行時間進行了重大改進。今天早上,我用改進後的代碼進行了一次新的測試,並驗證了運行時仍然是*雙*,並啓用了'font-lock-mode'。但是,無可否認,運行時現在遠低於'.3' - 我用'(font-lock-mode-1)'將其降低到大約'.08'到'.12'。使用'(font-lock-mode 1)',運行時間是* double * - 即'.16'到'.24'。我*不*使用'AUCTeX'。我用一些添加了關鍵字的'tex-mode.el'。 – lawlist

+0

你如何添加視覺效果?如果通過修改緩衝區(例如put-text-property)來實現,那麼除非使用'with-silent-modifications',否則字體鎖實際上會減慢它的速度。 – Stefan

相關問題