[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Beginners question about program framework
>We got a problem with the :command-evaluator option in the program
>framework macro. Apprently the function "fonction" below does not
>seem to be called. Any ideas why ? We didn't find any example in
>the manual which shows how to use this option.
>
> - thanks for any help
>(defun fonction (gs co &rest args)
> (ignore gs)
> (read-char (dw:get-program-pane 'listener-pane))
> (apply co args)
> (princ "foo" (dw:get-program-pane 'listener-pane)))
>
>(dw:define-program-framework graphic-symbol-frame
>
> :pretty-name "Graphic Symbol System" ;pretty name
>
> :select-key #\g ;select key
>
> :command-definer t ;we will use the command definition macro
> ;(see below)
> :command-table ;specifies options to cp:make-command-table
> (:inherit-from '("colon full command" "standard arguments" "standard scrolling")
> :kbd-accelerator-p nil)
>
> :top-level ;our own top level function
> (top-level-function) ;(in place of dw:default-command-top-level)
> ;(see below)
> :system-menu t ;graphic-symbol appears in the system menu
> ;(trie-it !)
> :command-evaluator
> (fonction)
> :panes
> ((title-pane
> :title ;pane type
> :default-character-style '(:swiss :bold-italic :very-large)
> :height-in-lines 2)
> (graphic-symbol-display-pane
> ..................
> ..................))))
>
>
>
>(defmethod (top-level-function graphic-symbol-frame) ()
> (in-package 'graphic-symbol)
> (dw:default-command-top-level self :dispatch-mode :command-preferred))
>
It appears that there is a bug in dw::read-program-command that causes
it to return a third value of :form even if the thing read was a
command. (Dispatch mode is :command-preferred.) That in turn causes
dw:default-command-top-level to ignore your command evaluator.
This is how you can work around this bug:
(defun form-evaluator (form)
(princ "before")
(eval form)
(princ "after"))
(defmethod (top-level-function graphic-symbol-frame) ()
(dw:default-command-top-level self :dispatch-mode :command-preferred :form-evaluator #'form-evaluator))
(define-graphic-symbol-frame-command (com-do-nothing) ((x 'integer)) (print x))