:: :::: /hoon/sole/sur !: |% ++ sole-action :: sole to app $% :: {$abo ~} :: reset interaction {$det sole-change} :: command line edit {$ret $~} :: submit and clear {$clr $~} :: exit context == :: ++ sole-buffer (list @c) :: command state ++ sole-change :: network change $: ler/sole-clock :: destination clock haw/@uvH :: source hash ted/sole-edit :: state change == :: ++ sole-clock {own/@ud his/@ud} :: vector clock ++ sole-edit :: shared state change $% {$del p/@ud} :: delete one at {$ins p/@ud q/@c} :: insert at {$mor p/(list sole-edit)} :: combination {$nop $~} :: no-op {$set p/sole-buffer} :: discontinuity == :: ++ sole-effect :: app to sole $% {$bel $~} :: beep {$blk p/@ud q/@c} :: blink+match char at {$clr $~} :: clear screen {$det sole-change} :: edit command {$err p/@ud} :: error point {$mor p/(list sole-effect)} :: multiple effects {$nex $~} :: save clear command {$pro sole-prompt} :: set prompt {$sag p/path q/*} :: save to jamfile {$sav p/path q/@} :: save to file {$tan p/(list tank)} :: classic tank :: {$taq p/tanq} :: modern tank {$txt p/tape} :: text line {$url p/@t} :: activate url == :: ++ sole-command :: command state $: pos/@ud :: cursor position say/sole-share :: cursor == :: ++ sole-prompt :: prompt definition $: vis/? :: command visible tag/term :: history mode cad/tape :: caption == :: ++ sole-share :: symmetric state $: ven/sole-clock :: our vector clock leg/(list sole-edit) :: unmerged edits buf/sole-buffer :: sole state == :: :: :: :: :: ++ sole-dialog :: standard dialog |* out/$-(* *) :: output structure $-(sole-input (sole-result out)) :: output function :: :: ++ sole-input tape :: prompt input ++ sole-result :: conditional result |* out/$-(* *) :: output structure $@(@ud (sole-product out)) :: error position :: :: ++ sole-product :: success result |* out/$-(* *) :: %+ pair (list tank) :: %+ each (unit out) :: ~ is abort (pair sole-prompt (sole-dialog out)) :: ask and continue :: :: ++ sole-request :: scraper result |* out/$-(* *) :: output structure %+ pair (list tank) :: %+ each (unit out) :: ~ is abort (pair hiss $-(httr (sole-request out))) :: fetch and continue :: :: ++ sole-gen :: XX virtual type $% {$say $-((sole-args) (cask))} :: direct noun {$ask $-((sole-args) (sole-product (cask)))} :: dialog {$get $-((sole-args) (sole-request (cask)))} :: scraper == :: ++ sole-args :: generator arguments |* _[* *] :: {{now/@da eny/@uvI bek/beak} {+<- +<+}} :: :: :: :: :: ++ sole-so :: construct result |* pro/* :: [p=*(list tank) q=[%& p=[~ u=pro]]] :: :: :: ++ sole-yo :: add output tank |* {tan/tank res/(sole-result)} :: ?@ res res :: [p=[i=tan t=p.res] q=q.res] :: :: :: ++ sole-lo :: construct prompt |* {pom/sole-prompt mor/(sole-dialog)} :: [p=*(list tank) q=[%| p=pom q=mor]] :: :: :: ++ sole-at :: fetch url |* {pul/_purl fun/$-(httr *)} :: [p=*(list tank) q=[%| p=[pul %get ~ ~] q=fun]] :: :: :: ++ sole-no :: empty result [p=*(list tank) q=[%& ~]] :: :: :: ++ sole-go :: parse by rule |* {sef/rule fun/$-(* *)} :: |= txt/sole-input :: =+ vex=(sef [0 0] txt) :: ?: |(!=((lent txt) q.p.vex) ?=($~ q.vex)) :: q.p.vex :: (fun p.u.q.vex) :: --