- Timestamp:
- May 20, 2007, 12:48:02 AM (18 years ago)
- Location:
- branches/ide-1.0/ccl/hemlock/src
- Files:
-
- 10 edited
-
cursor.lisp (modified) (5 diffs)
-
files.lisp (modified) (1 diff)
-
htext1.lisp (modified) (8 diffs)
-
htext2.lisp (modified) (9 diffs)
-
htext3.lisp (modified) (5 diffs)
-
htext4.lisp (modified) (12 diffs)
-
line.lisp (modified) (1 diff)
-
search1.lisp (modified) (2 diffs)
-
struct.lisp (modified) (2 diffs)
-
syntax.lisp (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/ide-1.0/ccl/hemlock/src/cursor.lisp
r775 r6571 145 145 ;;; 146 146 (defun cached-real-line-length (line width start end) 147 (declare (fixnum width start end) (ignore line)) 148 (let ((offset (- *right-open-pos* *left-open-pos*)) 147 (declare (fixnum width start end)) 148 (let* ((buffer (line-%buffer line)) 149 (offset (- (buffer-right-open-pos buffer) (buffer-left-open-pos buffer))) 149 150 (bound 0)) 150 151 (declare (fixnum offset bound)) 151 152 (cond 152 ((>= start *left-open-pos*)153 ((>= start (buffer-left-open-pos buffer)) 153 154 (setq start (+ start offset) bound (setq end (+ end offset)))) 154 ((> end *left-open-pos*)155 (setq bound *left-open-pos*end (+ end offset)))155 ((> end (buffer-left-open-pos buffer)) 156 (setq bound (buffer-left-open-pos buffer) end (+ end offset))) 156 157 (t 157 158 (setq bound end))) … … 166 167 (when (= start bound) 167 168 (when (= start end) (return (values xpos ypos))) 168 (setq start *right-open-pos*bound end))169 (setq losing (%fcwa *open-chars*start bound losing-char))169 (setq start (buffer-right-open-pos buffer) bound end)) 170 (setq losing (%fcwa (buffer-open-chars buffer) start bound losing-char)) 170 171 (cond 171 172 (losing … … 173 174 (truncate (+ xpos (- losing start)) width)) 174 175 (setq ypos (+ ypos dy) start losing) 175 (do ((last (or (%fcwa *open-chars*start bound winning-char) bound)) str)176 (do ((last (or (%fcwa (buffer-open-chars buffer) start bound winning-char) bound)) str) 176 177 ((= start last)) 177 178 (declare (fixnum last)) 178 (setq str (get-rep (schar *open-chars*start)))179 (setq str (get-rep (schar (buffer-open-chars buffer) start))) 179 180 (incf start) 180 181 (unless (simple-string-p str) (setq str (funcall str xpos))) … … 296 297 an infinitely wide screen. This takes into account tabs and control 297 298 characters." 298 (let ((charpos (mark-charpos mark)) 299 (line (mark-line mark))) 300 (if (eq line *open-line*) 301 (values (cached-real-line-length line 10000 0 charpos)) 302 (values (real-line-length line 10000 0 charpos))))) 299 (let* ((charpos (mark-charpos mark)) 300 (line (mark-line mark)) 301 (buffer (line-%buffer line))) 302 (if (eq line (buffer-open-line buffer)) 303 (values (cached-real-line-length line 10000 0 charpos)) 304 (values (real-line-length line 10000 0 charpos))))) 303 305 304 306 … … 310 312 ;;; 311 313 (defun find-position (line position start end width) 312 (do* ((cached (eq line *open-line*)) 314 (do* ((buffer (line-%buffer line)) 315 (cached (eq line (buffer-open-line buffer))) 313 316 (lo start) 314 317 (hi (1- end)) -
branches/ide-1.0/ccl/hemlock/src/files.lisp
r798 r6571 62 62 :element-type 'base-char 63 63 :if-exists if-exists-action) 64 (close-line )64 (close-line (line-%buffer (mark-line (region-start region)))) 65 65 (fast-write-file region file)) 66 66 ;; ### access is always ignored -
branches/ide-1.0/ccl/hemlock/src/htext1.lisp
r2064 r6571 50 50 51 51 52 #+no 53 (defvar *line-cache-length* 200 54 "Length of Open-Chars.") 55 56 57 58 #+no 59 (defvar *open-line* () 60 "Line open for hacking on.") 61 62 63 64 #+no 65 (defvar *open-chars* (make-string *line-cache-length*) 66 "Vector of characters for hacking on.") 67 68 69 70 #+no 71 (defvar *left-open-pos* 0 72 "Index to first free character to left of mark in *Open-Chars*.") 73 74 75 76 #+no 77 (defvar *right-open-pos* 0 78 "Index to first used character to right of mark in *Open-Chars*.") 79 80 (defun grow-open-chars (&optional (new-length (* *line-cache-length* 2))) 52 53 (defun grow-open-chars (buffer &optional (new-length (* (buffer-line-cache-length buffer) 2))) 81 54 "Grows *Open-Chars* to twice its current length, or the New-Length if 82 55 specified." 83 56 (let ((new-chars (make-string new-length)) 84 (new-right (- new-length (- *line-cache-length* *right-open-pos*)))) 85 (%sp-byte-blt *open-chars* 0 new-chars 0 *left-open-pos*) 86 (%sp-byte-blt *open-chars* *right-open-pos* new-chars new-right new-length) 87 (setf *right-open-pos* new-right) 88 (setf *open-chars* new-chars) 89 (setf *line-cache-length* new-length))) 90 91 92 (defun close-line () 57 (new-right (- new-length (- (buffer-line-cache-length buffer) 58 (buffer-right-open-pos buffer))))) 59 (%sp-byte-blt (buffer-open-chars buffer) 0 new-chars 0 (buffer-left-open-pos buffer)) 60 (%sp-byte-blt (buffer-open-chars buffer) (buffer-right-open-pos buffer) new-chars new-right new-length) 61 (setf (buffer-right-open-pos buffer) new-right) 62 (setf (buffer-open-chars buffer) new-chars) 63 (setf (buffer-line-cache-length buffer) new-length))) 64 65 66 (defun close-line (buffer) 93 67 "Stuffs the characters in the currently open line back into the line they 94 came from, and sets *open-line*to Nil."95 (when *open-line*68 came from, and sets (buffer-open-line buffer) to Nil." 69 (when (buffer-open-line buffer) 96 70 (hemlock-ext:without-interrupts 97 (let* ((length (+ *left-open-pos* (- *line-cache-length* *right-open-pos*))) 71 (let* ((length (+ (buffer-left-open-pos buffer) 72 (- (buffer-line-cache-length buffer) 73 (buffer-right-open-pos buffer)))) 98 74 (string (make-string length))) 99 (%sp-byte-blt *open-chars* 0 string 0 *left-open-pos*)100 (%sp-byte-blt *open-chars* *right-open-pos* string *left-open-pos*length)101 (setf (line-chars *open-line*) string)102 (setf *open-line*nil)))))75 (%sp-byte-blt (buffer-open-chars buffer) 0 string 0 (buffer-left-open-pos buffer)) 76 (%sp-byte-blt (buffer-open-chars buffer) (buffer-right-open-pos buffer) string (buffer-left-open-pos buffer) length) 77 (setf (line-chars (buffer-open-line buffer)) string) 78 (setf (buffer-open-line buffer) nil))))) 103 79 104 80 ;;; We stick decrementing fixnums in the line-chars slot of the open line … … 113 89 "Closes the current *Open-Line* and opens the given Line at the Mark. 114 90 Don't call this, use modifying-line instead." 115 (cond ((eq line *open-line*) 91 (let* ((buffer (line-%buffer line))) 92 (cond ((eq line (buffer-open-line buffer)) 116 93 (let ((charpos (mark-charpos mark))) 117 (cond ((< charpos *left-open-pos*) ; BLT 'em right! 118 (let ((right-start (- *right-open-pos* 119 (- *left-open-pos* charpos)))) 120 (%sp-byte-blt *open-chars* 94 (cond ((< charpos (buffer-left-open-pos buffer)) ; BLT 'em right! 95 (let ((right-start (- (buffer-right-open-pos buffer) 96 (- (buffer-left-open-pos buffer) 97 charpos)))) 98 (%sp-byte-blt (buffer-open-chars buffer) 121 99 charpos 122 *open-chars*100 (buffer-open-chars buffer) 123 101 right-start 124 *right-open-pos*)125 (setf *left-open-pos*charpos)126 (setf *right-open-pos*right-start)))127 ((> charpos *left-open-pos*) ; BLT 'em left!128 (%sp-byte-blt *open-chars*129 *right-open-pos*130 *open-chars*131 *left-open-pos*102 (buffer-right-open-pos buffer)) 103 (setf (buffer-left-open-pos buffer) charpos) 104 (setf (buffer-right-open-pos buffer) right-start))) 105 ((> charpos (buffer-left-open-pos buffer)) ; BLT 'em left! 106 (%sp-byte-blt (buffer-open-chars buffer) 107 (buffer-right-open-pos buffer) 108 (buffer-open-chars buffer) 109 (buffer-left-open-pos buffer) 132 110 charpos) 133 (setf *right-open-pos*134 (+ *right-open-pos*135 (- charpos *left-open-pos*)))136 (setf *left-open-pos*charpos)))))111 (setf (buffer-right-open-pos buffer) 112 (+ (buffer-right-open-pos buffer) 113 (- charpos (buffer-left-open-pos buffer)))) 114 (setf (buffer-left-open-pos buffer) charpos))))) 137 115 138 116 (t 139 (close-line )117 (close-line buffer) 140 118 (let* ((chars (line-chars line)) 141 119 (len (length chars))) 142 120 (declare (simple-string chars)) 143 (when (> len *line-cache-length*) 144 (setf *line-cache-length* (* len 2)) 145 (setf *open-chars* (make-string *line-cache-length*))) 146 (setf *open-line* line) 147 (setf *left-open-pos* (mark-charpos mark)) 148 (setf *right-open-pos* 149 (- *line-cache-length* 150 (- (length chars) *left-open-pos*))) 151 (%sp-byte-blt chars 0 *open-chars* 0 152 *left-open-pos*) 153 (%sp-byte-blt chars *left-open-pos* 154 *open-chars* 155 *right-open-pos* 156 *line-cache-length*))))) 121 (when (> len (buffer-line-cache-length buffer)) 122 (setf (buffer-line-cache-length buffer) (* len 2)) 123 (setf (buffer-open-chars buffer) 124 (make-string (buffer-line-cache-length buffer)))) 125 (setf (buffer-open-line buffer) line) 126 (setf (buffer-left-open-pos buffer) (mark-charpos mark)) 127 (setf (buffer-right-open-pos buffer) 128 (- (buffer-line-cache-length buffer) 129 (- (length chars) (buffer-left-open-pos buffer)))) 130 (%sp-byte-blt chars 0 (buffer-open-chars buffer) 0 131 (buffer-left-open-pos buffer)) 132 (%sp-byte-blt chars (buffer-left-open-pos buffer) 133 (buffer-open-chars buffer) 134 (buffer-right-open-pos buffer) 135 (buffer-line-cache-length buffer))))))) 157 136 158 137 … … 162 141 (defmacro modifying-line (line mark) 163 142 "Checks to see if the Line is already opened at the Mark, and calls Open-Line 164 if not. Sticks a tick in the *open-line*'s chars. This must be called within143 if not. Sticks a tick in the (buffer-open-line buffer)'s chars. This must be called within 165 144 the body of a Modifying-Buffer form." 166 `(progn 167 (unless (and (= (mark-charpos ,mark) *left-open-pos*) (eq ,line *open-line*)) 145 (let* ((buffer (gensym))) 146 `(let* ((,buffer (line-%buffer ,line))) 147 (unless (and (= (mark-charpos ,mark) (buffer-left-open-pos ,buffer)) 148 (eq ,line (buffer-open-line ,buffer))) 168 149 (open-line ,line ,mark)) 169 (setf (line-chars *open-line*) (decf *cache-modification-tick*))))150 (setf (line-chars (buffer-open-line ,buffer)) (decf *cache-modification-tick*))))) 170 151 171 152 ;;; Now-Tick tells us when now is and isn't. … … 360 341 "Returns the characters in the line as a string. The resulting string 361 342 must not be destructively modified. This may be set with Setf." 362 (if (eq line *open-line*) 363 (close-line)) 364 (line-chars line)) 343 (let* ((buffer (line-%buffer line))) 344 (if (eq line (buffer-open-line buffer)) 345 (close-line buffer)) 346 (line-chars line))) 365 347 366 348 (defun %set-line-string (line string) … … 369 351 (unless (simple-string-p string) 370 352 (setq string (coerce string 'simple-string))) 371 (when (eq line *open-line*) (setq *open-line* nil)) 353 (when (eq line (buffer-open-line buffer)) 354 (setf (buffer-open-line buffer) nil)) 372 355 (let ((length (length (the simple-string string)))) 373 356 (dolist (m (line-marks line)) … … 380 363 "Return the Index'th character in Line. If the index is the length of the 381 364 line then #\newline is returned." 382 (if (eq line *open-line*) 383 (if (< index *left-open-pos*) 384 (schar *open-chars* index) 385 (let ((index (+ index (- *right-open-pos* *left-open-pos*)))) 386 (if (= index *line-cache-length*) 387 #\newline 388 (schar *open-chars* index)))) 365 (let* ((buffer (line-%buffer line))) 366 (if (eq line (buffer-open-line buffer)) 367 (if (< index (buffer-left-open-pos buffer)) 368 (schar (buffer-open-chars buffer) index) 369 (let ((index (+ index (- (buffer-right-open-pos buffer) 370 (buffer-left-open-pos buffer))))) 371 (if (= index (buffer-line-cache-length buffer)) 372 #\newline 373 (schar (buffer-open-chars buffer) index)))) 389 374 (let ((chars (line-chars line))) 390 375 (declare (simple-string chars)) 391 376 (if (= index (length chars)) 392 #\newline393 (schar chars index)))))377 #\newline 378 (schar chars index)))))) 394 379 395 380 … … 561 546 "Returns T if the line pointer to by Mark contains no characters, Nil 562 547 or otherwise." 563 (let ((line (mark-line mark))) 564 (if (eq line *open-line*) 565 (and (= *left-open-pos* 0) (= *right-open-pos* *line-cache-length*)) 548 (let* ((line (mark-line mark)) 549 (buffer (line-%buffer line))) 550 (if (eq line (buffer-open-line buffer)) 551 (and (= (buffer-left-open-pos buffer) 0) 552 (= (buffer-right-open-pos buffer) 553 (buffer-line-cache-length buffer))) 566 554 (= (length (line-chars line)) 0)))) 567 555 … … 578 566 ;;; 579 567 (defun blank-between-positions (line start end) 580 (if (eq line *open-line*) 581 (let ((gap (- *right-open-pos* *left-open-pos*))) 582 (cond ((>= start *left-open-pos*) 583 (check-range *open-chars* (+ start gap) (+ end gap))) 584 ((<= end *left-open-pos*) 585 (check-range *open-chars* start end)) 586 (t 587 (and (check-range *open-chars* start *left-open-pos*) 588 (check-range *open-chars* *right-open-pos* (+ end gap)))))) 568 (let* ((buffer (line-%buffer line))) 569 (if (eq line (buffer-open-line buffer)) 570 (let ((gap (- (buffer-right-open-pos buffer) 571 (buffer-left-open-pos buffer)))) 572 (cond ((>= start (buffer-left-open-pos buffer)) 573 (check-range (buffer-open-chars buffer) (+ start gap) (+ end gap))) 574 ((<= end (buffer-left-open-pos buffer)) 575 (check-range (buffer-open-chars buffer) start end)) 576 (t 577 (and (check-range (buffer-open-chars buffer) start (buffer-left-open-pos buffer)) 578 (check-range (buffer-open-chars buffer) (buffer-right-open-pos buffer) (+ end gap)))))) 589 579 (let ((chars (line-chars line))) 590 (check-range chars start end))))580 (check-range chars start end))))) 591 581 592 582 (defun blank-line-p (line) -
branches/ide-1.0/ccl/hemlock/src/htext2.lisp
r2064 r6571 26 26 (defun region-to-string (region) 27 27 "Returns a string containing the characters in the given Region." 28 (close-line )28 (close-line (line-%buffer (mark-line (region-start region)))) 29 29 (let* ((dst-length (count-characters region)) 30 30 (string (make-string dst-length)) … … 99 99 (defun previous-character (mark) 100 100 "Returns the character immediately before the given Mark." 101 (let ((line (mark-line mark)) 102 (charpos (mark-charpos mark))) 101 (let* ((line (mark-line mark)) 102 (buffer (line-%buffer line)) 103 (charpos (mark-charpos mark))) 103 104 (if (= charpos 0) 104 (if (line-previous line) 105 #\newline 106 nil) 107 (if (eq line *open-line*) 108 (char (the simple-string *open-chars*) 109 (if (<= charpos *left-open-pos*) 110 (1- charpos) 111 (1- (+ *right-open-pos* (- charpos *left-open-pos*))))) 112 (schar (line-chars line) (1- charpos)))))) 105 (if (line-previous line) 106 #\newline 107 nil) 108 (if (eq line (buffer-open-line buffer)) 109 (schar (the simple-string (buffer-open-chars buffer)) 110 (if (<= charpos (buffer-left-open-pos buffer)) 111 (1- charpos) 112 (1- (+ (buffer-right-open-pos buffer) 113 (- charpos (buffer-left-open-pos buffer)))))) 114 (schar (line-chars line) (1- charpos)))))) 113 115 114 116 (defun next-character (mark) 115 117 "Returns the character immediately after the given Mark." 116 (let ((line (mark-line mark)) 117 (charpos (mark-charpos mark))) 118 (if (eq line *open-line*) 119 (if (= charpos (- *line-cache-length* (- *right-open-pos* *left-open-pos*))) 120 (if (line-next line) 121 #\newline 122 nil) 123 (schar *open-chars* 124 (if (< charpos *left-open-pos*) 125 charpos 126 (+ *right-open-pos* (- charpos *left-open-pos*))))) 127 (let ((chars (line-chars line))) 128 (if (= charpos (strlen chars)) 129 (if (line-next line) 130 #\newline 131 nil) 132 (schar chars charpos)))))) 118 (let* ((line (mark-line mark)) 119 (buffer (line-%buffer line)) 120 (charpos (mark-charpos mark))) 121 (if (eq line (buffer-open-line buffer)) 122 (if (= charpos (- (buffer-line-cache-length buffer) 123 (- (buffer-right-open-pos buffer) 124 (buffer-left-open-pos buffer)))) 125 (if (line-next line) 126 #\newline 127 nil) 128 (schar (buffer-open-chars buffer) 129 (if (< charpos (buffer-left-open-pos buffer)) 130 charpos 131 (+ (buffer-right-open-pos buffer) 132 (- charpos (buffer-left-open-pos buffer)))))) 133 (let ((chars (line-chars line))) 134 (if (= charpos (strlen chars)) 135 (if (line-next line) 136 #\newline 137 nil) 138 (schar chars charpos)))))) 133 139 134 140 … … 148 154 (modifying-line line mark) 149 155 (cond ((= (mark-charpos mark) 150 (- *line-cache-length* (- *right-open-pos* *left-open-pos*)))156 (- (buffer-line-cache-length buffer) (- (buffer-right-open-pos buffer) (buffer-left-open-pos buffer)))) 151 157 ;; The mark is at the end of the line. 152 158 (unless next … … 157 163 (let ((chars (line-chars next))) 158 164 (declare (simple-string chars)) 159 (set q *right-open-pos* (- *line-cache-length*(length chars)))160 (when (<= *right-open-pos* *left-open-pos*)161 (grow-open-chars (* (+ (length chars) *left-open-pos*1) 2)))162 (%sp-byte-blt chars 0 *open-chars* *right-open-pos*163 *line-cache-length*)164 (setf (schar *open-chars* *left-open-pos*) character)165 (incf *left-open-pos*))165 (setf (buffer-right-open-pos buffer) (- (buffer-line-cache-length buffer) (length chars))) 166 (when (<= (buffer-right-open-pos buffer) (buffer-left-open-pos buffer)) 167 (grow-open-chars buffer (* (+ (length chars) (buffer-left-open-pos buffer) 1) 2))) 168 (%sp-byte-blt chars 0 (buffer-open-chars buffer) (buffer-right-open-pos buffer) 169 (buffer-line-cache-length buffer)) 170 (setf (schar (buffer-open-chars buffer) (buffer-left-open-pos buffer)) character) 171 (incf (buffer-left-open-pos buffer))) 166 172 (move-some-marks (charpos next line) 167 (+ charpos *left-open-pos*))173 (+ charpos (buffer-left-open-pos buffer))) 168 174 (setq next (line-next next)) 169 175 (setf (line-next line) next) … … 171 177 ((char= character #\newline) 172 178 ;; The char is being changed to a newline, so we must split lines. 173 (incf *right-open-pos*)174 (let* ((len (- *line-cache-length* *right-open-pos*))179 (incf (buffer-right-open-pos buffer)) 180 (let* ((len (- (buffer-line-cache-length buffer) (buffer-right-open-pos buffer))) 175 181 (chars (make-string len)) 176 182 (new (make-line :chars chars :previous line 177 183 :next next :%buffer buffer))) 178 (%sp-byte-blt *open-chars* *right-open-pos*chars 0 len)179 (maybe-move-some-marks* (charpos line new) *left-open-pos*180 (- charpos *left-open-pos*1))184 (%sp-byte-blt (buffer-open-chars buffer) (buffer-right-open-pos buffer) chars 0 len) 185 (maybe-move-some-marks* (charpos line new) (buffer-left-open-pos buffer) 186 (- charpos (buffer-left-open-pos buffer) 1)) 181 187 (setf (line-next line) new) 182 188 (when next (setf (line-previous next) new)) 183 (set q *right-open-pos* *line-cache-length*)189 (setf (buffer-right-open-pos buffer) (buffer-line-cache-length buffer)) 184 190 (number-line new))) 185 191 (t 186 (setf (char (the simple-string *open-chars*) *right-open-pos*)192 (setf (char (the simple-string (buffer-open-chars buffer)) (buffer-right-open-pos buffer)) 187 193 character) 188 194 (hi::buffer-note-modification buffer mark 1))))) … … 380 386 381 387 (defun %print-whole-line (structure stream) 382 (cond ((eq structure *open-line*) 383 (write-string *open-chars* stream :end *left-open-pos*) 384 (write-string *open-chars* stream :start *right-open-pos* 385 :end *line-cache-length*)) 386 (t 387 (write-string (line-chars structure) stream)))) 388 (let* ((buffer (line-%buffer structure))) 389 (cond ((eq structure (buffer-open-line buffer)) 390 (write-string (buffer-open-chars buffer) stream :end (buffer-left-open-pos buffer)) 391 (write-string (buffer-open-chars buffer) stream :start (buffer-right-open-pos buffer) 392 :end (buffer-line-cache-length buffer))) 393 (t 394 (write-string (line-chars structure) stream))))) 388 395 389 396 (defun %print-before-mark (mark stream) 390 397 (if (mark-line mark) 398 (let* ((line (mark-line mark)) 399 (buffer (line-%buffer line)) 400 (chars (line-chars line)) 401 (charpos (mark-charpos mark)) 402 (length (line-length line))) 403 (declare (simple-string chars)) 404 (cond ((or (> charpos length) (< charpos 0)) 405 (write-string "{bad mark}" stream)) 406 ((eq line (buffer-open-line buffer)) 407 (cond ((< charpos (buffer-left-open-pos buffer)) 408 (write-string (buffer-open-chars buffer) stream :end charpos)) 409 (t 410 (write-string (buffer-open-chars buffer) stream :end (buffer-left-open-pos buffer)) 411 (let ((p (+ charpos (- (buffer-right-open-pos buffer) (buffer-left-open-pos buffer))))) 412 (write-string (buffer-open-chars buffer) stream :start (buffer-right-open-pos buffer) 413 :end p))))) 414 (t 415 (write-string chars stream :end charpos)))) 416 (write-string "{deleted mark}" stream))) 417 418 419 (defun %print-after-mark (mark stream) 420 (if (mark-line mark) 391 421 (let* ((line (mark-line mark)) 422 (buffer (line-%buffer line)) 392 423 (chars (line-chars line)) 393 424 (charpos (mark-charpos mark)) … … 396 427 (cond ((or (> charpos length) (< charpos 0)) 397 428 (write-string "{bad mark}" stream)) 398 ((eq line *open-line*) 399 (cond ((< charpos *left-open-pos*) 400 (write-string *open-chars* stream :end charpos)) 429 ((eq line (buffer-open-line buffer)) 430 (cond ((< charpos (buffer-left-open-pos buffer)) 431 (write-string (buffer-open-chars buffer) stream :start charpos 432 :end (buffer-left-open-pos buffer)) 433 (write-string (buffer-open-chars buffer) stream :start (buffer-right-open-pos buffer) 434 :end (buffer-line-cache-length buffer))) 401 435 (t 402 (write-string *open-chars* stream :end *left-open-pos*) 403 (let ((p (+ charpos (- *right-open-pos* *left-open-pos*)))) 404 (write-string *open-chars* stream :start *right-open-pos* 405 :end p))))) 406 (t 407 (write-string chars stream :end charpos)))) 408 (write-string "{deleted mark}" stream))) 409 410 411 (defun %print-after-mark (mark stream) 412 (if (mark-line mark) 413 (let* ((line (mark-line mark)) 414 (chars (line-chars line)) 415 (charpos (mark-charpos mark)) 416 (length (line-length line))) 417 (declare (simple-string chars)) 418 (cond ((or (> charpos length) (< charpos 0)) 419 (write-string "{bad mark}" stream)) 420 ((eq line *open-line*) 421 (cond ((< charpos *left-open-pos*) 422 (write-string *open-chars* stream :start charpos 423 :end *left-open-pos*) 424 (write-string *open-chars* stream :start *right-open-pos* 425 :end *line-cache-length*)) 426 (t 427 (let ((p (+ charpos (- *right-open-pos* *left-open-pos*)))) 428 (write-string *open-chars* stream :start p 429 :end *line-cache-length*))))) 436 (let ((p (+ charpos (- (buffer-right-open-pos buffer) (buffer-left-open-pos buffer))))) 437 (write-string (buffer-open-chars buffer) stream :start p 438 :end (buffer-line-cache-length buffer)))))) 430 439 (t 431 440 (write-string chars stream :start charpos :end length)))) … … 455 464 (end (region-end region)) 456 465 (first-line (mark-line start)) 466 (buffer (line-%buffer first-line)) 457 467 (last-line (mark-line end))) 458 468 (cond … … 469 479 ((or (< cs 0) (> ce len)) 470 480 (write-string "{bad region}" stream)) 471 ((eq first-line *open-line*)472 (let ((gap (- *right-open-pos* *left-open-pos*)))481 ((eq first-line (buffer-open-line buffer)) 482 (let ((gap (- (buffer-right-open-pos buffer) (buffer-left-open-pos buffer)))) 473 483 (cond 474 ((<= ce *left-open-pos*)475 (write-string *open-chars*stream :start cs :end ce))476 ((>= cs *left-open-pos*)477 (write-string *open-chars*stream :start (+ cs gap)484 ((<= ce (buffer-left-open-pos buffer)) 485 (write-string (buffer-open-chars buffer) stream :start cs :end ce)) 486 ((>= cs (buffer-left-open-pos buffer)) 487 (write-string (buffer-open-chars buffer) stream :start (+ cs gap) 478 488 :end (+ ce gap))) 479 489 (t 480 (write-string *open-chars*stream :start cs481 :end *left-open-pos*)482 (write-string *open-chars* stream :start *right-open-pos*490 (write-string (buffer-open-chars buffer) stream :start cs 491 :end (buffer-left-open-pos buffer)) 492 (write-string (buffer-open-chars buffer) stream :start (buffer-right-open-pos buffer) 483 493 :end (+ gap ce)))))) 484 494 (t -
branches/ide-1.0/ccl/hemlock/src/htext3.lisp
r2064 r6571 47 47 (cond ((char= character #\newline) 48 48 (let* ((next (line-next line)) 49 (new-chars (subseq (the simple-string *open-chars*)50 0 *left-open-pos*))49 (new-chars (subseq (the simple-string (buffer-open-chars buffer)) 50 0 (buffer-left-open-pos buffer))) 51 51 (new-line (make-line :%buffer buffer 52 52 :chars (decf *cache-modification-tick*) 53 53 :previous line 54 54 :next next))) 55 (maybe-move-some-marks (charpos line new-line) *left-open-pos*56 (- charpos *left-open-pos*))55 (maybe-move-some-marks (charpos line new-line) (buffer-left-open-pos buffer) 56 (- charpos (buffer-left-open-pos buffer))) 57 57 (setf (line-%chars line) new-chars) 58 58 (setf (line-next line) new-line) 59 59 (if next (setf (line-previous next) new-line)) 60 60 (number-line new-line) 61 (setq *open-line* new-line *left-open-pos* 0))) 61 (setf (buffer-open-line buffer) new-line 62 (buffer-left-open-pos buffer) 0))) 62 63 (t 63 (if (= *right-open-pos* *left-open-pos*) 64 (grow-open-chars)) 64 (if (= (buffer-right-open-pos buffer) 65 (buffer-left-open-pos buffer)) 66 (grow-open-chars buffer)) 65 67 66 (maybe-move-some-marks (charpos line) *left-open-pos*68 (maybe-move-some-marks (charpos line) (buffer-left-open-pos buffer) 67 69 (1+ charpos)) 68 70 69 71 (cond 70 72 ((eq (mark-%kind mark) :right-inserting) 71 (decf *right-open-pos*)72 (setf (char (the simple-string *open-chars*) *right-open-pos*)73 (decf (buffer-right-open-pos buffer)) 74 (setf (char (the simple-string (buffer-open-chars buffer)) (buffer-right-open-pos buffer)) 73 75 character)) 74 76 (t 75 (setf (char (the simple-string *open-chars*) *left-open-pos*)77 (setf (char (the simple-string (buffer-open-chars buffer)) (buffer-left-open-pos buffer)) 76 78 character) 77 (incf *left-open-pos*)))))79 (incf (buffer-left-open-pos buffer)))))) 78 80 (buffer-note-insertion buffer mark 1)))) 79 81 … … 107 109 (modifying-line line mark) 108 110 (let ((length (- end start))) 109 (if (<= *right-open-pos* (+ *left-open-pos*end))110 (grow-open-chars (* (+ *line-cache-length*end) 2)))111 (if (<= (buffer-right-open-pos buffer) (+ (buffer-left-open-pos buffer) end)) 112 (grow-open-chars buffer (* (+ (buffer-line-cache-length buffer) end) 2))) 111 113 112 (maybe-move-some-marks (charpos line) *left-open-pos*114 (maybe-move-some-marks (charpos line) (buffer-left-open-pos buffer) 113 115 (+ charpos length)) 114 116 (cond 115 117 ((eq (mark-%kind mark) :right-inserting) 116 (let ((new (- *right-open-pos*length)))117 (%sp-byte-blt string start *open-chars* new *right-open-pos*)118 (set q *right-open-pos*new)))118 (let ((new (- (buffer-right-open-pos buffer) length))) 119 (%sp-byte-blt string start (buffer-open-chars buffer) new (buffer-right-open-pos buffer)) 120 (setf (buffer-right-open-pos buffer) new))) 119 121 (t 120 (let ((new (+ *left-open-pos*length)))121 (%sp-byte-blt string start *open-chars* *left-open-pos*new)122 (set q *left-open-pos*new)))))122 (let ((new (+ (buffer-left-open-pos buffer) length))) 123 (%sp-byte-blt string start (buffer-open-chars buffer) (buffer-left-open-pos buffer) new) 124 (setf (buffer-left-open-pos buffer) new))))) 123 125 (buffer-note-insertion buffer mark (- end start))))))) 124 126 … … 133 135 (end (region-end region)) 134 136 (first-line (mark-line start)) 137 (buffer (line-%buffer first-line)) 135 138 (last-line (mark-line end)) 136 139 (first-charpos (mark-charpos start)) … … 140 143 ((eq first-line last-line) 141 144 ;; simple case -- just BLT the characters in with insert-string 142 (if (eq first-line *open-line*) (close-line)) 145 (if (eq first-line (buffer-open-line buffer)) 146 (close-line buffer)) 143 147 (insert-string mark (line-chars first-line) first-charpos last-charpos)) 144 148 (t 145 (close-line )149 (close-line buffer) 146 150 (let* ((line (mark-line mark)) 147 151 (next (line-next line)) 148 152 (charpos (mark-charpos mark)) 149 (buffer (line-%buffer line))150 153 (old-chars (line-chars line))) 151 154 (declare (simple-string old-chars)) … … 205 208 (first-charpos (mark-charpos start)) 206 209 (last-charpos (mark-charpos end)) 207 (nins (count-characters region))) 210 (nins (count-characters region)) 211 (buffer (line-%buffer (mark-line mark)))) 208 212 (cond 209 213 ((eq first-line last-line) 210 214 ;; Simple case -- just BLT the characters in with insert-string. 211 (if (eq first-line *open-line*) (close-line)) 215 (if (eq first-line (buffer-open-line buffer)) 216 (close-line buffer)) 212 217 (insert-string mark (line-chars first-line) first-charpos last-charpos)) 213 218 (t 214 219 (when (bufferp (line-%buffer first-line)) 215 220 (error "Region is linked into Buffer ~S." (line-%buffer first-line))) 216 (close-line )221 (close-line buffer) 217 222 (let* ((line (mark-line mark)) 218 223 (second-line (line-next first-line)) 219 224 (next (line-next line)) 220 225 (charpos (mark-charpos mark)) 221 (buffer (line-%buffer line))222 226 (old-chars (line-chars line))) 223 227 (declare (simple-string old-chars)) -
branches/ide-1.0/ccl/hemlock/src/htext4.lisp
r2064 r6571 44 44 (cond 45 45 ((minusp n) 46 ( setq *left-open-pos* (+ *left-open-pos* n))46 (incf (buffer-left-open-pos buffer) n) 47 47 (move-some-marks (pos line) 48 (if (> pos *left-open-pos*)49 (if (<= pos charpos) *left-open-pos*(+ pos n))48 (if (> pos (buffer-left-open-pos buffer)) 49 (if (<= pos charpos) (buffer-left-open-pos buffer) (+ pos n)) 50 50 pos))) 51 51 52 52 (t 53 ( setq *right-open-pos* (+ *right-open-pos* n))53 (incf (buffer-right-open-pos buffer) n) 54 54 (let ((bound (+ charpos n))) 55 55 (move-some-marks (pos line) 56 56 (if (> pos charpos) 57 (if (<= pos bound) *left-open-pos*(- pos n))57 (if (<= pos bound) (buffer-left-open-pos buffer) (- pos n)) 58 58 pos))))) 59 59 (buffer-note-deletion buffer mark n) … … 99 99 (modifying-line first-line start) 100 100 (let ((num (- last-charpos first-charpos))) 101 ( setq *right-open-pos* (+ *right-open-pos* num))101 (incf (buffer-right-open-pos buffer) num) 102 102 ;; and fix up any marks in there: 103 103 (move-some-marks (charpos first-line) … … 109 109 (t 110 110 ;; hairy case -- squish lines together: 111 (close-line )111 (close-line buffer) 112 112 (let* ((first-chars (line-chars first-line)) 113 113 (last-chars (line-chars last-line)) … … 177 177 (modifying-line first-line start) 178 178 (let* ((num (- last-charpos first-charpos)) 179 (new-right (+ *right-open-pos*num))179 (new-right (+ (buffer-right-open-pos buffer) num)) 180 180 (new-chars (make-string num)) 181 181 (new-line (make-line … … 183 183 :%buffer (incf *disembodied-buffer-counter*)))) 184 184 (declare (simple-string new-chars)) 185 (%sp-byte-blt *open-chars* *right-open-pos*new-chars 0 num)186 (set q *right-open-pos*new-right)185 (%sp-byte-blt (buffer-open-chars buffer) (buffer-right-open-pos buffer) new-chars 0 num) 186 (setf (buffer-right-open-pos buffer) new-right) 187 187 ;; and fix up any marks in there: 188 188 (move-some-marks (charpos first-line) … … 197 197 (t 198 198 ;; hairy case -- squish lines together: 199 (close-line )199 (close-line buffer) 200 200 (let* ((first-chars (line-chars first-line)) 201 201 (last-chars (line-chars last-line)) … … 271 271 (end (region-end region)) 272 272 (first-line (mark-line start)) 273 (buffer (line-%buffer first-line)) 273 274 (last-line (mark-line end)) 274 275 (first-charpos (mark-charpos start)) … … 277 278 (cond 278 279 ((eq first-line last-line) 279 (when (eq first-line *open-line*) (close-line))280 (when (eq first-line (buffer-open-line buffer)) (close-line buffer)) 280 281 (let* ((length (- last-charpos first-charpos)) 281 282 (chars (make-string length)) … … 285 286 (mark line length :left-inserting)))) 286 287 (t 287 (close-line )288 (close-line buffer) 288 289 (let* ((first-chars (line-chars first-line)) 289 290 (length (- (length first-chars) first-charpos)) … … 352 353 (modifying-line end-line end) 353 354 (cond ((eq start-line end-line) 354 (let* ((res (fcs function (subseq *open-chars* first last))) 355 (let* ((res (fcs function (subseq (buffer-open-chars buffer) 356 first last))) 355 357 (rlen (length res)) 356 358 (new-left (+ first rlen)) 357 (delta (- new-left *left-open-pos*)))359 (delta (- new-left (buffer-left-open-pos buffer)))) 358 360 (declare (simple-string res)) 359 (when (> new-left *right-open-pos*)360 (grow-open-chars (+ new-left *line-cache-length*)))361 (%sp-byte-blt res 0 *open-chars* first *left-open-pos*)361 (when (> new-left (buffer-right-open-pos buffer)) 362 (grow-open-chars buffer (+ new-left (buffer-line-cache-length buffer)))) 363 (%sp-byte-blt res 0 (buffer-open-chars buffer) first (buffer-left-open-pos buffer)) 362 364 ;; 363 365 ;; Move marks to start or end of region, depending on kind. … … 370 372 new-left first) 371 373 (+ charpos delta)))))) 372 (set q *left-open-pos*new-left)))374 (setf (buffer-left-open-pos buffer) new-left))) 373 375 (t 374 376 ;; … … 403 405 ;; 404 406 ;; Do the last line, which is cached. 405 (let* ((res (fcs function (subseq (the simple-string *open-chars*)407 (let* ((res (fcs function (subseq (the simple-string (buffer-open-chars buffer)) 406 408 0 last))) 407 409 (rlen (length res)) 408 410 (delta (- rlen last))) 409 411 (declare (simple-string res)) 410 (when (> rlen *right-open-pos*)411 (grow-open-chars (+ rlen *line-cache-length*)))412 (%sp-byte-blt res 0 *open-chars*0 rlen)413 (set q *left-open-pos*rlen)412 (when (> rlen (buffer-right-open-pos buffer)) 413 (grow-open-chars buffer (+ rlen (buffer-line-cache-length buffer)))) 414 (%sp-byte-blt res 0 (buffer-open-chars buffer) 0 rlen) 415 (setf (buffer-left-open-pos buffer) rlen) 414 416 ;; 415 417 ;; Adjust marks after the end of the region and save ones in it. -
branches/ide-1.0/ccl/hemlock/src/line.lisp
r60 r6571 140 140 (defmacro line-length* (line) 141 141 "Returns the number of characters on the line, but it's a macro!" 142 `(cond ((eq ,line *open-line*) 143 (+ *left-open-pos* (- *line-cache-length* *right-open-pos*))) 144 ((line-buffered-p ,line)) 145 (t 146 (length (the simple-string (line-%chars ,line)))))) 142 (let* ((buffer (gensym))) 143 `(let* ((,buffer (line-%buffer ,line))) 144 (cond ((eq ,line (buffer-open-line ,buffer)) 145 (+ (buffer-left-open-pos ,buffer) (- (buffer-line-cache-length ,buffer) (buffer-right-open-pos ,buffer)))) 146 ((line-buffered-p ,line)) 147 (t 148 (length (the simple-string (line-%chars ,line)))))))) -
branches/ide-1.0/ccl/hemlock/src/search1.lisp
r6 r6571 634 634 If there is no match for the pattern then Mark is not modified and NIL 635 635 is returned." 636 (close-line )636 (close-line (line-%buffer (mark-line mark))) 637 637 (multiple-value-bind (line start matched) 638 638 (funcall (search-pattern-search-function search-pattern) … … 650 650 in the text starting at the given Mark. If N is Nil, all occurrences 651 651 following the Mark are replaced." 652 (close-line) 653 (do* ((replacement (coerce replacement 'simple-string)) 654 (new (length (the simple-string replacement))) 655 (fun (search-pattern-search-function search-pattern)) 656 (forward-p (eq (search-pattern-direction search-pattern) :forward)) 657 (n (if n (1- n) -1) (1- n)) 658 (m (copy-mark mark :temporary)) line start matched) 659 (()) 660 (multiple-value-setq (line start matched) 661 (funcall fun search-pattern (mark-line m) (mark-charpos m))) 662 (unless matched (return m)) 663 (setf (mark-line m) line (mark-charpos m) start) 664 (delete-characters m matched) 665 (insert-string m replacement) 666 (when forward-p (character-offset m new)) 667 (when (zerop n) (return m)) 668 (close-line))) 652 (let* ((buffer (line-%buffer (mark-line mark)))) 653 (close-line buffer) 654 (do* ((replacement (coerce replacement 'simple-string)) 655 (new (length (the simple-string replacement))) 656 (fun (search-pattern-search-function search-pattern)) 657 (forward-p (eq (search-pattern-direction search-pattern) :forward)) 658 (n (if n (1- n) -1) (1- n)) 659 (m (copy-mark mark :temporary)) line start matched) 660 (()) 661 (multiple-value-setq (line start matched) 662 (funcall fun search-pattern (mark-line m) (mark-charpos m))) 663 (unless matched (return m)) 664 (setf (mark-line m) line (mark-charpos m) start) 665 (delete-characters m matched) 666 (insert-string m replacement) 667 (when forward-p (character-offset m new)) 668 (when (zerop n) (return m)) 669 (close-line buffer)))) -
branches/ide-1.0/ccl/hemlock/src/struct.lisp
r807 r6571 111 111 (external-format :unix) ; Line-termination, for the time being 112 112 process ; Maybe a listener 113 (gap-context ) ; The value of *buffer-gap-context* 114 ; in the thread that can modify the buffer. 113 (line-cache-length 200) ; Length of string used for per-buffer gap. 114 (open-chars (make-string 200)) ; String used for per-buffer cache 115 (left-open-pos 0) ; Index of first free character to left of 116 ; gap in open-chars. 117 (right-open-pos 0) ; Index of first used character to right of 118 ; gap in open-chars 119 %open-line ; line which open-chars represent, or nil. 115 120 protected-region ; (optional) write-protected region 116 121 (font-regions (ccl::init-dll-header (ccl::make-dll-header))) 117 122 ; a doubly-linked list of font regions. 118 123 active-font-region ; currently active font region 124 (lock (ccl:make-lock)) 119 125 ) 120 126 … … 679 685 any buffer whose fields list contains the field.") 680 686 681 ;;; Shared buffer-gap context, used to communicate between command threads 682 ;;; and the event thread. Note that this isn't buffer-specific; in particular, 683 ;;; OPEN-LINE and friends may not point at a line that belongs to any 684 ;;; buffer. 685 686 (defstruct buffer-gap-context 687 (lock (ccl::make-lock)) 688 (left-open-pos 0) 689 (right-open-pos 0) 690 (line-cache-length 200) 691 (open-line nil) 692 (open-chars (make-string 200)) 693 ) 694 695 (define-symbol-macro *line-cache-length* (buffer-gap-context-line-cache-length *buffer-gap-context*)) 696 (define-symbol-macro *open-line* (buffer-gap-context-open-line *buffer-gap-context*)) 697 (define-symbol-macro *open-chars* (buffer-gap-context-open-chars *buffer-gap-context*)) 698 (define-symbol-macro *left-open-pos* (buffer-gap-context-left-open-pos *buffer-gap-context*)) 699 (define-symbol-macro *right-open-pos* (buffer-gap-context-right-open-pos *buffer-gap-context*)) 700 687 688 689 (defun buffer-open-line (buffer) 690 (if (typep buffer 'buffer) 691 (buffer-%open-line buffer))) 692 693 (defun (setf buffer-open-line) (line buffer) 694 (setf (buffer-%open-line buffer) line)) 695 696 697 698 699 700 -
branches/ide-1.0/ccl/hemlock/src/syntax.lisp
r55 r6571 455 455 chars ,start (strlen chars) ,vector ,mask)))) 456 456 ;;; 457 (defmacro cache-find-attribute (start result vector mask) 458 `(let ((gap (- *right-open-pos* *left-open-pos*))) 457 (defmacro cache-find-attribute (buffer start result vector mask) 458 `(let ((gap (- (buffer-right-open-pos buffer) 459 (buffer-left-open-pos buffer)))) 459 460 (declare (fixnum gap)) 460 461 (cond 461 ((>= ,start *left-open-pos*)462 ((>= ,start (buffer-left-open-pos buffer)) 462 463 (setq ,result 463 464 (%sp-find-character-with-attribute 464 *open-chars* (+ ,start gap) *line-cache-length*,vector ,mask))465 (buffer-open-chars buffer) (+ ,start gap) (buffer-line-cache-length buffer) ,vector ,mask)) 465 466 (when ,result (decf ,result gap))) 466 467 ((setq ,result (%sp-find-character-with-attribute 467 *open-chars* ,start *left-open-pos*,vector ,mask)))468 (buffer-open-chars buffer) ,start (buffer-left-open-pos buffer) ,vector ,mask))) 468 469 (t 469 470 (setq ,result 470 471 (%sp-find-character-with-attribute 471 *open-chars* *right-open-pos* *line-cache-length*,vector ,mask))472 (buffer-open-chars buffer) (buffer-right-open-pos buffer) (buffer-line-cache-length buffer) ,vector ,mask)) 472 473 (when ,result (decf ,result gap)))))) 473 474 ); eval-when (:compile-toplevel :execute) … … 475 476 (defun find-attribute (mark attribute &optional (test #'not-zerop)) 476 477 "Find the next character whose attribute value satisfies test." 477 (let ((charpos (mark-charpos mark))478 (let* ((charpos (mark-charpos mark)) 478 479 (line (mark-line mark)) 480 (buffer (line-%buffer line)) 479 481 (mask 0) 480 482 vector end-wins) … … 484 486 (cond 485 487 ((cond 486 ((eq line *open-line*)487 (when (cache-find-attribute charpos charpos vector mask)488 ((eq line (buffer-open-line buffer)) 489 (when (cache-find-attribute buffer charpos charpos vector mask) 488 490 (setf (mark-charpos mark) charpos) mark)) 489 491 (t … … 504 506 (return (line-end mark prev)) 505 507 (return nil))) 506 ((eq line *open-line*)507 (when (cache-find-attribute 0 charpos vector mask)508 ((eq line (buffer-open-line buffer)) 509 (when (cache-find-attribute buffer 0 charpos vector mask) 508 510 (return (move-to-position mark charpos line)))) 509 511 (t … … 523 525 chars 0 ,(or start '(strlen chars)) ,vector ,mask)))) 524 526 ;;; 525 (defmacro rev-cache-find-attribute ( start result vector mask)526 `(let ((gap (- *right-open-pos* *left-open-pos*)))527 (defmacro rev-cache-find-attribute (buffer start result vector mask) 528 `(let ((gap (- (buffer-right-open-pos buffer) (buffer-left-open-pos buffer)))) 527 529 (declare (fixnum gap)) 528 530 (cond 529 531 ,@(when start 530 `(((<= ,start *left-open-pos*)532 `(((<= ,start (buffer-left-open-pos buffer)) 531 533 (setq ,result 532 534 (%sp-reverse-find-character-with-attribute 533 *open-chars*0 ,start ,vector ,mask)))))535 (buffer-open-chars buffer) 0 ,start ,vector ,mask))))) 534 536 ((setq ,result (%sp-reverse-find-character-with-attribute 535 *open-chars* *right-open-pos*536 ,(if start `(+ ,start gap) ' *line-cache-length*)537 (buffer-open-chars buffer) (buffer-right-open-pos buffer) 538 ,(if start `(+ ,start gap) '(buffer-line-cache-length buffer)) 537 539 ,vector ,mask)) 538 540 (decf ,result gap)) … … 540 542 (setq ,result 541 543 (%sp-reverse-find-character-with-attribute 542 *open-chars* 0 *left-open-pos*,vector ,mask))))))544 (buffer-open-chars buffer) 0 (buffer-left-open-pos buffer) ,vector ,mask)))))) 543 545 544 546 ); eval-when (:compile-toplevel :execute) … … 547 549 "Find the previous character whose attribute value satisfies test." 548 550 (let* ((charpos (mark-charpos mark)) 549 (line (mark-line mark)) vector mask end-wins) 551 (line (mark-line mark)) 552 (buffer (line-%buffer line)) 553 vector mask end-wins) 550 554 (declare (type (or (simple-array (mod 256)) null) vector) 551 555 (type (or fixnum null) charpos)) … … 553 557 (cond 554 558 ((cond 555 ((eq line *open-line*)556 (when (rev-cache-find-attribute charpos charpos vector mask)559 ((eq line (buffer-open-line buffer)) 560 (when (rev-cache-find-attribute buffer charpos charpos vector mask) 557 561 (setf (mark-charpos mark) (1+ charpos)) mark)) 558 562 (t … … 572 576 (return (line-start mark next)) 573 577 (return nil))) 574 ((eq line *open-line*)575 (when (rev-cache-find-attribute nil charpos vector mask)578 ((eq line (buffer-open-line buffer)) 579 (when (rev-cache-find-attribute buffer nil charpos vector mask) 576 580 (return (move-to-position mark (1+ charpos) line)))) 577 581 (t
Note:
See TracChangeset
for help on using the changeset viewer.
