Update of /project/mcclim/cvsroot/mcclim/Drei In directory clnet:/tmp/cvs-serv28700/Drei
Modified Files: core-commands.lisp drei.lisp input-editor.lisp lisp-syntax-commands.lisp modes.lisp packages.lisp search-commands.lisp targets.lisp Log Message: Changed *drei-instance* to be a function (drei-instance).
Change of active window in Climacs will work better now.
--- /project/mcclim/cvsroot/mcclim/Drei/core-commands.lisp 2007/12/27 13:39:25 1.12 +++ /project/mcclim/cvsroot/mcclim/Drei/core-commands.lisp 2008/01/17 11:29:55 1.13 @@ -39,7 +39,7 @@ will replace the object after the point. When overwrite is off (the default), objects are inserted at point. In both cases point is positioned after the new object." - (with-slots (overwrite-mode) *drei-instance* + (with-slots (overwrite-mode) (current-view) (setf overwrite-mode (not overwrite-mode))))
(set-key 'com-overwrite-mode @@ -212,13 +212,13 @@ "Replace runs of spaces with tabs in region where possible. Uses TAB-SPACE-COUNT of the STREAM-DEFAULT-VIEW of the pane." (tabify-region (mark) (point) - (tab-space-count (view *drei-instance*)))) + (tab-space-count (current-view))))
(define-command (com-untabify-region :name t :command-table editing-table) () "Replace tabs with equivalent runs of spaces in the region. Uses TAB-SPACE-COUNT of the STREAM-DEFAULT-VIEW of the pane." (untabify-region (mark) (point) - (tab-space-count (view *drei-instance*)))) + (tab-space-count (current-view))))
(define-command (com-indent-line :name t :command-table indent-table) () (indent-current-line (current-view) (point))) @@ -531,7 +531,7 @@ inserting each in turn at point as an expansion." (with-accessors ((original-prefix original-prefix) (prefix-start-offset prefix-start-offset) - (dabbrev-expansion-mark dabbrev-expansion-mark)) *drei-instance* + (dabbrev-expansion-mark dabbrev-expansion-mark)) (current-view) (flet ((move () (cond ((beginning-of-buffer-p dabbrev-expansion-mark) (setf (offset dabbrev-expansion-mark) (offset (point))) @@ -620,8 +620,8 @@
(define-command (com-visible-region :name t :command-table marking-table) () "Toggle the visibility of the region in the current pane." - (setf (region-visible-p *drei-instance*) - (not (region-visible-p *drei-instance*)))) + (setf (region-visible-p (current-view)) + (not (region-visible-p (current-view)))))
(define-command (com-move-past-close-and-reindent :name t :command-table editing-table) () --- /project/mcclim/cvsroot/mcclim/Drei/drei.lisp 2008/01/16 21:30:04 1.27 +++ /project/mcclim/cvsroot/mcclim/Drei/drei.lisp 2008/01/17 11:29:55 1.28 @@ -63,16 +63,26 @@ ;;; ;;; Convenience stuff.
-(defvar *drei-instance* nil - "The currently running Drei instance.") +(defgeneric drei-instance-of (object) + (:documentation "Return the Drei instance of `object'. For an +editor frame, this would be the active editor instance. If +`object' itself is a Drei instance, this function should just +return `object'.")) + +(defun drei-instance (&optional (object *esa-instance*)) + "Return the currently running Drei instance. This function +calls `drei-instance-of' on its argument." + (drei-instance-of object))
-(defun current-view (&optional (object *drei-instance*)) +(defun (setf drei-instance) (new-instance &optional (object *esa-instance*)) + (setf (drei-instance-of object) new-instance)) + +(defun current-view (&optional (object (drei-instance))) "Return the view of the provided object. If no object is -provided, the currently running Drei instance (`*drei-instance*') -will be used." +provided, the currently running Drei instance will be used." (view object))
-(defun (setf current-view) (new-view &optional (object *drei-instance*)) +(defun (setf current-view) (new-view &optional (object (drei-instance))) (setf (view object) new-view))
(defun point (&optional (object (current-view))) @@ -183,14 +193,14 @@ "Prompt for a command name and arguments, then run it." (let ((item (handler-case (accept - `(command :command-table ,(command-table *drei-instance*)) + `(command :command-table ,(command-table (drei-instance))) ;; this gets erased immediately anyway :prompt "" :prompt-mode :raw) ((or command-not-accessible command-not-present) () (beep) (display-message "No such command") (return-from com-drei-extended-command nil))))) - (execute-drei-command *drei-instance* item))) + (execute-drei-command (drei-instance) item)))
(set-key 'com-drei-extended-command 'exclusive-gadget-table @@ -207,11 +217,11 @@ "This method allows users of Drei to extend syntaxes with new, app-specific commands, as long as they inherit from a Drei class and specialise a method for it." - (additional-command-tables *drei-instance* command-table)) + (additional-command-tables (drei-instance) command-table))
(defmethod command-table-inherit-from ((table drei-command-table)) (append (view-command-tables (current-view)) - (additional-command-tables *drei-instance* table) + (additional-command-tables (drei-instance) table) (when (use-editor-commands-p (current-view)) '(editor-table))))
@@ -343,6 +353,9 @@ (defmethod esa-current-window ((drei drei)) drei)
+(defmethod drei-instance-of ((object drei)) + object) + (defmethod print-object ((object drei) stream) (print-unreadable-object (object stream :type t :identity t) (format stream "~A" (type-of (view object))))) @@ -404,21 +417,21 @@ ;; at, for example, the buffer level, after all. `(handler-case (progn ,@body) (user-condition-mixin (c) - (handle-drei-condition *drei-instance* c)) + (handle-drei-condition (drei-instance) c)) (offset-before-beginning (c) - (handle-drei-condition *drei-instance* c)) + (handle-drei-condition (drei-instance) c)) (offset-after-end (c) - (handle-drei-condition *drei-instance* c)) + (handle-drei-condition (drei-instance) c)) (motion-before-beginning (c) - (handle-drei-condition *drei-instance* c)) + (handle-drei-condition (drei-instance) c)) (motion-after-end (c) - (handle-drei-condition *drei-instance* c)) + (handle-drei-condition (drei-instance) c)) (no-expression (c) - (handle-drei-condition *drei-instance* c)) + (handle-drei-condition (drei-instance) c)) (no-such-operation (c) - (handle-drei-condition *drei-instance* c)) + (handle-drei-condition (drei-instance) c)) (buffer-read-only (c) - (handle-drei-condition *drei-instance* c)))) + (handle-drei-condition (drei-instance) c))))
(defmacro with-bound-drei-special-variables ((drei-instance &key (kill-ring nil kill-ring-p) @@ -429,7 +442,7 @@ (prompt nil prompt-p)) &body body) "Evaluate `body' with a set of Drei special -variables (`*drei-instance*', `*kill-ring*', `*minibuffer*', +variables (`(drei-instance)', `*kill-ring*', `*minibuffer*', `*command-parser*', `*partial-command-parser*', `*previous-command*', `*extended-command-prompt*') bound to their proper values, taken from `drei-instance'. The keyword arguments @@ -438,18 +451,17 @@ value in `drei-instance'. This macro binds all of the usual Drei special variables, but also some CLIM special variables needed for ESA-style command parsing." - `(let* ((*drei-instance* ,drei-instance) - (*esa-instance* *drei-instance*) + `(let* ((*esa-instance* ,drei-instance) (*kill-ring* ,(if kill-ring-p kill-ring - `(kill-ring *drei-instance*))) + `(kill-ring (drei-instance)))) (*minibuffer* ,(if minibuffer-p minibuffer - `(or (minibuffer *drei-instance*) *minibuffer*))) + `(or (minibuffer (drei-instance)) *minibuffer*))) (*command-parser* ,(if command-parser-p command-parser ''esa-command-parser)) (*partial-command-parser* ,(if partial-command-parser-p partial-command-parser ''esa-partial-command-parser)) (*previous-command* ,(if previous-command-p previous-command - `(previous-command *drei-instance*))) + `(previous-command (drei-instance)))) (*extended-command-prompt* ,(if prompt-p prompt "Extended command: "))) ,@body)) --- /project/mcclim/cvsroot/mcclim/Drei/input-editor.lisp 2007/12/13 07:57:15 1.21 +++ /project/mcclim/cvsroot/mcclim/Drei/input-editor.lisp 2008/01/17 11:29:55 1.22 @@ -33,7 +33,7 @@ ;; `drei-input-editing-mixin' class does not have a scan pointer. We ;; assume that the subclass defines a scan pointer. (defclass drei-input-editing-mixin () - ((%drei-instance :accessor drei-instance + ((%drei-instance :accessor drei-instance-of :initarg :drei-instance) (%input-position :accessor input-position :initform 0) --- /project/mcclim/cvsroot/mcclim/Drei/lisp-syntax-commands.lisp 2008/01/14 09:14:48 1.15 +++ /project/mcclim/cvsroot/mcclim/Drei/lisp-syntax-commands.lisp 2008/01/17 11:29:55 1.16 @@ -65,7 +65,7 @@ #'(lambda (mark) (proper-line-indentation (current-view) mark)) fill-column - (tab-space-count (view *drei-instance*)) + (tab-space-count (current-view)) (current-syntax) t)))))
--- /project/mcclim/cvsroot/mcclim/Drei/modes.lisp 2007/12/28 10:08:33 1.1 +++ /project/mcclim/cvsroot/mcclim/Drei/modes.lisp 2008/01/17 11:29:55 1.2 @@ -137,6 +137,6 @@ `(define-command (,command-name :name ,name :command-table ,command-table) () ,(concatenate 'string "Toggle " string-form " mode.") - (if (mode-enabled-p *drei-instance* ',mode-name) - (disable-mode *drei-instance* ',mode-name) - (enable-mode *drei-instance* ',mode-name)))) + (if (mode-enabled-p (drei-instance) ',mode-name) + (disable-mode (drei-instance) ',mode-name) + (enable-mode (drei-instance) ',mode-name)))) --- /project/mcclim/cvsroot/mcclim/Drei/packages.lisp 2008/01/13 22:22:05 1.41 +++ /project/mcclim/cvsroot/mcclim/Drei/packages.lisp 2008/01/17 11:29:55 1.42 @@ -302,9 +302,7 @@ #:mark #:mark-of #:current-syntax #:current-view - - ;; Info variables. - #:*drei-instance* + #:drei-instance #:drei-instance-of
;; Configuration. #:*foreground-color* --- /project/mcclim/cvsroot/mcclim/Drei/search-commands.lisp 2007/12/08 08:53:49 1.5 +++ /project/mcclim/cvsroot/mcclim/Drei/search-commands.lisp 2008/01/17 11:29:55 1.6 @@ -61,7 +61,7 @@ ((string 'string :prompt "String Search")) "Prompt for a string and search forward for it. If found, leaves point after string. If not, leaves point where it is." - (simple-search-forward *drei-instance* + (simple-search-forward (drei-instance) #'(lambda (mark) (search-forward mark string :test (case-relevant-test string))))) @@ -70,7 +70,7 @@ ((string 'string :prompt "Reverse String Search")) "Prompt for a string and search backward for it. If found, leaves point before string. If not, leaves point where it is." - (simple-search-backward *drei-instance* + (simple-search-backward (drei-instance) #'(lambda (mark) (search-backward mark string :test (case-relevant-test string))))) @@ -83,7 +83,7 @@ ((word 'string :prompt "Search word")) "Prompt for a whitespace delimited word and search forward for it. If found, leaves point after the word. If not, leaves point where it is." - (simple-search-forward *drei-instance* + (simple-search-forward (drei-instance) #'(lambda (mark) (search-word-forward mark word))))
@@ -91,7 +91,7 @@ ((word 'string :prompt "Search word")) "Prompt for a whitespace delimited word and search backward for it. If found, leaves point before the word. If not, leaves point where it is." - (simple-search-backward *drei-instance* + (simple-search-backward (drei-instance) #'(lambda (mark) (search-backward mark word))))
@@ -166,7 +166,7 @@
(define-command (com-isearch-forward :name t :command-table search-table) () (display-message "Isearch: ") - (isearch-command-loop *drei-instance* t)) + (isearch-command-loop (drei-instance) t))
(set-key 'com-isearch-forward 'search-table @@ -174,14 +174,14 @@
(define-command (com-isearch-backward :name t :command-table search-table) () (display-message "Isearch backward: ") - (isearch-command-loop *drei-instance* nil)) + (isearch-command-loop (drei-instance) nil))
(set-key 'com-isearch-backward 'search-table '((#\r :control)))
(defun isearch-append-char (char) - (let* ((states (isearch-states *drei-instance*)) + (let* ((states (isearch-states (drei-instance))) (string (concatenate 'string (search-string (first states)) (string char))) @@ -189,7 +189,7 @@ (forwardp (search-forward-p (first states)))) (unless (or forwardp (end-of-buffer-p mark)) (incf (offset mark))) - (isearch-from-mark *drei-instance* mark string forwardp))) + (isearch-from-mark (drei-instance) mark string forwardp)))
(define-command (com-isearch-append-char :name t :command-table isearch-drei-table) () (isearch-append-char *current-gesture*)) @@ -198,7 +198,7 @@ (isearch-append-char #\Newline))
(defun isearch-append-text (movement-function) - (let* ((states (isearch-states *drei-instance*)) + (let* ((states (isearch-states (drei-instance))) (start (clone-mark (point))) (mark (clone-mark (search-mark (first states)))) (forwardp (search-forward-p (first states)))) @@ -212,7 +212,7 @@ point-offset)))) (unless (or forwardp (end-of-buffer-p mark)) (incf (offset mark) (- point-offset start-offset))) - (isearch-from-mark *drei-instance* mark string forwardp)))) + (isearch-from-mark (drei-instance) mark string forwardp))))
(define-command (com-isearch-append-word :name t :command-table isearch-drei-table) () (isearch-append-text #'(lambda (mark) (forward-word mark (current-syntax))))) @@ -221,7 +221,7 @@ (isearch-append-text #'end-of-line))
(define-command (com-isearch-append-kill :name t :command-table isearch-drei-table) () - (let* ((states (isearch-states *drei-instance*)) + (let* ((states (isearch-states (drei-instance))) (yank (handler-case (kill-ring-yank *kill-ring*) (empty-kill-ring () ""))) @@ -232,19 +232,19 @@ (forwardp (search-forward-p (first states)))) (unless (or forwardp (end-of-buffer-p mark)) (incf (offset mark) (length yank))) - (isearch-from-mark *drei-instance* mark string forwardp))) + (isearch-from-mark (drei-instance) mark string forwardp)))
(define-command (com-isearch-delete-char :name t :command-table isearch-drei-table) () - (cond ((null (second (isearch-states *drei-instance*))) + (cond ((null (second (isearch-states (drei-instance)))) (display-message "Isearch: ") (beep)) (t - (pop (isearch-states *drei-instance*)) - (loop until (endp (rest (isearch-states *drei-instance*))) - until (search-success-p (first (isearch-states *drei-instance*))) - do (pop (isearch-states *drei-instance*))) - (let ((state (first (isearch-states *drei-instance*)))) - (setf (offset (point *drei-instance*)) + (pop (isearch-states (drei-instance))) + (loop until (endp (rest (isearch-states (drei-instance)))) + until (search-success-p (first (isearch-states (drei-instance)))) + do (pop (isearch-states (drei-instance)))) + (let ((state (first (isearch-states (drei-instance))))) + (setf (offset (point (drei-instance))) (if (search-forward-p state) (+ (offset (search-mark state)) (length (search-string state))) @@ -255,26 +255,26 @@ (display-string (search-string state)))))))
(define-command (com-isearch-search-forward :name t :command-table isearch-drei-table) () - (let* ((states (isearch-states *drei-instance*)) + (let* ((states (isearch-states (drei-instance))) (string (if (null (second states)) - (isearch-previous-string *drei-instance*) + (isearch-previous-string (drei-instance)) (search-string (first states)))) (mark (clone-mark (point)))) - (isearch-from-mark *drei-instance* mark string t))) + (isearch-from-mark (drei-instance) mark string t)))
(define-command (com-isearch-search-backward :name t :command-table isearch-drei-table) () - (let* ((states (isearch-states *drei-instance*)) + (let* ((states (isearch-states (drei-instance))) (string (if (null (second states)) - (isearch-previous-string *drei-instance*) + (isearch-previous-string (drei-instance)) (search-string (first states)))) (mark (clone-mark (point)))) - (isearch-from-mark *drei-instance* mark string nil))) + (isearch-from-mark (drei-instance) mark string nil)))
(define-command (com-isearch-exit :name t :command-table isearch-drei-table) () - (let* ((states (isearch-states *drei-instance*)) + (let* ((states (isearch-states (drei-instance))) (string (search-string (first states))) (search-forward-p (search-forward-p (first states)))) - (setf (isearch-mode *drei-instance*) nil) + (setf (isearch-mode (drei-instance)) nil) (when (string= string "") (execute-frame-command *application-frame* (funcall @@ -343,7 +343,7 @@ t))))
(define-command (com-query-replace :name t :command-table search-table) () - (let* ((drei *drei-instance*) + (let* ((drei (drei-instance)) (old-state (query-replace-state drei)) (old-string1 (when old-state (string1 old-state))) (old-string2 (when old-state (string2 old-state))) @@ -394,7 +394,7 @@ '((#% :shift :meta)))
(define-command (com-query-replace-replace :name t :command-table query-replace-drei-table) () - (let ((state (query-replace-state *drei-instance*))) + (let ((state (query-replace-state (drei-instance)))) (with-accessors ((string1 string1) (string2 string2) (occurrences occurrences) @@ -410,13 +410,13 @@ (if (query-replace-find-next-match state) (display-message "Replace ~A with ~A:" string1 string2) - (setf (query-replace-mode *drei-instance*) nil)))))) + (setf (query-replace-mode (drei-instance)) nil))))))
(define-command (com-query-replace-replace-and-quit :name t :command-table query-replace-drei-table) () - (let ((state (query-replace-state *drei-instance*))) + (let ((state (query-replace-state (drei-instance)))) (with-accessors ((string1 string1) (string2 string2) (occurrences occurrences) @@ -429,13 +429,13 @@ string2 (no-upper-p string1)) (incf occurrences) - (setf (query-replace-mode *drei-instance*) nil))))) + (setf (query-replace-mode (drei-instance)) nil)))))
(define-command (com-query-replace-replace-all :name t :command-table query-replace-drei-table) () - (let ((state (query-replace-state *drei-instance*))) + (let ((state (query-replace-state (drei-instance)))) (with-accessors ((string1 string1) (string2 string2) (occurrences occurrences) @@ -449,19 +449,19 @@ (no-upper-p string1)) (incf occurrences) while (query-replace-find-next-match state) - finally (setf (query-replace-mode *drei-instance*) nil)))))) + finally (setf (query-replace-mode (drei-instance)) nil))))))
(define-command (com-query-replace-skip :name t :command-table query-replace-drei-table) () - (let ((state (query-replace-state *drei-instance*))) + (let ((state (query-replace-state (drei-instance)))) (with-accessors ((string1 string1) (string2 string2)) state (if (query-replace-find-next-match state) (display-message "Replace ~A with ~A:" string1 string2) - (setf (query-replace-mode *drei-instance*) nil))))) + (setf (query-replace-mode (drei-instance)) nil)))))
(define-command (com-query-replace-exit :name t :command-table query-replace-drei-table) () - (setf (query-replace-mode *drei-instance*) nil)) + (setf (query-replace-mode (drei-instance)) nil))
(defun query-replace-set-key (gesture command) (add-command-to-command-table command 'query-replace-drei-table @@ -497,7 +497,7 @@ :delimiter-gestures nil :activation-gestures '(:newline :return)))) - (simple-search-forward *drei-instance* + (simple-search-forward (drei-instance) #'(lambda (mark) (re-search-forward mark (normalise-minibuffer-regex string))))))
@@ -506,7 +506,7 @@ :delimiter-gestures nil :activation-gestures '(:newline :return)))) - (simple-search-backward *drei-instance* + (simple-search-backward (drei-instance) #'(lambda (mark) (re-search-backward mark (normalise-minibuffer-regex string))))))
--- /project/mcclim/cvsroot/mcclim/Drei/targets.lisp 2007/12/08 08:53:49 1.2 +++ /project/mcclim/cvsroot/mcclim/Drei/targets.lisp 2008/01/17 11:29:55 1.3 @@ -27,7 +27,7 @@ (in-package :drei-core)
(defclass target-specification () - ((%drei :reader drei-instance + ((%drei :reader drei-instance-of :initarg :drei-instance :initform (error "A Drei instance must be provided for a target specification"))) (:documentation "The base class for target specifications,