Here are the data types used by Dill, as defined in /sys/lull.hoon.
$blew
Terminal dimension.
+$ blew [p=@ud q=@ud]
p is columns, q is rows. This structure is passed to Dill by the runtime in a %blew task whenever the dimensions of the terminal changes.
$belt
Terminal client input.
+$ belt :: client input$? bolt :: simple input[%mod mod=?(%ctl %met %hyp) key=bolt] :: w/ modifier[%txt p=(list @c)] :: utf32 text::TODO consider moving %hey, %rez, %yow here ::== ::
A $belt is passed to Dill in a %belt task by the runtime whenever there is input, such as a user typing in the console. This is only used between the terminal client and Dill, a $dill-belt is used between Dill and Arvo.
May either be a $bolt or one of:
- %mod- Modifier (Ctrl, Meta or Hyper) plus a key (see- $bolt.
- %txt- A series of UTF-32 characters.
--
$bolt
Simple input.
+$ bolt :: simple input$@ @c :: simple keystroke$% [%aro p=?(%d %l %r %u)] :: arrow key[%bac ~] :: true backspace[%del ~] :: true delete[%hit x=@ud y=@ud] :: mouse click[%ret ~] :: return== ::
Either a single UTF-32 character or one of:
- %aro- Arrow keys.
- %bac- Backspace key.
- %del- Delete key.
- %hit- Mouse click -- ris row and- cis column. Note these are zero-indexed, with- [0 0]being the bottom left corner.
- %ret- Return (Enter) key.
$blit
Terminal client output.
+$ blit :: client output$% [%bel ~] :: make a noise[%clr ~] :: clear the screen[%hop p=$@(@ud [x=@ud y=@ud])] :: set cursor col/pos[%klr p=stub] :: put styled[%mor p=(list blit)] :: multiple blits[%nel ~] :: newline[%put p=(list @c)] :: put text at cursor[%sag p=path q=*] :: save to jamfile[%sav p=path q=@] :: save to file[%url p=@t] :: activate url[%wyp ~] :: wipe cursor line== ::
A $blit is given to the terminal client by Dill in a %blit gift when it wants to print some text, clear the screen, go ding or what have you.
This is directly used between Dill and the terminal client, while a $dill-blit is used between Arvo and Dill. A $dill-blit includes the $blit union as a subset.
A $blit is one of:
- %bel- Ring the terminal bell.
- %clr- Clear the screen.
- %hop- Set cursor position. If- pis an atom, it specifies the horizontal position on the prompt line. If- pis a cell, it represents a 2D location where- xis columns and- yis rows.
- %klr- Set styled line, the- $stubspecifies the text and style.
- %mor- multiple- $blits.
- %nel- a newline.
- %put- put text (as a list of UTF-32 characters) at the current cursor position.
- %sag- Save to jamfile, typically in- /[pier]/.urb/put/.- pis- /[path]/[filename]/[extension]. For example,- /foo/barwill save it in- /[pier]/.urb/put/foo.bar,- /a/b/c/foo/barwill save it in- /[pier]/.urb/put/a/b/c/foo.bar, and- /foowill save it in- /[pier]/.urb/put.foo.- qis the- nounto- jamand save in the file.
- %sav- Save to file. Same behaviour as- %sagexcept- qis an- atomrather than a- nounand therefore doesn't need to be- jammed. The- atomis written to disk as if it were the bytestring in the tail of an- $octs. That is,- %saving the- cord- 'abcdef', whose- @uxvalue is- 0x6665.6463.6261, results in a unix file whose hex dump renders as- 61 62 63 64 65 66.
- %url- Activate URL,- pis the URL.
- %wyp- clear the cursor line.
$dill-belt
Terminal input for Arvo.
+$ dill-belt :: arvo input$% belt :: client input[%cru p=@tas q=(list tank)] :: errmsg (deprecated)[%hey ~] :: refresh[%rez p=@ud q=@ud] :: resize, cols, rows[%yow p=gill:gall] :: connect to app== ::
A $belt is used between the terminal client and Dill, while a $dill-belt is used between Dill and Arvo. A $dill-belt includes the $belt union as a subset.
a $dill-belt is either $belt or one of:
- %cru- Echo error,- pis some error tag and- qis a stack trace.
- %hey- Refresh.
- %rez- Terminal resized,- pis columns and- qis rows.
- %yow- Connect to app.
$dill-blit
Terminal output from Arvo.
+$ dill-blit :: arvo output$% blit :: client output[%qit ~] :: close console== ::
While $blit is used between Dill and the terminal client, $dill-blit is used between Arvo and Dill. A $blit is a subset of a $dill-blit.
A $dill-blit is either a $blit or a:
- %qit- Close console.
$flog
Wrapped Dill tasks.
+$ flog :: sent to %dill$% [%crop p=@ud] :: trim kernel state$>(%crud told) ::[%heft ~] ::[%meld ~] :: unify memory[%pack ~] :: compact memory$>(%text told) ::[%verb ~] :: verbose mode== ::
These are a subset of Dill's tasks which can be wrapped in a %flog task. See the API Reference document for details of each of these tasks.
$poke
Dill to userspace.
+$ poke :: dill to userspace$: ses=@tas :: target sessiondill-belt :: input== ::
A $dill-belt (client input) for a particular session.
$session-task
A subset of Dill's tasks for interacting with a particular session.
+$ session-task :: session request$% [%belt p=belt] :: terminal input[%blew p=blew] :: terminal config[%flee ~] :: unwatch session[%hail ~] :: terminal refresh[%open p=dude:gall q=(list gill:gall)] :: setup session[%shut ~] :: close session[%view ~] :: watch session blits== ::
This type is used in the %shot wrapper task.
See the Session Tasks entry in the API reference for more details of these tasks.
$told
A subset of Dill's tasks for basic text printing.
+$ told :: system output$% [%crud p=@tas q=tang] :: error[%talk p=(list tank)] :: tanks (in order)[%text p=tape] :: tape== ::
See the Told Tasks entry in the API reference for more details of these tasks.