/[cmucl]/src/hemlock/tty-screen.lisp
ViewVC logotype

Contents of /src/hemlock/tty-screen.lisp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.9 - (hide annotations)
Tue Mar 13 15:50:01 2001 UTC (13 years, 1 month ago) by pw
Branch: MAIN
CVS Tags: sparc-tramp-assem-base, double-double-array-base, post-merge-intl-branch, release-19b-pre1, release-19b-pre2, merged-unicode-utf16-extfmt-2009-06-11, double-double-init-sparc-2, unicode-utf16-extfmt-2009-03-27, double-double-base, snapshot-2007-09, snapshot-2007-08, snapshot-2008-08, snapshot-2008-09, ppc_gencgc_snap_2006-01-06, sse2-packed-2008-11-12, snapshot-2008-05, snapshot-2008-06, snapshot-2008-07, snapshot-2007-05, snapshot-2008-01, snapshot-2008-02, snapshot-2008-03, intl-branch-working-2010-02-19-1000, snapshot-2006-11, snapshot-2006-10, double-double-init-sparc, snapshot-2006-12, unicode-string-buffer-impl-base, sse2-base, release-20b-pre1, release-20b-pre2, unicode-string-buffer-base, sse2-packed-base, sparc-tramp-assem-2010-07-19, amd64-dd-start, snapshot-2003-10, snapshot-2004-10, release-18e-base, release-19f-pre1, snapshot-2008-12, snapshot-2008-11, intl-2-branch-base, snapshot-2004-08, snapshot-2004-09, remove_negative_zero_not_zero, snapshot-2007-01, snapshot-2007-02, snapshot-2004-05, snapshot-2004-06, snapshot-2004-07, release-19e, release-19d, GIT-CONVERSION, double-double-init-ppc, release-19c, dynamic-extent-base, unicode-utf16-sync-2008-12, LINKAGE_TABLE, release-19c-base, cross-sol-x86-merged, label-2009-03-16, release-19f-base, PRE_LINKAGE_TABLE, merge-sse2-packed, mod-arith-base, sparc_gencgc_merge, merge-with-19f, snapshot-2004-12, snapshot-2004-11, intl-branch-working-2010-02-11-1000, unicode-snapshot-2009-05, unicode-snapshot-2009-06, amd64-merge-start, ppc_gencgc_snap_2005-12-17, double-double-init-%make-sparc, unicode-utf16-sync-2008-07, release-18e-pre2, unicode-utf16-sync-2008-09, unicode-utf16-extfmts-sync-2008-12, prm-before-macosx-merge-tag, cold-pcl-base, RELEASE_20b, snapshot-2008-04, snapshot-2003-11, snapshot-2005-07, unicode-utf16-sync-label-2009-03-16, RELEASE_19f, snapshot-2007-03, release-20a-base, cross-sol-x86-base, unicode-utf16-char-support-2009-03-26, unicode-utf16-char-support-2009-03-25, release-19a-base, unicode-utf16-extfmts-pre-sync-2008-11, snapshot-2008-10, sparc_gencgc, snapshot-2007-04, snapshot-2010-12, snapshot-2010-11, unicode-utf16-sync-2008-11, snapshot-2007-07, snapshot-2011-09, snapshot-2011-06, snapshot-2011-07, snapshot-2011-04, snapshot-2007-06, snapshot-2011-02, snapshot-2011-03, snapshot-2011-01, snapshot-2003-12, release-19a-pre1, release-19a-pre3, release-19a-pre2, pre-merge-intl-branch, release-19a, UNICODE-BASE, double-double-array-checkpoint, double-double-reader-checkpoint-1, release-19d-base, release-19e-pre1, double-double-irrat-end, release-19e-pre2, snapshot-2010-05, snapshot-2010-04, snapshot-2010-07, snapshot-2010-06, snapshot-2010-01, snapshot-2010-03, snapshot-2010-02, release-19d-pre2, release-19d-pre1, snapshot-2010-08, release-18e, double-double-init-checkpoint-1, double-double-reader-base, label-2009-03-25, snapshot-2005-03, release-19b-base, cross-sol-x86-2010-12-20, double-double-init-x86, sse2-checkpoint-2008-10-01, intl-branch-2010-03-18-1300, snapshot-2005-11, double-double-sparc-checkpoint-1, snapshot-2004-04, sse2-merge-with-2008-11, sse2-merge-with-2008-10, snapshot-2005-10, RELEASE_20a, snapshot-2005-12, release-20a-pre1, snapshot-2005-01, snapshot-2009-11, snapshot-2009-12, unicode-utf16-extfmt-2009-06-11, portable-clx-import-2009-06-16, unicode-utf16-string-support, release-19c-pre1, cross-sparc-branch-base, release-19e-base, intl-branch-base, double-double-irrat-start, snapshot-2005-06, snapshot-2005-05, snapshot-2005-04, ppc_gencgc_snap_2005-05-14, snapshot-2005-02, unicode-utf16-base, portable-clx-base, snapshot-2005-09, snapshot-2005-08, lisp-executable-base, snapshot-2009-08, snapshot-2007-12, snapshot-2007-10, snapshot-2007-11, snapshot-2009-02, snapshot-2009-01, snapshot-2009-07, snapshot-2009-05, snapshot-2009-04, snapshot-2006-02, snapshot-2006-03, release-18e-pre1, snapshot-2006-01, snapshot-2006-06, snapshot-2006-07, snapshot-2006-04, snapshot-2006-05, pre-telent-clx, snapshot-2006-08, snapshot-2006-09, HEAD
Branch point for: release-19b-branch, double-double-reader-branch, double-double-array-branch, mod-arith-branch, RELEASE-19F-BRANCH, portable-clx-branch, sparc_gencgc_branch, cross-sparc-branch, RELEASE-20B-BRANCH, unicode-string-buffer-branch, sparc-tramp-assem-branch, dynamic-extent, UNICODE-BRANCH, release-19d-branch, ppc_gencgc_branch, sse2-packed-branch, lisp-executable, RELEASE-20A-BRANCH, amd64-dd-branch, double-double-branch, unicode-string-buffer-impl-branch, intl-branch, release-18e-branch, cold-pcl, unicode-utf16-branch, cross-sol-x86-branch, release-19e-branch, sse2-branch, release-19a-branch, release-19c-branch, intl-2-branch, unicode-utf16-extfmt-branch
Changes since 1.8: +2 -2 lines
Change toplevel PROCLAIMs to DECLAIMs.
1 ram 1.1 ;;; -*- Log: hemlock.log; Package: Hemlock-Internals -*-
2     ;;;
3     ;;; **********************************************************************
4 ram 1.2 ;;; This code was written as part of the CMU Common Lisp project at
5     ;;; Carnegie Mellon University, and has been placed in the public domain.
6     ;;;
7     (ext:file-comment
8 pw 1.9 "$Header: /tiger/var/lib/cvsroots/cmucl/src/hemlock/tty-screen.lisp,v 1.9 2001/03/13 15:50:01 pw Rel $")
9 ram 1.2 ;;;
10 ram 1.1 ;;; **********************************************************************
11     ;;;
12     ;;; Written by Bill Chiles, except for the code that implements random typeout,
13 chiles 1.5 ;;; which was done by Blaine Burks and Bill Chiles. The code for splitting
14     ;;; windows was rewritten by Blaine Burks to allow more than a 50/50 split.
15 ram 1.1 ;;;
16     ;;; Terminal device screen management functions.
17     ;;;
18    
19     (in-package "HEMLOCK-INTERNALS")
20    
21    
22    
23     ;;;; Terminal screen initialization
24    
25 pw 1.9 (declaim (special *parse-starting-mark*))
26 ram 1.1
27     (defun init-tty-screen-manager (tty-name)
28     (setf *line-wrap-char* #\!)
29     (setf *window-list* ())
30     (let* ((device (make-tty-device tty-name))
31     (width (tty-device-columns device))
32     (height (tty-device-lines device))
33     (echo-height (value ed::echo-area-height))
34     (main-lines (- height echo-height 1)) ;-1 for echo modeline.
35     (main-text-lines (1- main-lines)) ;also main-modeline-pos.
36     (last-text-line (1- main-text-lines)))
37     (setf (device-bottom-window-base device) last-text-line)
38     ;;
39     ;; Make echo area.
40     (let* ((echo-hunk (make-tty-hunk :position (1- height) :height echo-height
41     :text-position (- height 2)
42     :text-height echo-height :device device))
43     (echo (internal-make-window :hunk echo-hunk)))
44     (setf *echo-area-window* echo)
45     (setf (device-hunk-window echo-hunk) echo)
46     (setup-window-image *parse-starting-mark* echo echo-height width)
47     (setup-modeline-image *echo-area-buffer* echo)
48 ram 1.4 (setf (device-hunk-previous echo-hunk) echo-hunk
49     (device-hunk-next echo-hunk) echo-hunk)
50 ram 1.1 (prepare-window-for-redisplay echo))
51     ;;
52     ;; Make the main window.
53     (let* ((main-hunk (make-tty-hunk :position main-text-lines
54     :height main-lines
55     :text-position last-text-line
56     :text-height main-text-lines
57     :device device))
58     (main (internal-make-window :hunk main-hunk)))
59     (setf (device-hunk-window main-hunk) main)
60     (setf *current-window* main)
61     (setup-window-image (buffer-point *current-buffer*)
62     main main-text-lines width)
63     (setup-modeline-image *current-buffer* main)
64     (prepare-window-for-redisplay main)
65     (setf (device-hunk-previous main-hunk) main-hunk
66     (device-hunk-next main-hunk) main-hunk)
67     (setf (device-hunks device) main-hunk))
68     (defhvar "Paren Pause Period"
69     "This is how long commands that deal with \"brackets\" shows the cursor at
70     the matching \"bracket\" for this number of seconds."
71     :value 0.5
72     :mode "Lisp")))
73    
74    
75    
76     ;;;; Building devices from termcaps.
77    
78     ;;; MAKE-TTY-DEVICE returns a device built from a termcap. Some function
79     ;;; slots are set to the appropriate function even though the capability
80     ;;; might not exist; in this case, we simply set the control string value
81     ;;; to the empty string. Some function slots are set differently depending
82     ;;; on available capability.
83     ;;;
84     (defun make-tty-device (name)
85     (let ((termcap (get-termcap name))
86     (device (%make-tty-device :name name)))
87     (when (termcap :overstrikes termcap)
88     (error "Terminal sufficiently irritating -- not currently supported."))
89     ;;
90     ;; Similar device slots.
91     (setf (device-init device) #'init-tty-device)
92     (setf (device-exit device) #'exit-tty-device)
93     (setf (device-smart-redisplay device)
94     (if (and (termcap :open-line termcap) (termcap :delete-line termcap))
95     #'tty-smart-window-redisplay
96     #'tty-semi-dumb-window-redisplay))
97     (setf (device-dumb-redisplay device) #'tty-dumb-window-redisplay)
98     (setf (device-clear device) #'clear-device)
99     (setf (device-put-cursor device) #'tty-put-cursor)
100     (setf (device-show-mark device) #'tty-show-mark)
101     (setf (device-next-window device) #'tty-next-window)
102     (setf (device-previous-window device) #'tty-previous-window)
103     (setf (device-make-window device) #'tty-make-window)
104     (setf (device-delete-window device) #'tty-delete-window)
105     (setf (device-random-typeout-setup device) #'tty-random-typeout-setup)
106     (setf (device-random-typeout-cleanup device) #'tty-random-typeout-cleanup)
107     (setf (device-random-typeout-full-more device) #'do-tty-full-more)
108     (setf (device-random-typeout-line-more device)
109     #'update-tty-line-buffered-stream)
110     (setf (device-force-output device) #'tty-force-output)
111     (setf (device-finish-output device) #'tty-finish-output)
112     (setf (device-beep device) #'tty-beep)
113     ;;
114 chiles 1.5 ;; A few useful values.
115 ram 1.1 (setf (tty-device-dumbp device)
116     (not (and (termcap :open-line termcap)
117     (termcap :delete-line termcap))))
118 ram 1.3 ;;
119     ;; Get size and speed.
120     (multiple-value-bind (lines cols speed)
121     (get-terminal-attributes)
122     (setf (tty-device-lines device) (or lines (termcap :lines termcap)))
123     (let ((cols (or cols (termcap :columns termcap))))
124     (setf (tty-device-columns device)
125     (if (termcap :auto-margins-p termcap)
126     (1- cols) cols)))
127     (setf (tty-device-speed device) speed))
128 ram 1.1 ;;
129     ;; Some function slots.
130     (setf (tty-device-display-string device)
131     (if (termcap :underlines termcap)
132     #'display-string-checking-underlines
133     #'display-string))
134     (setf (tty-device-standout-init device) #'standout-init)
135     (setf (tty-device-standout-end device) #'standout-end)
136     (setf (tty-device-open-line device)
137     (if (termcap :open-line termcap)
138     #'open-tty-line
139     ;; look for scrolling region stuff
140     ))
141     (setf (tty-device-delete-line device)
142     (if (termcap :delete-line termcap)
143     #'delete-tty-line
144     ;; look for reverse scrolling stuff
145     ))
146     (setf (tty-device-clear-to-eol device)
147     (if (termcap :clear-to-eol termcap)
148     #'clear-to-eol
149     #'space-to-eol))
150     (setf (tty-device-clear-lines device) #'clear-lines)
151     (setf (tty-device-clear-to-eow device) #'clear-to-eow)
152     ;;
153     ;; Insert and delete modes.
154     (let ((init-insert-mode (termcap :init-insert-mode termcap))
155     (init-insert-char (termcap :init-insert-char termcap))
156     (end-insert-char (termcap :end-insert-char termcap)))
157     (when (and init-insert-mode (string/= init-insert-mode ""))
158     (setf (tty-device-insert-string device) #'tty-insert-string)
159     (setf (tty-device-insert-init-string device) init-insert-mode)
160     (setf (tty-device-insert-end-string device)
161     (termcap :end-insert-mode termcap)))
162     (when init-insert-char
163     (setf (tty-device-insert-string device) #'tty-insert-string)
164     (setf (tty-device-insert-char-init-string device) init-insert-char))
165     (when (and end-insert-char (string/= end-insert-char ""))
166     (setf (tty-device-insert-char-end-string device) end-insert-char)))
167     (let ((delete-char (termcap :delete-char termcap)))
168     (when delete-char
169     (setf (tty-device-delete-char device) #'delete-char)
170     (setf (tty-device-delete-char-string device) delete-char)
171     (setf (tty-device-delete-init-string device)
172     (termcap :init-delete-mode termcap))
173     (setf (tty-device-delete-end-string device)
174     (termcap :end-delete-mode termcap))))
175     ;;
176     ;; Some string slots.
177     (setf (tty-device-standout-init-string device)
178     (or (termcap :init-standout-mode termcap) ""))
179     (setf (tty-device-standout-end-string device)
180     (or (termcap :end-standout-mode termcap) ""))
181     (setf (tty-device-clear-to-eol-string device)
182     (termcap :clear-to-eol termcap))
183     (let ((clear-string (termcap :clear-display termcap)))
184     (unless clear-string
185     (error "Terminal not sufficiently powerful enough to run Hemlock."))
186     (setf (tty-device-clear-string device) clear-string))
187     (setf (tty-device-open-line-string device)
188     (termcap :open-line termcap))
189     (setf (tty-device-delete-line-string device)
190     (termcap :delete-line termcap))
191     (let* ((init-string (termcap :init-string termcap))
192     (init-file (termcap :init-file termcap))
193     (init-file-string (if init-file (get-init-file-string init-file)))
194     (init-cm-string (termcap :init-cursor-motion termcap)))
195     (setf (tty-device-init-string device)
196     (concatenate 'simple-string (or init-string "")
197     (or init-file-string "") (or init-cm-string ""))))
198     (setf (tty-device-cm-end-string device)
199     (or (termcap :end-cursor-motion termcap) ""))
200     ;;
201     ;; Cursor motion slots.
202     (let ((cursor-motion (termcap :cursor-motion termcap)))
203     (unless cursor-motion
204     (error "Terminal not sufficiently powerful enough to run Hemlock."))
205     (let ((x-add-char (getf cursor-motion :x-add-char))
206     (y-add-char (getf cursor-motion :y-add-char))
207     (x-condx-char (getf cursor-motion :x-condx-char))
208     (y-condx-char (getf cursor-motion :y-condx-char)))
209     (when x-add-char
210     (setf (tty-device-cm-x-add-char device) (char-code x-add-char)))
211     (when y-add-char
212     (setf (tty-device-cm-y-add-char device) (char-code y-add-char)))
213     (when x-condx-char
214     (setf (tty-device-cm-x-condx-char device) (char-code x-condx-char))
215     (setf (tty-device-cm-x-condx-add-char device)
216     (char-code (getf cursor-motion :x-condx-add-char))))
217     (when y-condx-char
218     (setf (tty-device-cm-y-condx-char device) (char-code y-condx-char))
219     (setf (tty-device-cm-y-condx-add-char device)
220     (char-code (getf cursor-motion :y-condx-add-char)))))
221     (setf (tty-device-cm-string1 device) (getf cursor-motion :string1))
222     (setf (tty-device-cm-string2 device) (getf cursor-motion :string2))
223     (setf (tty-device-cm-string3 device) (getf cursor-motion :string3))
224     (setf (tty-device-cm-one-origin device) (getf cursor-motion :one-origin))
225     (setf (tty-device-cm-reversep device) (getf cursor-motion :reversep))
226     (setf (tty-device-cm-x-pad device) (getf cursor-motion :x-pad))
227     (setf (tty-device-cm-y-pad device) (getf cursor-motion :y-pad)))
228     ;;
229     ;; Screen image initialization.
230     (let* ((lines (tty-device-lines device))
231     (columns (tty-device-columns device))
232     (screen-image (make-array lines)))
233     (dotimes (i lines)
234     (setf (svref screen-image i) (make-si-line columns)))
235     (setf (tty-device-screen-image device) screen-image))
236     device))
237    
238    
239    
240     ;;;; Making a window
241    
242     (defun tty-make-window (device start modelinep window font-family
243 chiles 1.5 ask-user x y width height proportion)
244 ram 1.1 (declare (ignore window font-family ask-user x y width height))
245 chiles 1.5 (let* ((old-window (current-window))
246     (victim (window-hunk old-window))
247 ram 1.1 (text-height (tty-hunk-text-height victim))
248     (availability (if modelinep (1- text-height) text-height)))
249 chiles 1.5 (when (> availability 1)
250     (let* ((new-lines (truncate (* availability proportion)))
251     (old-lines (- availability new-lines))
252     (pos (device-hunk-position victim))
253     (new-height (if modelinep (1+ new-lines) new-lines))
254     (new-text-pos (if modelinep (1- pos) pos))
255     (new-hunk (make-tty-hunk :position pos
256     :height new-height
257     :text-position new-text-pos
258     :text-height new-lines
259     :device device))
260     (new-window (internal-make-window :hunk new-hunk)))
261     (declare (fixnum new-lines old-lines pos new-height new-text-pos))
262     (setf (device-hunk-window new-hunk) new-window)
263     (let* ((old-text-pos-diff (- pos (tty-hunk-text-position victim)))
264     (old-win-new-pos (- pos new-height)))
265     (declare (fixnum old-text-pos-diff old-win-new-pos))
266     (setf (device-hunk-height victim)
267     (- (device-hunk-height victim) new-height))
268     (setf (tty-hunk-text-height victim) old-lines)
269     (setf (device-hunk-position victim) old-win-new-pos)
270     (setf (tty-hunk-text-position victim)
271     (- old-win-new-pos old-text-pos-diff)))
272     (setup-window-image start new-window new-lines
273     (window-width old-window))
274     (prepare-window-for-redisplay new-window)
275     (when modelinep
276     (setup-modeline-image (line-buffer (mark-line start)) new-window))
277     (change-window-image-height old-window old-lines)
278     (shiftf (device-hunk-previous new-hunk)
279     (device-hunk-previous (device-hunk-next victim))
280     new-hunk)
281     (shiftf (device-hunk-next new-hunk) (device-hunk-next victim) new-hunk)
282     (setf *currently-selected-hunk* nil)
283     (setf *screen-image-trashed* t)
284     new-window))))
285 ram 1.1
286    
287    
288     ;;;; Deleting a window
289    
290     (defun tty-delete-window (window)
291     (let* ((hunk (window-hunk window))
292     (prev (device-hunk-previous hunk))
293     (next (device-hunk-next hunk))
294     (device (device-hunk-device hunk)))
295     (setf (device-hunk-next prev) next)
296     (setf (device-hunk-previous next) prev)
297     (let ((buffer (window-buffer window)))
298     (setf (buffer-windows buffer) (delq window (buffer-windows buffer))))
299     (let ((new-lines (device-hunk-height hunk)))
300     (declare (fixnum new-lines))
301 chiles 1.7 (cond ((eq hunk (device-hunks (device-hunk-device next)))
302     (incf (device-hunk-height next) new-lines)
303     (incf (tty-hunk-text-height next) new-lines)
304     (let ((w (device-hunk-window next)))
305     (change-window-image-height w (+ new-lines (window-height w)))))
306     (t
307 ram 1.1 (incf (device-hunk-height prev) new-lines)
308     (incf (device-hunk-position prev) new-lines)
309     (incf (tty-hunk-text-height prev) new-lines)
310     (incf (tty-hunk-text-position prev) new-lines)
311     (let ((w (device-hunk-window prev)))
312     (change-window-image-height w (+ new-lines (window-height w)))))))
313     (when (eq hunk (device-hunks device))
314     (setf (device-hunks device) next)))
315     (setf *currently-selected-hunk* nil)
316     (setf *screen-image-trashed* t))
317    
318    
319    
320     ;;;; Next and Previous window operations.
321    
322     (defun tty-next-window (window)
323     (device-hunk-window (device-hunk-next (window-hunk window))))
324    
325     (defun tty-previous-window (window)
326     (device-hunk-window (device-hunk-previous (window-hunk window))))
327    
328    
329    
330     ;;;; Random typeout support
331    
332     (defun tty-random-typeout-setup (device stream height)
333     (declare (fixnum height))
334     (let* ((*more-prompt-action* :empty)
335     (height (min (1- (device-bottom-window-base device)) height))
336     (old-hwindow (random-typeout-stream-window stream))
337     (new-hwindow (if old-hwindow
338     (change-tty-random-typeout-window old-hwindow height)
339     (setf (random-typeout-stream-window stream)
340     (make-tty-random-typeout-window
341     device
342     (buffer-start-mark
343     (line-buffer
344     (mark-line
345     (random-typeout-stream-mark stream))))
346     height)))))
347     (funcall (tty-device-clear-to-eow device) (window-hunk new-hwindow) 0 0)))
348    
349     (defun change-tty-random-typeout-window (window height)
350     (update-modeline-field (window-buffer window) window :more-prompt)
351     (let* ((height-1 (1- height))
352     (hunk (window-hunk window)))
353     (setf (device-hunk-position hunk) height-1
354     (device-hunk-height hunk) height
355     (tty-hunk-text-position hunk) (1- height-1)
356     (tty-hunk-text-height hunk) height-1)
357     (change-window-image-height window height-1)
358     window))
359    
360     (defun make-tty-random-typeout-window (device mark height)
361     (let* ((height-1 (1- height))
362     (hunk (make-tty-hunk :position height-1
363     :height height
364     :text-position (1- height-1)
365     :text-height height-1
366     :device device))
367     (window (internal-make-window :hunk hunk)))
368     (setf (device-hunk-window hunk) window)
369     (setf (device-hunk-device hunk) device)
370     (setup-window-image mark window height-1 (tty-device-columns device))
371     (setf *window-list* (delete window *window-list*))
372     (prepare-window-for-redisplay window)
373     (setup-modeline-image (line-buffer (mark-line mark)) window)
374     (update-modeline-field (window-buffer window) window :more-prompt)
375     window))
376    
377     (defun tty-random-typeout-cleanup (stream degree)
378     (declare (ignore degree))
379     (let* ((window (random-typeout-stream-window stream))
380     (stream-hunk (window-hunk window))
381     (last-line-affected (device-hunk-position stream-hunk))
382     (device (device-hunk-device stream-hunk))
383     (*more-prompt-action* :normal))
384     (declare (fixnum last-line-affected))
385     (update-modeline-field (window-buffer window) window :more-prompt)
386     (funcall (tty-device-clear-to-eow device) stream-hunk 0 0)
387     (do* ((hunk (device-hunks device) (device-hunk-next hunk))
388     (window (device-hunk-window hunk) (device-hunk-window hunk))
389     (last (device-hunk-previous hunk)))
390     ((>= (device-hunk-position hunk) last-line-affected)
391     (if (= (device-hunk-position hunk) last-line-affected)
392     (redisplay-window-all window)
393     (tty-redisplay-n-lines window
394     (- (+ last-line-affected
395     (tty-hunk-text-height hunk))
396     (tty-hunk-text-position hunk)))))
397     (redisplay-window-all window)
398     (when (eq hunk last) (return)))))

  ViewVC Help
Powered by ViewVC 1.1.5