*** jit-lock.el.~1.54.~ Mon Aug 21 14:35:24 2006 --- jit-lock.el Tue Aug 22 00:14:42 2006 *************** *** 444,513 **** result)))) ! (defun jit-lock-stealth-fontify () "Fontify buffers stealthily. ! This functions is called after Emacs has been idle for ! `jit-lock-stealth-time' seconds." ! ;; I used to check `inhibit-read-only' here, but I can't remember why. -stef ! (unless (or executing-kbd-macro memory-full ! (window-minibuffer-p (selected-window))) ! (let ((buffers (buffer-list)) ! (outer-buffer (current-buffer)) minibuffer-auto-raise ! message-log-max) ! (with-local-quit ! (while (and buffers (not (input-pending-p))) ! (with-current-buffer (pop buffers) ! (when jit-lock-mode ! ;; This is funny. Calling sit-for with 3rd arg non-nil ! ;; so that it doesn't redisplay, internally calls ! ;; wait_reading_process_input also with a parameter ! ;; saying "don't redisplay." Since this function here ! ;; is called periodically, this effectively leads to ! ;; process output not being redisplayed at all because ! ;; redisplay_internal is never called. (That didn't ! ;; work in the old redisplay either.) So, we learn that ! ;; we mustn't call sit-for that way here. But then, we ! ;; have to be cautious not to call sit-for in a widened ! ;; buffer, since this could display hidden parts of that ! ;; buffer. This explains the seemingly weird use of ! ;; save-restriction/widen here. ! ! (with-temp-message (if jit-lock-stealth-verbose ! (concat "JIT stealth lock " ! (buffer-name))) ! ! ;; In the following code, the `sit-for' calls cause a ! ;; redisplay, so it's required that the ! ;; buffer-modified flag of a buffer that is displayed ! ;; has the right value---otherwise the mode line of ! ;; an unmodified buffer would show a `*'. ! (let (start ! (nice (or jit-lock-stealth-nice 0)) ! (point (point-min))) ! (while (and (setq start ! (jit-lock-stealth-chunk-start point)) ! ;; In case sit-for runs any timers, ! ;; give them the expected current buffer. ! (with-current-buffer outer-buffer ! (sit-for nice))) ! ! ;; fontify a block. (jit-lock-fontify-now start (+ start jit-lock-chunk-size)) ! ;; If stealth jit-locking is done backwards, this leads to ! ;; excessive O(n^2) refontification. -stef ! ;; (when (>= jit-lock-context-unfontify-pos start) ! ;; (setq jit-lock-context-unfontify-pos end)) ! ! ;; Wait a little if load is too high. ! (when (and jit-lock-stealth-load ! (> (car (load-average)) jit-lock-stealth-load)) ! ;; In case sit-for runs any timers, ! ;; give them the expected current buffer. ! (with-current-buffer outer-buffer ! (sit-for (or jit-lock-stealth-time 30)))))))))))))) ! ;;; Deferred fontification. --- 444,507 ---- result)))) ! (defvar jit-lock-stealth-buffers nil ! "List of buffers that should be fontified stealthily.") ! ! (defvar jit-lock-stealth-repeat-timer nil ! "Timer for repeated stealth fontification.") ! ! (defun jit-lock-stealth-fontify (&optional repeat) "Fontify buffers stealthily. ! This function is called repeatedly after Emacs has become idle for ! `jit-lock-stealth-time' seconds. Optional argument REPEAT is expected ! non-nil in a repeated invocation of this function." ! (unless (or (input-pending-p) ! executing-kbd-macro memory-full ! (window-minibuffer-p (selected-window)) ! (null (if repeat ! ;; In repeated invocations `jit-lock-stealth-buffers' ! ;; has been already set up. ! jit-lock-stealth-buffers ! ;; In first invocation set up `jit-lock-stealth-buffers' ! ;; from `buffer-list'. ! (setq jit-lock-stealth-buffers (buffer-list))))) ! (when (timerp jit-lock-stealth-repeat-timer) ! ;; Cancel timer for repated invocations. ! (cancel-timer jit-lock-stealth-repeat-timer)) ! (let ((buffer (car jit-lock-stealth-buffers)) minibuffer-auto-raise ! message-log-max ! start delay) ! (if (and jit-lock-stealth-load ! (> (car (load-average)) jit-lock-stealth-load)) ! ;; If load is too high, run again after `jit-lock-stealth-time' ! ;; seconds. ! (setq delay jit-lock-stealth-time) ! (if (buffer-live-p buffer) ! (with-current-buffer buffer ! (if (and jit-lock-mode ! (setq start (jit-lock-stealth-chunk-start (point)))) ! ;; Fontify one block of at most `jit-lock-chunk-size' ! ;; characters. ! (with-temp-message (if jit-lock-stealth-verbose ! (concat "JIT stealth lock " ! (buffer-name))) (jit-lock-fontify-now start (+ start jit-lock-chunk-size)) ! ;; Run again after `jit-lock-stealth-nice' seconds. ! (setq delay (or jit-lock-stealth-nice 0))) ! ;; Nothing to fontify here. Remove this buffer from ! ;; `jit-lock-stealth-buffers' and run again immediately. ! (setq delay 0) ! (setq jit-lock-stealth-buffers (cdr jit-lock-stealth-buffers)))) ! ;; Buffer is no more live, remove it from `jit-lock-stealth-buffers' ! ;; and run again instantaneously. ! (setq delay 0) ! (setq jit-lock-stealth-buffers (cdr jit-lock-stealth-buffers)))) ! (when (and jit-lock-stealth-buffers jit-lock-stealth-time) ! ;; Call us again. ! (setq jit-lock-stealth-repeat-timer ! (run-at-time delay nil 'jit-lock-stealth-fontify t)))))) ;;; Deferred fontification.