urbit/base/sur/sole.hoon

93 lines
5.9 KiB
Plaintext
Raw Normal View History

2015-02-09 00:22:33 +03:00
::
2015-03-28 13:57:02 +03:00
:::: /hook/core/sole/sur
2015-02-09 00:22:33 +03:00
!:
|%
2015-03-28 13:57:02 +03:00
++ sole-action :: sole to app
2015-02-24 21:57:47 +03:00
$% :: [%abo ~] :: reset interaction
2015-03-28 13:57:02 +03:00
[%det sole-change] :: command line edit
2015-02-09 00:22:33 +03:00
[%ret ~] :: submit and clear
== ::
2015-03-28 13:57:02 +03:00
++ sole-buffer (list ,@c) :: command state
++ sole-change :: network change
$: ler=sole-clock :: destination clock
2015-02-09 00:22:33 +03:00
haw=@uvH :: source hash
2015-03-28 13:57:02 +03:00
ted=sole-edit :: state change
2015-02-09 00:22:33 +03:00
== ::
2015-03-28 13:57:02 +03:00
++ sole-dialog :: standard dialog
2015-03-08 23:19:39 +03:00
|* out=$+(* *) :: output structure
2015-03-28 13:57:02 +03:00
$+(sole-input (sole-result out)) :: output function
2015-03-08 23:19:39 +03:00
:: ::
2015-03-28 13:57:02 +03:00
++ sole-result :: conditional result
2015-03-08 23:19:39 +03:00
|* out=$+(* *) :: output structure
2015-03-28 13:57:02 +03:00
$|(@ud (sole-product out)) :: error position
2015-03-20 01:19:19 +03:00
:: ::
2015-03-28 13:57:02 +03:00
++ sole-product :: success result
2015-03-20 01:19:19 +03:00
|* out=$+(* *) ::
%+ pair (list tank) ::
2015-02-25 19:57:43 +03:00
%+ each (unit out) :: ~ is abort
2015-03-28 13:57:02 +03:00
(pair sole-prompt (sole-dialog out)) :: ask and continue
2015-03-08 23:19:39 +03:00
:: ::
2015-03-28 13:57:02 +03:00
++ sole-so :: construct result
2015-03-12 19:35:06 +03:00
|* pro=* ::
2015-03-20 01:19:19 +03:00
[p=*(list tank) q=[%& p=[~ u=pro]]] ::
2015-03-12 19:35:06 +03:00
:: ::
2015-03-28 13:57:02 +03:00
++ sole-yo :: add output tank
|* [tan=tank res=(sole-result)] ::
2015-03-20 01:19:19 +03:00
?@ res res ::
[p=[i=tan t=p.res] q=q.res] ::
2015-03-12 19:35:06 +03:00
:: ::
2015-03-28 13:57:02 +03:00
++ sole-lo :: construct prompt
|* [pom=sole-prompt mor=(sole-dialog)] ::
2015-03-20 01:19:19 +03:00
[p=*(list tank) q=[%| p=pom q=mor]] ::
:: ::
2015-03-28 13:57:02 +03:00
++ sole-no :: empty result
2015-03-20 01:19:19 +03:00
[p=*(list tank) q=~] ::
2015-03-12 19:35:06 +03:00
:: ::
2015-03-28 13:57:02 +03:00
++ sole-go :: parse by rule
2015-03-12 19:35:06 +03:00
|* [sef=_rule fun=$+(* *)] ::
2015-03-28 13:57:02 +03:00
|= txt=sole-input ::
2015-03-20 01:19:19 +03:00
=+ vex=(sef [0 0] txt) ::
?: |(!=((lent txt) q.p.vex) ?=(~ q.vex)) ::
q.p.vex ::
(fun p.u.q.vex) ::
2015-03-12 19:35:06 +03:00
:: ::
2015-03-28 13:57:02 +03:00
++ sole-clock ,[own=@ud his=@ud] :: vector clock
++ sole-edit :: shared state change
2015-02-09 00:22:33 +03:00
$% [%del p=@ud] :: delete one at
[%ins p=@ud q=@c] :: insert at
2015-03-28 13:57:02 +03:00
[%mor p=(list sole-edit)] :: combination
2015-02-09 00:22:33 +03:00
[%nop ~] :: no-op
2015-03-28 13:57:02 +03:00
[%set p=sole-buffer] :: discontinuity
2015-02-09 00:22:33 +03:00
== ::
2015-03-28 13:57:02 +03:00
++ sole-effect :: app to sole
2015-02-09 00:22:33 +03:00
$% [%bel ~] :: beep
[%blk p=@ud q=@c] :: blink/match char at
[%clr ~] :: clear screen
2015-03-28 13:57:02 +03:00
[%det sole-change] :: edit command
2015-03-19 21:53:05 +03:00
[%err p=@ud] :: error point
2015-03-28 13:57:02 +03:00
[%mor p=(list sole-effect)] :: multiple effects
2015-02-22 01:37:35 +03:00
[%nex ~] :: save, clear command
2015-03-28 13:57:02 +03:00
[%pro sole-prompt] :: set prompt
2015-02-24 21:57:47 +03:00
[%sag p=path q=*] :: save to jamfile
[%sav p=path q=@] :: save to file
2015-02-09 00:22:33 +03:00
[%tan p=(list tank)] :: classic tank
:: [%taq p=tanq] :: modern tank
[%txt p=tape] :: text line
== ::
2015-03-28 13:57:02 +03:00
++ sole-command :: command state
2015-02-09 00:22:33 +03:00
$: pos=@ud :: cursor position
2015-03-28 13:57:02 +03:00
say=sole-share :: cursor
2015-02-09 09:25:00 +03:00
== ::
2015-03-28 13:57:02 +03:00
++ sole-prompt :: prompt definition
2015-02-22 01:37:35 +03:00
$: vis=? :: command visible
tag=term :: history mode
2015-03-19 22:58:54 +03:00
cad=tape :: caption
2015-02-09 09:25:00 +03:00
== ::
2015-03-28 13:57:02 +03:00
++ sole-input tape :: prompt input
++ sole-share :: symmetric state
$: ven=sole-clock :: our vector clock
leg=(list sole-edit) :: unmerged edits
buf=sole-buffer :: sole state
2015-02-09 00:22:33 +03:00
== ::
--