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

Robert Strandh rstrandh at common-lisp.net
Sat Feb 19 05:23:18 UTC 2005


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

Modified Files:
	gui.lisp 
Log Message:
Implemented flag *numeric-argument-p* to detect whether a numeric
argument was given att all. 

Implemented eval-expression, M-:, which uses numeric-argument-p to
dentermine whether to show the result in the minibuffer or to insert
it into the buffer itself.


Date: Sat Feb 19 06:23:17 2005
Author: rstrandh

Index: climacs/gui.lisp
diff -u climacs/gui.lisp:1.108 climacs/gui.lisp:1.109
--- climacs/gui.lisp:1.108	Sun Feb 13 03:52:08 2005
+++ climacs/gui.lisp	Sat Feb 19 06:23:16 2005
@@ -240,6 +240,11 @@
 			(find-if (lambda (pane) (typep pane 'scroller-pane))
 				 (sheet-children vbox)))))))
 
+(defvar *numeric-argument-p* (list nil))
+
+(defun substitute-numeric-argument-p (command numargp)
+  (substitute numargp *numeric-argument-p* command :test #'eq))
+
 (defun climacs-top-level (frame &key
 			  command-parser command-unparser 
 			  partial-command-parser prompt)
@@ -254,34 +259,36 @@
        (redisplay-frame-panes frame :force-p t)
        (loop (catch 'outer-loop
 	       (loop for gestures = '()
-		     for numarg = (read-numeric-argument :stream *standard-input*)
-		     do (loop (setf *current-gesture* (climacs-read-gesture))
-			      (setf gestures (nconc gestures (list *current-gesture*)))
-			      (let ((item (find-gestures gestures 'global-climacs-table)))
-				(cond ((not item)
-				       (beep) (return))
-				      ((eq (command-menu-item-type item) :command)
-				       (let ((command (command-menu-item-value item)))
-					 (unless (consp command)
-					   (setf command (list command)))
-					 (setf command (substitute-numeric-argument-marker command numarg))
-					 (handler-case 
-					     (execute-frame-command frame command)
-					   (error (condition)
-					     (beep)
-					     (format *error-output* "~a~%" condition)))
-					 (setf (previous-command *standard-output*)
-					       (if (consp command)
-						   (car command)
-						   command))
-					 (return)))
-				      (t nil))))
-			(let ((buffer (buffer (current-window))))
-			  (when (modified-p buffer)
-			    (setf (needs-saving buffer) t)))
-			(when (null (remaining-keys *application-frame*))
-			  (setf (executingp *application-frame*) nil)
-			  (redisplay-frame-panes frame))))
+		     do (multiple-value-bind (numarg numargp)
+			    (read-numeric-argument :stream *standard-input*)
+			  (loop (setf *current-gesture* (climacs-read-gesture))
+				(setf gestures (nconc gestures (list *current-gesture*)))
+				(let ((item (find-gestures gestures 'global-climacs-table)))
+				  (cond ((not item)
+					 (beep) (return))
+					((eq (command-menu-item-type item) :command)
+					 (let ((command (command-menu-item-value item)))
+					   (unless (consp command)
+					     (setf command (list command)))
+					   (setf command (substitute-numeric-argument-marker command numarg))
+					   (setf command (substitute-numeric-argument-p command numargp))
+					   (handler-case 
+					       (execute-frame-command frame command)
+					     (error (condition)
+					       (beep)
+					       (format *error-output* "~a~%" condition)))
+					   (setf (previous-command *standard-output*)
+						 (if (consp command)
+						     (car command)
+						     command))
+					   (return)))
+					(t nil))))
+			  (let ((buffer (buffer (current-window))))
+			    (when (modified-p buffer)
+			      (setf (needs-saving buffer) t)))
+			  (when (null (remaining-keys *application-frame*))
+			    (setf (executingp *application-frame*) nil)
+			    (redisplay-frame-panes frame)))))
 	     (beep)
 	     (let ((buffer (buffer (current-window))))
 	       (when (modified-p buffer)
@@ -1288,6 +1295,14 @@
 	 (syntax (syntax (buffer pane))))
     (display-message "~a" (forward-to-error point syntax))))
 
+(define-named-command com-eval-expression ((insertp 'boolean :prompt "Insert?"))
+  (let* ((*package* (find-package :climacs-gui))
+	 (string (accept 'string :prompt "Eval"))
+	 (result (format nil "~a" (eval (read-from-string string)))))
+    (if insertp
+	(insert-sequence (point (current-window)) result)
+	(display-message result))))
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;; 
 ;;; Global and dead-escape command tables
@@ -1317,6 +1332,7 @@
 
 (global-set-key #\Newline 'com-self-insert)
 (global-set-key #\Tab 'com-indent-line)
+(global-set-key '(#\: :shift :meta) `(com-eval-expression ,*numeric-argument-p*))
 (global-set-key '(#\j :control) 'com-newline-and-indent)
 (global-set-key '(#\f :control) `(com-forward-object ,*numeric-argument-marker*))
 (global-set-key '(#\b :control) `(com-backward-object ,*numeric-argument-marker*))




More information about the Climacs-cvs mailing list