Changeset 713


Ignore:
Timestamp:
Mar 24, 2004, 12:47:07 AM (21 years ago)
Author:
Gary Byers
Message:

New shared gap scheme.

File:
1 edited

Legend:

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

    r700 r713  
    4848;;; users beware.
    4949
     50
     51
     52#+no
    5053(defvar *line-cache-length* 200
    5154  "Length of Open-Chars.")
    5255
     56
     57
     58#+no
    5359(defvar *open-line* ()
    5460  "Line open for hacking on.")
    5561
     62
     63
     64#+no
    5665(defvar *open-chars*  (make-string *line-cache-length*)
    5766  "Vector of characters for hacking on.")
    5867
     68
     69
     70#+no
    5971(defvar *left-open-pos* 0
    6072  "Index to first free character to left of mark in *Open-Chars*.")
    6173
     74
     75
     76#+no
    6277(defvar *right-open-pos* 0
    6378  "Index to first used character to right of mark in *Open-Chars*.")
     
    162177  `(incf now-tick))
    163178
    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 
    196179 
    197180(defun buffer-document-begin-editing (buffer)
     
    204187    (let* ((document (buffer-document buffer)))
    205188      (when document
    206         (normalize-buffer-gap-info buffer)
    207189        (document-end-editing document)))))
    208190
Note: See TracChangeset for help on using the changeset viewer.