Я сейчас изучаю McCLIM. Попытка выяснить, как определить команду, которая будет реагировать на нажатие клавиши. Для приложения с именем superapp
у меня есть функция
(defun show (text)
(lambda (gadget)
(declare (ignore gadget))
(with-slots (text-field) *application-frame*
(setf (gadget-value text-field)
text))))
, которые показывают текст на панели экрана. Он отлично работает для кнопок панели в activate-callback
. Тем не менее, это
(define-superapp-command (com-greet :name t :keystroke (#\g :control)) ()
(show "Hey"))
не работает. Я знаю, что я определил это правильно, так как он хорошо работает с (frame-exit *application-frame*)
. Так что я просто не понимаю что-то еще.
РЕДАКТИРОВАТЬ: ТАК, это рабочий вариант
(define-application-frame superapp ()
()
(:panes
(tf1
:push-button
:label "Left"
:activate-callback (show "HI"))
(app :application
:display-time nil
:height 400
:width 600)
(screen :text-field))
(:layouts
(default
(with-slots (text-field) *application-frame*
(vertically ()
screen
(tabling (:grid t)
(list tf1 app)))))))
(defun show (text)
(lambda (gadget)
(declare (ignore gadget))
(setf (gadget-value (find-pane-named *application-frame* 'screen))
text)))
(define-superapp-command (com-greet :name t :keystroke (#\g)) ()
(setf (gadget-value (find-pane-named *application-frame* 'screen))
"text"))