1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- %
- % Buffer.SL - Individual Buffer Manipulation Functions
- %
- % Author: Alan Snyder
- % Hewlett-Packard/CRC
- % Date: 27 July 1982
- %
- % This file contains functions that manipulate individual buffers.
- % It is intended that someday EMODE will be reorganized
- % so that all such functions will eventually be in this file.
- %
- % This file requires COMMON.
- %
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- (fluid '(CurrentLine CurrentBufferSize CurrentLineIndex point))
- (de char-blank? (ch)
- (or (= ch (char space)) (= ch (char tab))))
- (de current-line-length () (length CurrentLine))
- (de current-line-empty () (= (length CurrentLine) 0))
- (de current-line-blank? ()
- (for (in ch CurrentLine)
- (always (char-blank? ch))
- ))
- (de at-buffer-end? ()
- (and (current-line-is-last?) (= point (current-line-length))))
- (de at-buffer-start? ()
- (and (= CurrentLineIndex 0) (= point 0)))
- (de current-line-is-last? ()
- (>= CurrentLineIndex (- CurrentBufferSize 1)))
- (de current-line-is-first? ()
- (= CurrentLineIndex 0))
- (de current-line-fetch (n) (car (pnth CurrentLine (+ n 1))))
- (de current-line-store (n c)
- (setf CurrentLine (InsertListEntry (DeleteListEntry CurrentLine n) n c)))
- (de current-buffer-size ()
- % Return the number of lines in the current buffer. Note that if the
- % buffer does not end with an incomplete line, then its last line will
- % be empty. (See CURRENT-BUFFER-VISIBLE-SIZE, which corrects for this
- % anomaly.)
- CurrentBufferSize)
- (de current-buffer-visible-size ()
- % Return the visible number of lines in the current buffer. In other words,
- % don't count the last line if it is empty, since that is just an artifact of
- % the buffer representation.
- (let* ((buffer-size CurrentBufferSize)
- (last-line-index (- buffer-size 1))
- )
- (if (= CurrentLineIndex last-line-index) % CurrentLine hack!
- (if CurrentLine buffer-size (- buffer-size 1))
- (if (>= (size (GetBufferText last-line-index)) 0)
- buffer-size (- buffer-size 1))
- )))
- (de current-buffer-goto (line-number char-number)
- (SelectLine line-number)
- (setf point char-number)
- )
- (de move-to-next-line ()
- (let ((next-index (+ CurrentLineIndex 1)))
- (cond ((< next-index CurrentBufferSize)
- (SelectLine next-index) (setf point 0))
- (t (setf point (length CurrentLine)) (PutLine))
- )))
- (de move-to-previous-line ()
- (let ((next-index (- CurrentLineIndex 1)))
- (cond ((>= next-index 0)
- (SelectLine next-index) (setf point 0))
- (t (setf point 0) (PutLine))
- )))
|