[gsharp-cvs] CVS gsharp

crhodes crhodes at common-lisp.net
Sun May 17 16:11:58 UTC 2009


Update of /project/gsharp/cvsroot/gsharp
In directory cl-net:/tmp/cvs-serv11043

Modified Files:
	gui.lisp modes.lisp 
Log Message:
Slightly rudimentary support for view/buffer handling (C-x b and C-x k)

The major thing that needs fixing is being currently unable to name and
refer to views with a sensible (unique) string name.


--- /project/gsharp/cvsroot/gsharp/gui.lisp	2009/04/20 15:04:47	1.97
+++ /project/gsharp/cvsroot/gsharp/gui.lisp	2009/05/17 16:11:57	1.98
@@ -25,6 +25,30 @@
   ((cursor :initarg :cursor :reader cursor)
    (buffer :initarg :buffer :reader buffer)))
 
+;;; FIXME: we need to sort out Drei's definition of accept methods for
+;;; the general VIEW type.
+;;;
+;;; FIXME: we should name our views so that they can be found by a
+;;; string name, rather than the unreadable-object print.  There's a
+;;; SUBSCRIPTABLE-NAME-MIXIN in ESA-UTILS that is used for this
+;;; purpose in the analogous place in Climacs.
+(define-presentation-method accept 
+    ((type orchestra-view) stream (view textual-view)
+     &key (default nil defaultp) (default-type type))
+  (multiple-value-bind (object success string)
+      (complete-input stream
+		      (lambda (so-far action)
+			(complete-from-possibilities
+			 so-far (views *esa-instance*) '()
+                         :action action
+			 :name-key #'princ-to-string
+			 :value-key #'identity))
+		      :partial-completers '(#\Space))
+    (cond
+      (success (values object type))
+      ((and defaultp (= (length string) 0)) (values default default-type))
+      (t (input-not-of-required-type string type)))))
+
 ;;; exists for the sole purpose of a :before method that updates the
 ;;; measures of each modified buffer.
 (defclass gsharp-pane-mixin () ())
@@ -302,6 +326,7 @@
          (view (make-instance 'orchestra-view 
                               :buffer buffer
                               :cursor cursor)))
+    (push view (views *application-frame*))
     (setf (view (car (windows *application-frame*))) view
           (input-state *application-frame*) input-state
           (filepath buffer) filepath)
@@ -1533,6 +1558,38 @@
 (defmethod frame-make-new-buffer ((frame gsharp) &key &allow-other-keys)
   (make-instance 'buffer))
 
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;
+;;; Buffer / View handling
+
+;;; FIXME: these utility functions should live elsewhere.
+(defun current-view ()
+  (view (current-window)))
+
+(defun not-current-view ()
+  (find (current-view) (views *application-frame*) :test (complement #'eq)))
+
+(defun not-current-view-or-first ()
+  (or (not-current-view) (car (views *application-frame*))))
+
+(defun next-or-new-buffer-view ()
+  (or (not-current-view)
+      (progn (com-new-buffer) 
+	     (car (views *application-frame*)))))
+
+(define-gsharp-command (com-switch-to-view :name t)
+    ((view 'orchestra-view :default (not-current-view-or-first)))
+  (setf (view (current-window)) view))
+
+(define-gsharp-command (com-kill-view :name t)
+    ((view 'orchestra-view :default (current-view)))
+  (let ((views (views *application-frame*)))
+    (setf (views *application-frame*) (remove view views))
+    (when (eq view (current-view))
+      (let ((next-view (next-or-new-buffer-view)))
+	(setf (view (current-window)) next-view)))))
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;
 ;;; Printing
--- /project/gsharp/cvsroot/gsharp/modes.lisp	2008/04/29 07:54:24	1.29
+++ /project/gsharp/cvsroot/gsharp/modes.lisp	2009/05/17 16:11:57	1.30
@@ -11,6 +11,9 @@
 (set-key `(com-delete-element ,*numeric-argument-marker*) 'global-gsharp-table '((#\Rubout)))
 (set-key `(com-erase-element ,*numeric-argument-marker*) 'global-gsharp-table '((#\Backspace)))
 
+(set-key `(com-switch-to-view ,*unsupplied-argument-marker*) 'global-gsharp-table '((#\x :control) #\b))
+(set-key `(com-kill-view ,*unsupplied-argument-marker*) 'global-gsharp-table '((#\x :control) #\k))
+
 ;;; FIXME: implement numeric arg handling
 (set-key 'com-forward-page 'global-gsharp-table '((#\x :control) #\]))
 (set-key 'com-backward-page 'global-gsharp-table '((#\x :control) #\[))





More information about the Gsharp-cvs mailing list