activate:
- shift + click on a scripting pane's background
- shift + click on any block
- shift + enter in the IDE's edit mode
stop editing:
- left-click on scripting pane's background
- esc
navigate among scripts:
- tab: next script
- backtab (shift + tab): last script
start editing a new script:
- shift + enter
navigate among commands within a script:
- down arrow: next command
- up arrow: last command
navigate among all elements within a script:
- right arrow: next element (block or input)
- left arrow: last element
move the currently edited script (stack of blocks):
- shift + arrow keys (left, right, up, down)
editing scripts:
- backspace:
* delete currently focused reporter
* delete command above current insertion mark (blinking)
* collapse currently focused variadic input by one element
- enter:
* edit currently focused input slot
* expand currently focused variadic input by one element
- space:
* activate currently focused input slot's pull-down menu, if any
* show a menu of reachable variables for the focused input or
reporter
- any other key:
start searching for insertable matching blocks
- in menus triggered by this feature:
* navigate with up / down arrow keys
* trigger selection with enter
* cancel menu with esc
- in the search bar triggered b this feature:
* keep typing / deleting to narrow and update matches
* navigate among shown matches with up / down arrow keys
* insert selected match at the focus' position with enter
* cancel searching and inserting with esc
running the currently edited script:
* shift+ctrl+enter simulates clicking the edited script with
the mouse
* enable exporting a screenshot of the World
* enable more fine-grained control over dragging position correction
* enable all Morphs to “scrollIntoView()”
* keyboard accessibility for menus
See the screenshots in #700 for implementations but these are very
simple blocks which will make basic OOP (zombification) easier.
`ask` takes in a reporter and a string and will call that reporter on
the requested sprite.
`tell` takes in a script and a string and runs the script on the sprite.
These are sensing blocks and there are two differences from the BYOB
tool sprite:
* These use string and not "objects" since that doesn't exist yet.
* I did not (yet) implement the "input list" versions because I'm not
sure they will be used as frequently, though I do think they could be
in some library.