[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

I want both keyboard-accelerated and conventional commands in program framework

The documentation for DEFINE-PROGRAM-FRAMEWORK states (volume 7-A revised, page
97) that if :KBD-ACCELERATOR-P is T, to enter an unaccelerated command the user
must first type colon or m-X. I don't get this behavior. Consider the following
example program:

(dw:define-program-framework test-frame
  :command-definer t
  :command-table (:inherit-from '("user") :kbd-accelerator-p t)
  :panes ((menu-window :command-menu)
	  (interactor-window :interactor))
  :terminal-io-pane interactor-window
	  (main :column menu-window interactor-window))
	  (main (menu-window :ask-window self :size-for-pane menu-window)
		(interactor-window :even)))))
    :select-key #\a)

(define-test-frame-command (com-print-hello
			     :name "Print Hello"
			     :menu-accelerator "Print Hello"
			     :keyboard-accelerator #\c-h)
  (print "Hello"))

(define-test-frame-command (com-print-goodbye
			     :name "Print Goodbye"
			     :menu-accelerator "Print Goodbye"
			     :keyboard-accelerator #\c-g)
  (print "Goodbye"))

(define-test-frame-command (com-print-stop
                             :name "Print Stop")
  (print "Stop"))

My commands are acessible by the keyboard acclerators #\c-h and #\c-g, and by
the menu items, but I am not able to enter a colon or m-X in order to execute
the command COM-PRINT-STOP, which is accessible neither from the menu or a
command accelerator. I have tried various options to :TOP-LEVEL with no success.

Also, is there any way to have keyboard accelerators with a top-level that
understands both commands and Lisp forms? It seems I read somewhere that it's
not possible, but I can't find it now.