[mcclim-cvs] CVS mcclim/ESA

thenriksen thenriksen at common-lisp.net
Mon Nov 19 20:28:43 UTC 2007


Update of /project/mcclim/cvsroot/mcclim/ESA
In directory clnet:/tmp/cvs-serv7043/ESA

Modified Files:
	packages.lisp esa.lisp 
Log Message:
Change the use of global variables in Drei to functions that query a
single global variable (*drei-instance*).

At the same time, change a few things in ESA to make Dreis use of it
less hacky.


--- /project/mcclim/cvsroot/mcclim/ESA/packages.lisp	2007/08/13 21:56:04	1.3
+++ /project/mcclim/cvsroot/mcclim/ESA/packages.lisp	2007/11/19 20:28:42	1.4
@@ -45,8 +45,9 @@
 
 (defpackage :esa
   (:use :clim-lisp :clim :esa-utils)
-  (:export #:buffers #:frame-current-buffer #:current-buffer #:*current-buffer*
-           #:windows #:frame-current-window #:current-window #:*current-window*
+  (:export #:*esa-instance*
+           #:buffers #:esa-current-buffer #:current-buffer
+           #:windows #:esa-current-window #:current-window
            #:*previous-command*
            #:*minibuffer* #:minibuffer #:minibuffer-pane #:display-message
            #:with-minibuffer-stream
--- /project/mcclim/cvsroot/mcclim/ESA/esa.lisp	2007/09/30 22:03:54	1.10
+++ /project/mcclim/cvsroot/mcclim/ESA/esa.lisp	2007/11/19 20:28:43	1.11
@@ -2,6 +2,8 @@
 
 ;;;  (c) copyright 2005 by
 ;;;           Robert Strandh (strandh at labri.fr)
+;;;  (c) copyright 2006-2007 by
+;;;           Troels Henriksen (athas at sigkill.dk)
 
 ;;; This library is free software; you can redistribute it and/or
 ;;; modify it under the terms of the GNU Library General Public
@@ -26,41 +28,38 @@
 ;;; 
 ;;; Querying ESAs.
 
-(defgeneric buffers (application-frame)
-  (:documentation "Return a list of all the buffers of the application."))
+(defvar *esa-instance* nil
+  "This symbol should be bound to an ESA instance, though any
+object will do, provided the proper methods are defined. It will
+be used as the argument to the various \"query\" functions
+defined by ESA. For the vast majority of ESAs, `*esa-instance*'
+will probably have the same value as `*application-frame*'.")
 
-(defgeneric frame-current-buffer (application-frame)
-  (:documentation "Return the current buffer of APPLICATION-FRAME.")
-  (:method ((frame application-frame))
-    nil))
+(defgeneric buffers (esa)
+  (:documentation "Return a list of all the buffers of the application."))
 
-(defvar *current-buffer* nil
-  "When a command is being executed, the current buffer.")
+(defgeneric esa-current-buffer (esa)
+  (:documentation "Return the current buffer of APPLICATION-FRAME."))
 
 (defun current-buffer ()
-  "Return the current buffer of `*application-frame*'."
-  (frame-current-buffer *application-frame*))
+  "Return the currently active buffer of the running ESA."
+  (esa-current-buffer *esa-instance*))
 
-(defgeneric windows (application-frame)
-  (:documentation "Return a list of all the windows of the application.")
-  (:method ((application-frame application-frame))
+(defgeneric windows (esa)
+  (:documentation "Return a list of all the windows of the ESA.")
+  (:method ((esa application-frame))
     '()))
 
-(defgeneric frame-current-window (application-frame)
-  (:documentation "Return the current window of APPLICATION-FRAME.")
-  (:method ((frame application-frame))
-    (first (windows frame))))
-
-(defvar *current-window* nil
-  "When a command is being executed, the current window.")
+(defgeneric esa-current-window (esa)
+  (:documentation "Return the current window of ESA."))
 
 (defun current-window ()
-  "Return the current window of `*application-frame*'."  
-  (frame-current-window *application-frame*))
+  "Return the currently active window of the running ESA instance."
+  (esa-current-window *esa-instance*))
 
 (defvar *previous-command* nil
   "When a command is being executed, the command previously
-executed by the current frame.")
+executed by the application.")
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;; 
@@ -766,6 +765,12 @@
 (defclass esa-frame-mixin (command-processor)
   ((windows :accessor windows)))
 
+(defmethod esa-current-buffer ((esa esa-frame-mixin))
+  (first (buffers esa)))
+
+(defmethod esa-current-window ((esa esa-frame-mixin))
+  (first (windows esa)))
+
 (defmethod command-table ((frame esa-frame-mixin))
   (find-applicable-command-table frame))
 
@@ -795,7 +800,7 @@
   ;; FIXME: I'm not sure that we want to do this for commands sent
   ;; from other threads; we almost certainly don't want to do it twice
   ;; in such cases...
-  (setf (previous-command (frame-current-window frame)) command))
+  (setf (previous-command (esa-current-window frame)) command))
 
 (defmethod execute-frame-command :around ((frame esa-frame-mixin) command)
   (call-next-method)
@@ -850,16 +855,15 @@
                     (*partial-command-parser* ,partial-command-parser)
                     (*extended-command-prompt* ,prompt)
                     (*pointer-documentation-output*
-                     (frame-pointer-documentation-output ,frame)))
+                     (frame-pointer-documentation-output ,frame))
+                    (*esa-instance* ,frame))
                 (unless (eq (frame-state ,frame) :enabled)
                   (enable-frame ,frame))
                 (redisplay-frame-panes ,frame :force-p t)
                 (loop
                    do (restart-case
                           (handler-case
-                              (let* ((*current-window* (frame-current-window ,frame))
-                                     (*current-buffer* (frame-current-buffer ,frame))
-                                     (*command-processor* ,frame)
+                              (let* ((*command-processor* ,frame)
                                      (command-table (find-applicable-command-table ,frame))
                                      , at bindings)
                                 ;; for presentation-to-command-translators,




More information about the Mcclim-cvs mailing list