Changeset 700


Ignore:
Timestamp:
Mar 22, 2004, 9:37:17 AM (21 years ago)
Author:
Gary Byers
Message:

Cache buffer gap variables in buffer, when passing buffer between threads.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ccl/hemlock/src/htext1.lisp

    r587 r700  
    162162  `(incf now-tick))
    163163
     164;;; When passing the buffer between threads, cache these special variables'
     165;;; values in the buffer, iff they apply to the buffer.
     166(defun normalize-buffer-gap-info (buffer)
     167  (if (and *open-line* (eq buffer (line-%buffer *open-line*)))
     168    (setf (buffer-open-line buffer) *open-line*
     169          (buffer-open-chars buffer) *open-chars*
     170          (buffer-right-open-pos buffer) *right-open-pos*
     171          (buffer-left-open-pos buffer) *left-open-pos*
     172          (buffer-line-cache-length buffer) *line-cache-length*)
     173    (setf (buffer-open-line buffer) nil
     174          (buffer-open-chars buffer) nil
     175          (buffer-right-open-pos buffer) 0
     176          (buffer-left-open-pos buffer) 0
     177          (buffer-line-cache-length buffer) 0)))
     178
     179;;; Caller has presumably bound these variables, if that matters
     180(defun set-gap-info-from-buffer (buffer)
     181  (setq *open-line* (buffer-open-line buffer)
     182        *open-chars* (buffer-open-chars buffer)
     183        *right-open-pos* (buffer-right-open-pos buffer)
     184        *left-open-pos* (buffer-left-open-pos buffer)
     185        *line-cache-length* (buffer-line-cache-length buffer)))
     186
     187;;; One way to bind those variables ...
     188(defmacro with-buffer-gap-info ((buffer) &body body)
     189  `(let* ((*open-line* (buffer-open-line ,buffer))
     190          (*open-chars* (buffer-open-chars ,buffer))
     191          (*right-open-pos* (buffer-right-open-pos ,buffer))
     192          (*left-open-pos* (buffer-left-open-pos ,buffer))
     193          (*line-cache-length* (buffer-line-cache-length ,buffer)))
     194    ,@body))
     195
     196 
    164197(defun buffer-document-begin-editing (buffer)
    165198  (when (bufferp buffer)
     
    170203  (when (bufferp buffer)
    171204    (let* ((document (buffer-document buffer)))
    172       (when document (document-end-editing document)))))
     205      (when document
     206        (normalize-buffer-gap-info buffer)
     207        (document-end-editing document)))))
    173208
    174209
Note: See TracChangeset for help on using the changeset viewer.