From 474695cfff68deecbc3ee43e01a3b1b9991b9dc5 Mon Sep 17 00:00:00 2001 From: slava Date: Thu, 24 Aug 2006 23:15:50 +0000 Subject: [PATCH] Fooling around with commands --- library/ui/commands.factor | 11 +++- library/ui/text/commands.factor | 86 +++++++++++++++---------------- library/ui/text/field.factor | 8 +-- library/ui/text/interactor.factor | 28 +++++----- library/ui/tools/launchpad.factor | 2 +- library/ui/ui.factor | 8 +-- 6 files changed, 76 insertions(+), 67 deletions(-) diff --git a/library/ui/commands.factor b/library/ui/commands.factor index 4f569bcf30..d26d09cd05 100644 --- a/library/ui/commands.factor +++ b/library/ui/commands.factor @@ -46,7 +46,16 @@ M: object gesture>string drop f ; "gestures" set-word-prop ; : commands ( gadget -- seq ) - delegates [ class "commands" word-prop ] map concat ; + [ + parents [ + delegates [ class "commands" word-prop % ] each + ] each + ] V{ } make ; + +: commands. ( gadget -- ) + commands [ + [ command-string ] keep write-object terpri + ] each ; world { { f "Cut" T{ key-down f { C+ } "x" } [ T{ cut-action } send-action ] } diff --git a/library/ui/text/commands.factor b/library/ui/text/commands.factor index 594afecd2d..4158f1c997 100644 --- a/library/ui/text/commands.factor +++ b/library/ui/text/commands.factor @@ -64,46 +64,46 @@ sequences ; : editor-doc-end ( editor -- ) T{ doc-elt } editor-next ; -editor H{ - { T{ key-down f f "RETURN" } [ "\n" swap user-input ] } - { T{ key-down f { S+ } "RETURN" } [ "\n" swap user-input ] } - { T{ button-down } [ editor-mouse-down ] } - { T{ drag } [ editor-mouse-drag ] } - { T{ gain-focus } [ focus-editor ] } - { T{ lose-focus } [ unfocus-editor ] } - { T{ paste-action } [ clipboard get paste-clipboard ] } - { T{ button-up f 2 } [ selection get paste-clipboard ] } - { T{ copy-action } [ clipboard get editor-copy ] } - { T{ button-up } [ selection get editor-copy ] } - { T{ cut-action } [ clipboard get editor-cut ] } - { T{ delete-action } [ remove-editor-selection ] } - { T{ select-all-action } [ T{ doc-elt } select-elt ] } - { T{ key-down f { C+ } "l" } [ T{ one-line-elt } select-elt ] } - { T{ key-down f { C+ } "w" } [ T{ word-elt } select-elt ] } - { T{ key-down f f "LEFT" } [ T{ char-elt } editor-prev ] } - { T{ key-down f f "RIGHT" } [ T{ char-elt } editor-next ] } - { T{ key-down f f "UP" } [ T{ line-elt } editor-prev ] } - { T{ key-down f f "DOWN" } [ T{ line-elt } editor-next ] } - { T{ key-down f { S+ } "LEFT" } [ T{ char-elt } editor-select-prev ] } - { T{ key-down f { S+ } "RIGHT" } [ T{ char-elt } editor-select-next ] } - { T{ key-down f { S+ } "UP" } [ T{ line-elt } editor-select-prev ] } - { T{ key-down f { S+ } "DOWN" } [ T{ line-elt } editor-select-next ] } - { T{ key-down f { C+ } "LEFT" } [ T{ word-elt } editor-prev ] } - { T{ key-down f { C+ } "RIGHT" } [ T{ word-elt } editor-next ] } - { T{ key-down f { S+ C+ } "LEFT" } [ T{ word-elt } editor-select-prev ] } - { T{ key-down f { S+ C+ } "RIGHT" } [ T{ word-elt } editor-select-next ] } - { T{ key-down f f "HOME" } [ T{ one-line-elt } editor-prev ] } - { T{ key-down f f "END" } [ T{ one-line-elt } editor-next ] } - { T{ key-down f { S+ } "HOME" } [ T{ one-line-elt } editor-select-prev ] } - { T{ key-down f { S+ } "END" } [ T{ one-line-elt } editor-select-next ] } - { T{ key-down f { C+ } "HOME" } [ editor-doc-start ] } - { T{ key-down f { C+ } "END" } [ editor-doc-end ] } - { T{ key-down f { C+ S+ } "HOME" } [ T{ doc-elt } editor-select-prev ] } - { T{ key-down f { C+ S+ } "END" } [ T{ doc-elt } editor-select-next ] } - { T{ key-down f f "DELETE" } [ T{ char-elt } editor-delete ] } - { T{ key-down f f "BACKSPACE" } [ T{ char-elt } editor-backspace ] } - { T{ key-down f { C+ } "DELETE" } [ T{ word-elt } editor-delete ] } - { T{ key-down f { C+ } "BACKSPACE" } [ T{ word-elt } editor-backspace ] } - { T{ key-down f { A+ } "DELETE" } [ T{ one-line-elt } editor-delete ] } - { T{ key-down f { A+ } "BACKSPACE" } [ T{ one-line-elt } editor-backspace ] } -} set-gestures +editor { + { f "Insert newline" T{ key-down f f "RETURN" } [ "\n" swap user-input ] } + { f "Insert newline" T{ key-down f { S+ } "RETURN" } [ "\n" swap user-input ] } + { f "Position caret" T{ button-down } [ editor-mouse-down ] } + { f "Start selection" T{ drag } [ editor-mouse-drag ] } + { f "Focus editor" T{ gain-focus } [ focus-editor ] } + { f "Unfocus editor" T{ lose-focus } [ unfocus-editor ] } + { f "Paste" T{ paste-action } [ clipboard get paste-clipboard ] } + { f "Paste selection" T{ button-up f 2 } [ selection get paste-clipboard ] } + { f "Copy" T{ copy-action } [ clipboard get editor-copy ] } + { f "Copy selection" T{ button-up } [ selection get editor-copy ] } + { f "Cut" T{ cut-action } [ clipboard get editor-cut ] } + { f "Clear" T{ delete-action } [ remove-editor-selection ] } + { f "Select all" T{ select-all-action } [ T{ doc-elt } select-elt ] } + { f "Select line" T{ key-down f { C+ } "l" } [ T{ one-line-elt } select-elt ] } + { f "Select word" T{ key-down f { C+ } "w" } [ T{ word-elt } select-elt ] } + { f "Previous character" T{ key-down f f "LEFT" } [ T{ char-elt } editor-prev ] } + { f "Next character" T{ key-down f f "RIGHT" } [ T{ char-elt } editor-next ] } + { f "Previous line" T{ key-down f f "UP" } [ T{ line-elt } editor-prev ] } + { f "Next line" T{ key-down f f "DOWN" } [ T{ line-elt } editor-next ] } + { f "Select previous character" T{ key-down f { S+ } "LEFT" } [ T{ char-elt } editor-select-prev ] } + { f "Select next character" T{ key-down f { S+ } "RIGHT" } [ T{ char-elt } editor-select-next ] } + { f "Select previous line" T{ key-down f { S+ } "UP" } [ T{ line-elt } editor-select-prev ] } + { f "Select next line" T{ key-down f { S+ } "DOWN" } [ T{ line-elt } editor-select-next ] } + { f "Previous word" T{ key-down f { C+ } "LEFT" } [ T{ word-elt } editor-prev ] } + { f "Next word" T{ key-down f { C+ } "RIGHT" } [ T{ word-elt } editor-next ] } + { f "Select previous line" T{ key-down f { S+ C+ } "LEFT" } [ T{ word-elt } editor-select-prev ] } + { f "Select next line" T{ key-down f { S+ C+ } "RIGHT" } [ T{ word-elt } editor-select-next ] } + { f "Start of line" T{ key-down f f "HOME" } [ T{ one-line-elt } editor-prev ] } + { f "End of line" T{ key-down f f "END" } [ T{ one-line-elt } editor-next ] } + { f "Select to start of line" T{ key-down f { S+ } "HOME" } [ T{ one-line-elt } editor-select-prev ] } + { f "Select to end of line" T{ key-down f { S+ } "END" } [ T{ one-line-elt } editor-select-next ] } + { f "Start of document" T{ key-down f { C+ } "HOME" } [ editor-doc-start ] } + { f "End of document" T{ key-down f { C+ } "END" } [ editor-doc-end ] } + { f "Select start of document" T{ key-down f { C+ S+ } "HOME" } [ T{ doc-elt } editor-select-prev ] } + { f "Select end of document" T{ key-down f { C+ S+ } "END" } [ T{ doc-elt } editor-select-next ] } + { f "Delete next character" T{ key-down f f "DELETE" } [ T{ char-elt } editor-delete ] } + { f "Delete previous character" T{ key-down f f "BACKSPACE" } [ T{ char-elt } editor-backspace ] } + { f "Delete previous word" T{ key-down f { C+ } "DELETE" } [ T{ word-elt } editor-delete ] } + { f "Delete next word" T{ key-down f { C+ } "BACKSPACE" } [ T{ word-elt } editor-backspace ] } + { f "Delete to start of line" T{ key-down f { A+ } "DELETE" } [ T{ one-line-elt } editor-delete ] } + { f "Delete to end of line" T{ key-down f { A+ } "BACKSPACE" } [ T{ one-line-elt } editor-backspace ] } +} define-commands diff --git a/library/ui/text/field.factor b/library/ui/text/field.factor index cf0044a4f5..a439c5dbb4 100644 --- a/library/ui/text/field.factor +++ b/library/ui/text/field.factor @@ -15,7 +15,7 @@ C: field ( model -- field ) [ field-model [ dupd set-model ] when* ] keep select-all ; -field H{ - { T{ key-down f { C+ } "k" } [ control-model clear-doc ] } - { T{ key-down f f "RETURN" } [ field-commit drop ] } -} set-gestures +field { + { f "Clear input" T{ key-down f { C+ } "k" } [ control-model clear-doc ] } + { f "Accept input" T{ key-down f f "RETURN" } [ field-commit drop ] } +} define-commands diff --git a/library/ui/text/interactor.factor b/library/ui/text/interactor.factor index d9fa83f957..8f1aca486c 100644 --- a/library/ui/text/interactor.factor +++ b/library/ui/text/interactor.factor @@ -76,20 +76,20 @@ SYMBOL: structured-input : use-word ( str -- ) words-named [ word-vocabulary dup print use+ ] each ; -interactor H{ - { T{ key-down f f "RETURN" } [ interactor-commit ] } - { T{ key-down f { A+ } "c" } [ dup [ interactor-output pane-clear ] curry swap interactor-call ] } - { T{ key-down f { C+ } "h" } [ dup [ interactor-history. ] curry swap interactor-call ] } - { T{ key-down f { C+ } "d" } [ f swap interactor-eval ] } - { T{ key-down f { C+ } "i" } [ "infer ." quot-action ] } - { T{ key-down f { C+ } "w" } [ "walk" quot-action ] } - { T{ key-down f { A+ } "s" } [ [ search see ] word-action ] } - { T{ key-down f { A+ } "j" } [ [ search jedit ] word-action ] } - { T{ key-down f { A+ } "r" } [ [ search reload ] word-action ] } - { T{ key-down f { A+ } "a" } [ [ apropos ] word-action ] } - { T{ key-down f { A+ } "u" } [ [ use-word ] word-action ] } - { T{ key-down f f "TAB" } [ [ usable-words (apropos) ] word-action ] } -} set-gestures +interactor { + { f "Evaluate input" T{ key-down f f "RETURN" } [ interactor-commit ] } + { f "Clear output" T{ key-down f { A+ } "c" } [ dup [ interactor-output pane-clear ] curry swap interactor-call ] } + { f "History" T{ key-down f { C+ } "h" } [ dup [ interactor-history. ] curry swap interactor-call ] } + { f "Send EOF" T{ key-down f { C+ } "d" } [ f swap interactor-eval ] } + { f "Infer input" T{ key-down f { C+ } "i" } [ "infer ." quot-action ] } + { f "Single step input" T{ key-down f { C+ } "w" } [ "walk" quot-action ] } + { f "See at caret" T{ key-down f { A+ } "s" } [ [ search see ] word-action ] } + { f "jEdit at caret" T{ key-down f { A+ } "j" } [ [ search jedit ] word-action ] } + { f "Reload at caret" T{ key-down f { A+ } "r" } [ [ search reload ] word-action ] } + { f "Apropos at caret (all)" T{ key-down f { A+ } "a" } [ [ apropos ] word-action ] } + { f "Use word at caret" T{ key-down f { A+ } "u" } [ [ use-word ] word-action ] } + { f "Apropos at caret (used)" T{ key-down f f "TAB" } [ [ usable-words (apropos) ] word-action ] } +} define-commands M: interactor stream-readln dup interactor-queue empty? [ diff --git a/library/ui/tools/launchpad.factor b/library/ui/tools/launchpad.factor index 46ce68ea41..e3d59c1deb 100644 --- a/library/ui/tools/launchpad.factor +++ b/library/ui/tools/launchpad.factor @@ -3,7 +3,7 @@ IN: gadgets USING: gadgets-presentations memory io gadgets-panes gadgets-scrolling namespaces help kernel gadgets-listener -gadgets-browser ; +gadgets-browser gadgets-search ; : handbook-window ( -- ) T{ link f "handbook" } show ; diff --git a/library/ui/ui.factor b/library/ui/ui.factor index 5c9d971874..34847f4e34 100644 --- a/library/ui/ui.factor +++ b/library/ui/ui.factor @@ -1,10 +1,10 @@ ! Copyright (C) 2006 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. IN: gadgets -USING: arrays errors gadgets gadgets-frames gadgets-grids -gadgets-labels gadgets-panes gadgets-theme gadgets-viewports -generic hashtables io kernel math models namespaces prettyprint -queues sequences test threads ; +USING: arrays errors gadgets gadgets-buttons gadgets-frames +gadgets-grids gadgets-labels gadgets-panes gadgets-theme +gadgets-viewports generic hashtables io kernel math models +namespaces prettyprint queues sequences test threads ; ! Assoc mapping aliens to gadgets SYMBOL: windows