:: Terminal :: :::: /hook/core/terminal/app :: /? 314 :: need urbit 314 /- term-line, kyev :: :::: structures :: |% :: ++ axle $: %1 :: hiz=(map path term-line) :: == :: ++ gilt :: $% [%term-line p=term-line] :: [%hymn p=manx] :: [%json p=json] :: == :: ++ gift :: $% [%rush gilt] :: [%rust gilt] :: [%mean p=ares] :: [%nice ~] :: [%veer p=@ta q=path r=@t] :: [%vega p=path] :: == :: ++ hapt ,[p=ship q=path] :: ++ move ,[p=bone q=(mold note gift)] :: ++ note :: $% $: %g :: $% [%cide p=span] :: [%show p=hapt q=ship r=path] :: [%sire p=term q=span] :: [%mess p=hapt q=ship r=[?(%txt %kyev) vase]] :: == == == :: ++ sign :: $% $: %g :: $% [%gone p=hapt] :: [%mean p=ares] :: [%nice ~] :: [%rust p=%term-line q=term-line] :: [%rush p=%term-line q=term-line] :: [%veer p=@ta q=path r=@t] :: [%vega p=path] :: == == == -- :: :::: libs :: |% ++ encode |= [a=term b=path] ^- span (rap 3 a (turn b |=(c=span (cat 3 '_' c)))) :: ++ decode |=(a=span `[p=term q=path]`(rash a (most cab sym))) -- !: :::: program :: |_ [hid=hide axle] ++ page |= pax=path ^- manx ;html ;head ;title: Hi ;script(src "/gen/main/lib/urb.js"); ;script(src "//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"); ;script(src "//cdnjs.cloudflare.com/ajax/libs/mousetrap/1.4.6/mousetrap.js"); ;script: urb.appl = "{(trip app.hid)}" ;script: urb.term = \{pax: "{(spud pax)}"} ;script(src "//use.typekit.net/fkv0sjk.js"); ;script:'try{Typekit.load();}catch(e){}' ;script:''' jpok = function(a,b){ var dat = {pax:urb.term.pax, act:{}} dat.act[a] = b urb.send({data:dat}) } ''' ;style:''' html { font-size: 14px; } body { margin: 2rem; line-height: 1.4rem; } body, span, pre, textarea, input { font-family: 'source-code-pro', monospace; font-size: 1rem; background-color: #000; color: #fff; } button { border: none; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: 600; font-size: .8rem; text-transform: uppercase; letter-spacing: 1px; color: #000; background-color: #fff; padding: 1rem; } #prom-cont { display: block; position:relative; } textarea, #prom-size { min-height: 24px; box-sizing: border-box; overflow: hidden; width: 100%; } textarea { height: 100%; border: 0; outline: none; position: absolute; resize: none; } #prom-size { visibility: hidden; white-space: pre-wrap; word-wrap: break-word; overflow-wrap: break-word; } ''' == ;body ;pre#cont; ;span#prem:">" ;div#prom-cont ;textarea.mousetrap#prom(wrap "off"); ;div#prom-size; == ;br; ;script:''' var prom, prom_size, hist, hind, size, focus, pos, pax $(function() { prom = $("#prom") prom_size = $("#prom-size") hist = [] hind = 0 var keys = ['l', 'x', 'r'] for (i in keys) (function(k){ Mousetrap.bind('ctrl+' + k, function(){ jpok('cmd', k) }) })(keys[i]) prom.keydown(function(e){ switch(e.which){ default: return true break; case 13: // %retn if(e.shiftKey) return true v = prom.val().replace(/\xa0/g, ' ') cont.textContent += '\n' + prem.textContent + '\n' + v jpok('line', v) hist.unshift(v) prom.val('') return false break; case 38: // %up if(hind == hist.length) return true if(pos().top === false) return true prom.val([hist[hind], hist[hind] = prom.val()][0]) size() hind++ return false break; case 40: // %down if(hind == 0) return true if(pos().bot === false) return true size() hind-- prom.val([hist[hind], hist[hind] = prom.val()][0]) return false } }) focus = function() { $(prom).focus(); } $('body').on('click', focus) focus() size = function() { prom_size.html(prom.val()+"
") } size() prom.on('input propertychange', size) pos = function() { v = prom.val() _top = v.slice(0,prom[0].selectionStart).indexOf("\n") === -1 _bot = v.slice(prom[0].selectionStart).indexOf("\n") === -1 return {top:_top,bot:_bot} } pax = '/lines' if(urb.term.pax != "/") pax += urb.term.pax urb.subscribe({path: pax}, function(e, dat){ if(dat.data.ok) return; hist = dat.data.history hind = 0 cont.textContent = dat.data.lines.join('\n') window.scrollTo(0,document.body.scrollHeight) prem.textContent = dat.data.prompt + '> ' }) }); ''' == == :: ++ peer |= [ost=bone you=ship pax=path] ^- [(list move) _+>] ?~ pax $(pax /term) ?+ -.pax !! %lines :_ +>.$ :_ ~ (jell ost t.pax) %term =+ tel=(fall (~(get by hiz) t.pax) *term-line) =^ mof r.tel =+ aut=%shell ?: (~(has by cub.hid) (encode aut t.pax)) [~ r.tel] :_ :_(r.tel leaf/"+ {(trip aut)}") :_ [ost %pass hi/mar/[t.pax] %g %sire [aut (encode aut t.pax)]]~ :^ ost %pass hi/in/[t.pax] :+ %g %show [[our.hid [(encode aut t.pax) imp.hid]] you /out] =. hiz (~(put by hiz) t.pax tel) :_ +>.$ [[ost %give %rust %hymn (page t.pax)] mof] == :: ++ poke-json |= [ost=bone you=ship jon=json] ^- [(list move) _+>] ::~& tem-poke/jon =+ ^- [pax=path jof=$%([%line p=span] [%res p=span] [%cmd p=char])] %- need %. jon => jo %^ ot pax/(su ;~(pfix fas (more fas sym))) act/(of line/so res/so cmd/so ~) ~ |- =+ tel=(fall (~(get by hiz) pax) *term-line) ?- -.jof %res =^ mof r.tel ?. (~(has by cub.hid) (encode p.jof pax)) [~ r.tel] :_ :_(r.tel leaf/"- {(trip p.jof)}") [ost %pass hi/mar/pax %g %cide (encode p.jof pax)]~ ::~& poke-sire/[jof cub.hid] =. r.tel :_(r.tel leaf/"+ {(trip p.jof)}") =. hiz (~(put by hiz) pax tel) :_ +>.^$ %+ welp mof :^ [ost %give %nice ~] :^ ost %pass hi/in/[pax] :^ %g %show [our.hid (encode p.jof pax) imp.hid] :- you /out [ost %pass hi/mar/pax %g %sire [p.jof (encode p.jof pax)]] (spam pax) :: %line =. r.tel :_(r.tel leaf/"{(trip p.tel)}> {(trip p.jof)}") =. hiz (~(put by hiz) pax tel) ?: =('\\' (end 3 1 p.jof)) $(jof [%cmd (rsh 3 1 p.jof)]) :_ +>.^$ (send ost you pax %txt !>(p.jof)) %cmd ?+ p.jof :_(+>.^$ (send ost you pax %kyev !>(`kyev`[[%ctrl ~ ~] p.jof]))) %r $(jof [%res 'shell']) == == ++ send |= [ost=bone you=ship pax=path mez=[?(%txt %kyev) vase]] %+ murn (~(tap by cub.hid)) |= [p=span q=term] ?. =(pax q:(decode p)) ~ %- some ^- move [ost %pass [%txt p pax] %g %mess [our.hid p imp.hid] you mez] :: ++ jell |= [a=bone b=path] [a %give %rust %json (tel-to-jon (fall (~(get by hiz) b) *term-line))] :: ++ spam |= pax=path ::~& tem-spam/(~(run by hiz) |=(term-line p)) %+ murn (~(tap by sup.hid)) |= [ost=bone @ paf=path] ?. =([%lines pax] paf) ~ (some (jell ost pax)) :: ++ pour |= [ost=bone pax=path sih=*] ^- [(list move) _+>] =+ sih=((hard sign) sih) ?: ?=(%veer +<.sih) :: vomit [[ost %give +.sih]~ +>.$] ?: ?=(%vega +<.sih) :: vomit [[ost %give +.sih]~ +>.$] =* paf |2.pax ?: ?=([%hi %in *] pax) ?+ &2.sih !! %nice `+>.$ ?(%rust %rush) =+ tol=(fall (~(get by hiz) paf) *term-line) =. tol ?^ q.q.sih :: XX prompt hack [p.tol (weld q.q.sih q.tol) (weld r.q.sih r.tol)] [p.q.sih (weld q.q.sih q.tol) (weld r.q.sih r.tol)] =. hiz (~(put by hiz) paf tol) [(spam paf) +>.$] == ?: ?=(%gone &2.sih) `+>.$ =+ tel=(fall (~(get by hiz) paf) *term-line) =+ old=tel =. r.tel ?. ?=(%mean &2.sih) r.tel %- welp :_ r.tel =- (turn - |=(a=tank rose/[~ "! " ~]^[a]~)) ^- (list tank) ?~ p.sih ~ (welp q.u.p.sih leaf/(trip p.u.p.sih) ~) =. hiz (~(put by hiz) paf tel) :_ +>.$ :- [ost %give +.sih] ?:(=(old tel) ~ (spam paf)) :: ++ tel-to-jon |= tel=term-line %- jobe :~ [%prompt %s p.tel] [%history %a (turn q.tel |=(a=cord [%s a]))] :+ %lines %a %- turn :_ jape ^- wall %- zing ^- (list wall) %- flop (turn r.tel (cury wash 0 80)) == --