factor/extra/ui/tools/operations/operations.factor

199 lines
4.5 KiB
Factor
Executable File

! Copyright (C) 2006, 2007 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: continuations definitions ui.tools.browser
ui.tools.interactor ui.tools.listener ui.tools.profiler
ui.tools.search ui.tools.traceback ui.tools.workspace generic
help.topics inference summary inspector io.files io.styles kernel
namespaces parser prettyprint quotations tools.annotations
editors tools.profiler tools.test tools.time tools.walker
ui.commands ui.gadgets.editors ui.gestures ui.operations
ui.tools.deploy vocabs vocabs.loader words sequences
tools.vocabs classes compiler.units accessors ;
IN: ui.tools.operations
V{ } clone operations set-global
! Objects
[ drop t ] \ inspect H{
{ +primary+ t }
{ +listener+ t }
} define-operation
: com-prettyprint ( obj -- ) . ;
[ drop t ] \ com-prettyprint H{
{ +listener+ t }
} define-operation
: com-push ( obj -- obj ) ;
[ drop t ] \ com-push H{
{ +listener+ t }
} define-operation
: com-unparse ( obj -- ) unparse listener-input ;
[ drop t ] \ com-unparse H{ } define-operation
! Input
: com-input ( obj -- ) string>> listener-input ;
[ input? ] \ com-input H{
{ +primary+ t }
{ +secondary+ t }
} define-operation
! Restart
[ restart? ] \ restart H{
{ +primary+ t }
{ +secondary+ t }
{ +listener+ t }
} define-operation
! Continuation
[ continuation? ] \ traceback-window H{
{ +primary+ t }
{ +secondary+ t }
} define-operation
! Pathnames
: edit-file ( pathname -- ) edit ;
[ pathname? ] \ edit-file H{
{ +keyboard+ T{ key-down f { C+ } "E" } }
{ +primary+ t }
{ +secondary+ t }
{ +listener+ t }
} define-operation
UNION: definition word method-spec link vocab vocab-link ;
[ definition? ] \ edit H{
{ +keyboard+ T{ key-down f { C+ } "E" } }
{ +listener+ t }
} define-operation
: com-forget ( defspec -- )
[ forget ] with-compilation-unit ;
[ definition? ] \ com-forget H{ } define-operation
! Words
[ word? ] \ insert-word H{
{ +secondary+ t }
} define-operation
[ topic? ] \ com-follow H{
{ +keyboard+ T{ key-down f { C+ } "H" } }
{ +primary+ t }
} define-operation
: com-usage ( word -- )
get-workspace swap show-word-usage ;
[ word? ] \ com-usage H{
{ +keyboard+ T{ key-down f { C+ } "U" } }
} define-operation
[ word? ] \ fix H{
{ +keyboard+ T{ key-down f { C+ } "F" } }
{ +listener+ t }
} define-operation
[ word? ] \ watch H{ } define-operation
[ word? ] \ breakpoint H{ } define-operation
GENERIC: com-stack-effect ( obj -- )
M: quotation com-stack-effect infer. ;
M: word com-stack-effect def>> com-stack-effect ;
[ word? ] \ com-stack-effect H{
{ +listener+ t }
} define-operation
! Vocabularies
: com-vocab-words ( vocab -- )
get-workspace swap show-vocab-words ;
[ vocab? ] \ com-vocab-words H{
{ +secondary+ t }
{ +keyboard+ T{ key-down f { C+ } "B" } }
} define-operation
: com-enter-in ( vocab -- ) vocab-name set-in ;
[ vocab? ] \ com-enter-in H{
{ +keyboard+ T{ key-down f { C+ } "I" } }
{ +listener+ t }
} define-operation
: com-use-vocab ( vocab -- ) vocab-name use+ ;
[ vocab-spec? ] \ com-use-vocab H{
{ +secondary+ t }
{ +listener+ t }
} define-operation
[ vocab-spec? ] \ run H{
{ +keyboard+ T{ key-down f { C+ } "R" } }
{ +listener+ t }
} define-operation
[ vocab? ] \ test H{
{ +keyboard+ T{ key-down f { C+ } "T" } }
{ +listener+ t }
} define-operation
[ vocab-spec? ] \ deploy-tool H{ } define-operation
! Quotations
[ quotation? ] \ com-stack-effect H{
{ +keyboard+ T{ key-down f { C+ } "i" } }
{ +listener+ t }
} define-operation
[ quotation? ] \ walk H{
{ +keyboard+ T{ key-down f { C+ } "w" } }
{ +listener+ t }
} define-operation
[ quotation? ] \ time H{
{ +keyboard+ T{ key-down f { C+ } "t" } }
{ +listener+ t }
} define-operation
: com-show-profile ( workspace -- )
profiler-gadget call-tool ;
: com-profile ( quot -- ) profile f com-show-profile ;
[ quotation? ] \ com-profile H{
{ +keyboard+ T{ key-down f { C+ } "r" } }
{ +listener+ t }
} define-operation
! Profiler presentations
[ dup usage-profile? swap vocab-profile? or ]
\ com-show-profile H{ { +primary+ t } } define-operation
! Operations -> commands
source-editor
"word"
"These commands operate on the Factor word named by the token at the caret position."
\ selected-word
[ selected-word ]
[ dup search [ ] [ no-word ] ?if ]
define-operation-map
interactor
"quotation"
"These commands operate on the entire contents of the input area."
[ ]
[ quot-action ]
[ [ parse-lines ] with-compilation-unit ]
define-operation-map