All Manuals > CAPI User Guide and Reference Manual > 21 CAPI Reference Entries

define-command Macro


Defines an alias for a mouse or keyboard gesture that can be used in the input model of an output pane.




define-command name gesture &key translator host library

A unique Lisp object.
A valid input model gesture.
A function.
Alias for library, for backwards compatibility.
Specifies for which library this mapping is applicable. See <new section above about libraries> for which libraries are applicable. By default the mapping is applicable to all libraries.

The macro define-command defines an alias for an input gesture that can then be used in the input model of an output-pane.

name is the name of the alias, which should be a symbol.

gesture is one of the gestures accepted by output-pane. For a full description of the gesture syntax and arguments for the callback, see 12.2.1 Detailed description of the input model. It is possible to specify multiple gestures by passing as gesture a list of the form:

(:one-off gesture1 gesture2 ...)

If translator is supplied it needs to be a function that takes the same arguments that a callback for the gesture would take (not including the extra-callback-args), and returns a list which is used after pane instead of the gesture callback arguments. When there is a translator, the callbacks for commands in the models are invoked by:

(apply callback pane 
       (append (apply translator gesture-callback-args)

library specifies which library this mapping is applicable to. It is possible to have distinct definitions for different libraries, but redefinition with the same library overrides the previous definition. The default value of library is nil, which means all libraries. host is recognised an alias library for backwards compatibility.


Firstly, here is an example of defining a command which maps onto a gesture.

(defun gesture-callback (output-pane x y)
   "Pressed ~S at (~S,~S)"
   output-pane x y))
(capi:define-command :select (:button-1 :press))
(capi:contain (make-instance
               :input-model '((:select 

Here is a more complicated example demonstrating the use of translator to affect the arguments passed to a callback.

  :select-object (:button-1 :press)
  :translator #'(lambda (output-pane x y)
                  (let ((object
                                        output-pane x y)))
                                  (when object
                                    (list object)))))
(defun object-select-callback (output-pane
                               &optional object)
  (when object (capi:display-message 
                "Pressed on ~S in ~S"
                object output-pane)))
(setq pinboard
      (capi:contain (make-instance
                    :input-model '((:select-object
(make-instance 'capi:item-pinboard-object
               :text "Press Me!"
               :parent pinboard
               :x 10 :y 20)
(make-instance 'capi:line-pinboard-object
               :parent pinboard
               :start-x 20 :start-y 50
               :end-x 120 :end-y 150)

Here is a further example:

(example-edit-file "capi/output-panes/commands")
See also

12.2.2 Commands - aliases

CAPI User Guide and Reference Manual (Macintosh version) - 01 Dec 2021 19:31:27