[mcclim-cvs] CVS mcclim/ESA
thenriksen
thenriksen at common-lisp.net
Sun Feb 3 08:38:27 UTC 2008
Update of /project/mcclim/cvsroot/mcclim/ESA
In directory clnet:/tmp/cvs-serv26552/ESA
Modified Files:
esa.lisp packages.lisp
Log Message:
Changed how self-insert gestures work in Drei a bit.
--- /project/mcclim/cvsroot/mcclim/ESA/esa.lisp 2008/01/29 22:59:30 1.18
+++ /project/mcclim/cvsroot/mcclim/ESA/esa.lisp 2008/02/03 08:38:26 1.19
@@ -459,6 +459,19 @@
(:method ((command-processor command-processor))
(null (overriding-handler command-processor))))
+(defgeneric command-for-unbound-gestures (thing gestures)
+ (:documentation "Called when `gestures' is input by the user
+and there is no associated command in the current command
+table. The function should return either a (possibly incomplete)
+command or NIL. In the latter case (which is handled by a default
+method), the gestures will be treated as actual unbound
+gestures. `Thing' is something that might be interested in
+commands, at the beginning usually a command processor, but it
+can call the function for other objects it knows in order to get
+their opinion. `Gestures' is a list of gestures.")
+ (:method (thing gestures)
+ nil))
+
(defclass instant-macro-execution-mixin ()
()
(:documentation "Subclasses of this class will immediately
@@ -637,38 +650,43 @@
(multiple-value-bind (prefix-arg prefix-p gestures)
(process-gestures-for-numeric-argument
(accumulated-gestures command-processor))
- (cond ((null gestures)
- t)
- (t
- (let* ((command-table (command-table command-processor))
- (item (find-gestures-with-inheritance gestures command-table)))
- (cond
- ((not item)
- (setf (accumulated-gestures command-processor) nil)
- (error 'unbound-gesture-sequence :gestures gestures))
- ((eq (command-menu-item-type item) :command)
- (let ((command (command-menu-item-value item))
- (*current-gesture* (first (last gestures))))
- (unless (consp command)
- (setf command (list command)))
- ;; Call `*partial-command-parser*' to handle numeric
- ;; argument.
- (unwind-protect (setq command
- (funcall
- *partial-command-parser*
- (command-table command-processor)
- *standard-input* command 0 (when prefix-p
- prefix-arg)))
- ;; If we are macrorecording, store whatever the user
- ;; did to invoke this command.
- (when (recordingp command-processor)
- (setf (recorded-keys command-processor)
- (append (accumulated-gestures command-processor)
- (recorded-keys command-processor))))
- (setf (accumulated-gestures command-processor) nil))
- (funcall (command-executor command-processor) command-processor command)
- nil))
- (t t)))))))
+ (flet ((commandp (object)
+ (or (listp object) (symbolp object))))
+ (cond ((null gestures)
+ t)
+ (t
+ (let* ((command-table (command-table command-processor))
+ (item (or (find-gestures-with-inheritance gestures command-table)
+ (command-for-unbound-gestures command-processor gestures))))
+ (cond
+ ((not item)
+ (setf (accumulated-gestures command-processor) nil)
+ (error 'unbound-gesture-sequence :gestures gestures))
+ ((or (commandp item) ; c-f-u-g does not return a menu-item.
+ (eq (command-menu-item-type item) :command))
+ (let ((command (if (commandp item) item
+ (command-menu-item-value item)))
+ (*current-gesture* (first (last gestures))))
+ (unless (consp command)
+ (setf command (list command)))
+ ;; Call `*partial-command-parser*' to handle numeric
+ ;; argument.
+ (unwind-protect (setq command
+ (funcall
+ *partial-command-parser*
+ (command-table command-processor)
+ *standard-input* command 0 (when prefix-p
+ prefix-arg)))
+ ;; If we are macrorecording, store whatever the user
+ ;; did to invoke this command.
+ (when (recordingp command-processor)
+ (setf (recorded-keys command-processor)
+ (append (accumulated-gestures command-processor)
+ (recorded-keys command-processor))))
+ (setf (accumulated-gestures command-processor) nil))
+ (funcall (command-executor command-processor) command-processor command)
+ nil))
+ (t t))))))))
(defmethod process-gesture :around ((command-processor command-processor) gesture)
(with-accessors ((overriding-handler overriding-handler)) command-processor
--- /project/mcclim/cvsroot/mcclim/ESA/packages.lisp 2008/02/02 19:03:35 1.16
+++ /project/mcclim/cvsroot/mcclim/ESA/packages.lisp 2008/02/03 08:38:26 1.17
@@ -79,6 +79,7 @@
#:command-processor #:instant-macro-execution-mixin
#:asynchronous-command-processor #:command-loop-command-processor
#:overriding-handler #:directly-processing-p #:process-gesture #:process-gestures-or-command
+ #:command-for-unbound-gestures
#:*extended-command-prompt*
#:define-esa-top-level #:esa-top-level #:simple-command-loop
#:convert-to-gesture #:gesture-name
More information about the Mcclim-cvs
mailing list