[climacs-cvs] CVS update: climacs/gui.lisp

Robert Strandh rstrandh at common-lisp.net
Thu Jan 6 16:41:13 UTC 2005


Update of /project/climacs/cvsroot/climacs
In directory common-lisp.net:/tmp/cvs-serv18560

Modified Files:
	gui.lisp 
Log Message:
Improved next- and previous-line commands so that a sequence
of such commands tries to preserve the original column.

Date: Thu Jan  6 17:41:11 2005
Author: rstrandh

Index: climacs/gui.lisp
diff -u climacs/gui.lisp:1.47 climacs/gui.lisp:1.48
--- climacs/gui.lisp:1.47	Wed Jan  5 06:09:04 2005
+++ climacs/gui.lisp	Thu Jan  6 17:41:11 2005
@@ -178,6 +178,8 @@
 	  (t (unread-gesture gesture :stream stream)
 	     (values 1 nil)))))
 
+(defvar *previous-command*)
+
 (defun climacs-top-level (frame &key
 			  command-parser command-unparser 
 			  partial-command-parser prompt)
@@ -206,7 +208,10 @@
 				  (error (condition)
 				    (beep)
 				    (format *error-output* "~a~%" condition)))
-				(setf gestures '())))
+				(setf gestures '())
+				(setf *previous-command* (if (consp command)
+							     (car command)
+							     command))))
 			     (t nil)))
 		     (let ((buffer (buffer (win frame))))
 		       (when (modified-p buffer)
@@ -315,11 +320,21 @@
       (insert-sequence point line)
       (insert-object point #\Newline))))
 
+(defvar *goal-column*)
+
 (define-named-command com-previous-line ()
-  (previous-line (point (win *application-frame*))))
+  (let ((point (point (win *application-frame*))))
+    (unless (or (eq *previous-command* 'com-previous-line)
+		(eq *previous-command* 'com-next-line))
+      (setf *goal-column* (column-number point)))
+    (previous-line point *goal-column*)))
 
 (define-named-command com-next-line ()
-  (next-line (point (win *application-frame*))))
+  (let ((point (point (win *application-frame*))))
+    (unless (or (eq *previous-command* 'com-previous-line)
+		(eq *previous-command* 'com-next-line))
+      (setf *goal-column* (column-number point)))
+    (next-line point *goal-column*)))
 
 (define-named-command com-open-line ()
   (open-line (point (win *application-frame*))))




More information about the Climacs-cvs mailing list