on master help sign in
Merge remote-tracking branches 'knubie/master', 'joemfb/moar', 'joemfb/run-in', 'fang/master' and 'origin/fix-use-fs'
6a66d05Philip C Monk
docs/about/glossary.mdnew file+270
@@ -0,0 +1,270 @@
1+---
2+navhome: '/docs'
3+next: True
4+sort: 3
5+title: Urbit glossary
6+---
7+
8+# Urbit glossary
9+
10+Urbit is renowned for its exotic terminology. Here's a simple overview
11+from the strange words in.
12+
13+As Dijkstra put it: "The purpose of abstraction is not to be vague, but
14+to create a new semantic level in which one can be absolutely precise."
15+
16+## Ships
17+
18+An Urbit `ship` is a cryptographic identity, a human-memorable name, and
19+a packet routing address. Ships are classed by the number of bits in
20+their address:
21+
22+ Size Name Parent Object Example
23+ ----- ------ ------ ------ -------
24+ 2^8 galaxy ~ supernode ~zod
25+ 2^16 star galaxy supernode ~doznec
26+ 2^32 planet star user ~tasfyn-partyv
27+ 2^64 moon planet device ~sigsam-nimbot-tasfyn-partyv
28+ 2^128 comet ~ bot ~racmus-mollen-fallyt-linpex--watres-sibbur-modlux-rinmex
29+
30+Any ship can be called an `urbit`.
31+
32+> A summary [here](http://urbit.org/posts/address-space/).
33+
34+An Urbit identity is a string like `~firbyr-napbes`. It means nothing,
35+but it's easy to remember and say out loud. `~firbyr-napbes` is actually
36+just a 32-bit number, like an IP address, that we turn into a
37+human-memorable string.
38+
39+Technically, an urbit is a secure digital identity that you own and
40+control with a cryptographic key, like a Bitcoin wallet. As in Bitcoin,
41+the supply of urbits is mathematically limited. This keeps the network
42+friendly, by making spam and abuse expensive.
43+
44+An urbit name is just a number; smaller numbers make shorter names.
45+Shorter names are easier to remember, so they're more valuable. So
46+urbits are classified by the number of bits in their name. (A ship name
47+is just a scrambled base-256 representation of the number.)
48+
49+A 32-bit urbit (like `~firbyr-napbes`) is called a "planet." A 16-bit
50+urbit (like `~pollev)` is a "star." An 8-bit ship (like `~mun`) is a
51+"galaxy." A planet is an identity for an independent, adult human. Stars
52+and galaxies are network infrastructure.
53+
54+Each planet or star is launched by its "parent," the star or galaxy
55+whose number is its bottom half. So the planet `~firbyr-napbes`,
56+`0xdead.beef` or `3.735.928.559`, is the child of `~pollev`, `0xbeef` or
57+`48.879`, whose parent is `~mun`, `0xef`, `239`. The parent of `~mun`
58+and all galaxies is `~zod`, `0`.
59+
60+### Nock
61+
62+> Nock is a Turing-complete, non-lambda combinator interpreter.
63+
64+- `noun`: an `atom` or a `cell`
65+- `atom`: any natural number
66+- `cell`: any ordered pair of `noun`s
67+- `subject`: a `noun` - the data against which a `formula` is
68+ evaluated
69+- `formula`: a `noun` - a function at the Nock level
70+- `product`: a `noun` - the result of evaluating a `formula` against a
71+ `subject`
72+
73+*See [Nock definition](../../nock/definition/).*
74+
75+### Hoon
76+
77+> Hoon is a strict, higher-order typed functional language that compiles
78+> itself to Nock.
79+
80+###### `span`: an inferred type
81+
82+A `span` defines a set (finite or infinite) of `noun`s and ascribes some
83+semantics to it. There is no Hoon syntax for a `span`; it is always
84+produced as the inferred range of an expression (`twig`).
85+
86+*See [basic types](../../hoon/basic/#-type-span-and-mold).*
87+
88+###### `core`: a code-data `cell`
89+
90+The code (`battery`) is the head, the data (`payload`) is the tail. All
91+code-data structures in normal languages (functions, objects, modules,
92+etc) become `core`s in Hoon.
93+
94+- `battery`: the code of a `core`, a tree of `arm`s
95+- `payload`: the data in a `core`
96+
97+*See [basic types](../../hoon/basic)*.
98+
99+###### `arm`: a named, functionally-computed attribute of a `core`
100+
101+The `twig` of each `arm` is compiled to a Nock formula, with the
102+enclosing `core` itself as the subject.
103+
104+There are two kinds of `arm`s: `dry` and `wet`. Most arms are dry.
105+
106+- `dry`: normal, `++`, polymorphic by means of *variance*
107+
108+For a `dry` `arm`, we ask, is the new `payload` compatible with the old
109+`payload` (against which the `core` was compiled)?
110+
111+- `wet`: unusual, `+-`, polymorphic by means of *genericity*
112+
113+A `wet` `arm` uses the `twig` as a macro. We create a new type analysis
114+path, which works as if we expanded the callee with the caller's
115+context.
116+
117+*See [advanced types](/hoon/advanced)*.
118+
119+###### `metal`: a variance model
120+
121+Every `core` has a `metal` which defines its *variance* model (ie, the
122+properties of the `span` of a compatible `core`). The default is `gold`
123+(invariant).
124+
125+- `gold`: *invariant*
126+- `lead`: *bivariant*
127+- `zinc`: *covariant*
128+- `iron`: *contravariant*
129+
130+*See [advanced types](/hoon/advanced)*.
131+
132+###### `gate`: a function/lambda/closure
133+
134+A `gate` is a `core` with one `arm`. To call a `gate` on an argument,
135+replace the `sample` (at tree address `6` in the `core`) with the
136+argument, and then compute the `arm`.
137+
138+The `payload` of a `gate` has a shape of `{sample context}`.
139+
140+- `sample`: the argument tuple
141+- `context`: the subject in which the `gate` was defined
142+
143+*See [basic types](../../hoon/basic/#-core-p-span-q-map-term-span),
144+[`%-` or `:call`](../../hoon/twig/cen-call/hep-call/) (the `twig` for
145+calling a `gate`).*
146+
147+###### `mold`: a type constructor / validator
148+
149+A mold is an idempotent `gate` (function), accepting any `noun`, and
150+producing a range with a useful `span`.
151+
152+- `bunt`: the value a `mold` produces when normalizing its default
153+ sample
154+- `icon`: the `span` of the `mold`'s range
155+
156+*See [`mold` `twig`s](/hoon/twig/buc-mold/).*
157+
158+###### `atom`
159+
160+A Hoon `atom` span describes a Nock `atom`, with two additional pieces
161+of metadata: an `aura`, and an optional constant.
162+
163+An `atom` span is `warm` or `cold` based on whether the constant exists.
164+
165+- `warm`: if the constant is `~` (null), any `atom` is in the `span`
166+- `cold`: if the constant is `[~ atom]`, its only legal value is
167+ `atom`.
168+
169+*See [basic types](../../hoon/basic/#-atom-p-term-q-unit-atom)*
170+
171+###### `aura`: a soft `atom` type
172+
173+`aura` is a name for an atom type. It represents the structure of an
174+`atom` in a string beginning with `@`. An aura may represent units,
175+print format, or other semantics. Its constraints on the value of an
176+atom aren't enforced in any way.
177+
178+Two `aura`s are compatible if one is a prefix of the other. You can
179+change any `aura` into any other `aura` by casting through the empty
180+`aura`, `@`. The standard library has molds which alias many common
181+auras.
182+
183+Some common auras and their aliases:
184+
185+- `term` (`@tas`): a symbol - an atomic ASCII string which obeys
186+ symbol rules: lowercase and digit only, infix hyphen ("kebab-case"),
187+ first character must be lowercase alphabetic.
188+- `cord` (`@t`): UTF-8 text, least-significant-byte first
189+- `char` (`@tD`): a character, a single unicode byte (for multi-byte
190+ characters and codepoints, see `@c`)
191+
192+*See [basic types](../../hoon/basic/#-atom-p-term-q-unit-atom)*.
193+
194+###### `twig`: a Hoon expression
195+
196+A `twig` is a Hoon expression. Specifically, `twig` is the mold for the
197+noun that a Hoon source expression compiles to. A twig is always a cell.
198+
199+A twig has one of two forms: `{twig twig}`, which produces the ordered
200+pair of the two twigs, or a cell `{stem bulb}`, where `stem` is an
201+atomic symbol.
202+
203+- `stem`: an atomic symbol (`@tas`) - the name of a `twig`.
204+- `bulb`: The `mold` of the `twig`'s contents.
205+
206+Most `twig`s have a *regular form*, beginning with a `sigil` which is
207+either a `keyword` or a `rune`. Some `twig`s also have a syntactic
208+*irregular form*; a few have *only* an *irregular form*.
209+
210+- `sigil`: a `keyword` or `rune` used to begin a `twig`
211+- `keyword`: the value of a stem, prefixed with `:`.
212+- `rune`: a pair of ASCII symbols used to begin a `twig`.
213+
214+For example, the stem `%if` becomes the keyword
215+[`:if`](../../hoon/twig/wut-test/col-if/), with the rune `?:`. The first
216+symbol in a rune represents a family of related `twig`s. For example,
217+the [`?` family](../../hoon/twig/wut-test/) are all conditionals.
218+
219+The keyword or rune forms are up to the programmer's choice. Most
220+existing code uses runes, but the keyword form makes the learning path
221+easier.
222+
223+A regular twig has two syntactic forms, *tall* and *flat*:
224+
225+- `tall`: multiple lines, no parentheses, two or more spaces between
226+ tokens
227+- `flat`: one line, parentheses, one space between tokens
228+
229+`tall` twigs can contain `flat` ones, but not vice versa. All irregular
230+forms are `flat`.
231+
232+*See [`twig` concept](../../hoon/concepts/#-twig-expression),
233+[expressions](../../hoon/twig/), and [syntax](../../hoon/syntax/)*.
234+
235+###### `limb`: attribute or variable reference
236+
237+To resolve a `limb` named "foo", the `subject` is searched depth-first,
238+head-first for either a `face` named "foo" or a `core` with an `arm` of
239+"foo". If a `face` is found, the result is a `leg`, if a `core` is
240+found, the result is the `product` of the `arm`.
241+
242+- `leg`: a subexpression, or subtree of the `subject`.
243+- `wing`: a list of `limb`s, searched from right to left (`a.b` means
244+ `b` within `a`).
245+
246+*See [Limbs and wings](../../hoon/twig/limb)*
247+
248+###### `face`: a labeled subtree
249+
250+Hoon has no scope or symbol-table; there is only the `subject`. To
251+"declare" a "variable" is to construct a new `subject`:
252+`[name=value old-subject]`.
253+
254+A `face` is a `span` that wraps a name (`@tas`) around another `span`.
255+
256+*See [advanced types](../../hoon/advanced/#-face-aliases-and-bridges)*.
257+
258+###### `nest`: type compatibility test
259+
260+`nest` is an internal function on two spans, which produces yes if the
261+set of nouns in the second span is provably a subset of the first.
262+
263+*See [advanced types](../../hoon/advanced/)*.
264+
265+###### `loobean`: a Hoon boolean
266+
267+`0` (`%.y`) is *yes*, `1` (`%.n`) is *no*.
268+
269+> Why? It's fresh, it's different, it's new. And it's annoying. And it
270+> keeps you on your toes. And it's also just intuitively right.
docs/arvo/generators.md+9−66
@@ -72,81 +72,26 @@ We'll need a new mark for our arguments. Let's call it
72> (/mar/examples/ping/message.hoon).
72> (/mar/examples/ping/message.hoon).
73
73
74```
74```
75−:: Up-ness monitor. Accepts atom url, 'on', or 'off'
76::
75::
77−:::: /hoon/up/examples/app
76+:::: /hoon/message/ping/examples/app
78 ::
77 ::
79/? 314
78/? 314
79+|_ {to/@p message/@t}
80+++ grab
80−|%
81+ |%
81−++ move {bone card}
82+ ++ noun {@p @t}
82−++ card
83− $% {$hiss wire $~ $httr {$purl p/purl}}
84− {$wait wire @da}
85− ==
86−++ action
87− $% {$on $~} :: enable polling('on')
88− {$off $~} :: disable polling('off)
89− {$target p/cord} :: set poll target('http://...')
90− ==
91−--
83+ --
92−|_ {hid/bowl on/_| in-progress/_| target/@t}
93−++ poke-atom
94− |= url-or-command/@t ^- (quip move +>)
95− =+ ^- act/action
96− ?: ?=($on url-or-command) [%on ~]
97− ?: ?=($off url-or-command) [%off ~]
98− [%target url-or-command]
99− ?- -.act
100− $target [~ +>.$(target p.act)]
101− $off [~ +>.$(on |)]
102− $on
103− :- ?: |(on in-progress) ~
104− [ost.hid %hiss /request ~ %httr %purl (need (epur target))]~
105− +>.$(on &, in-progress &)
106− ==
107−::
108−
109−:: ~& 'i get here'
110−:: ^- {(list move) _+>.$}
111−:: ?: =('off' url)
112−:: [~ +>.$(on |)]
113−:: ?: =('on' url)
114−:: :_ +>.$(on &, in-progress &)
115−:: ?: |(on in-progress)
116−:: ~
117−:: [ost.hid %them /request ~ (need (epur target)) %get ~ ~]~
118−:: [~ +>.$(target url)]
119−++ sigh-httr
120− |= {wir/wire code/@ud headers/mess body/(unit octs)}
121− ~& 'arrive here'
122− ^- {(list move) _+>.$}
123− ?: &((gte code 200) (lth code 300))
124− ~& [%all-is-well code]
125− :_ +>.$
126− [ost.hid %wait /timer (add ~s10 now.hid)]~
127− ~& [%we-have-a-problem code]
128− ~& [%headers headers]
129− ~& [%body body]
130− :_ +>.$
131− [ost.hid %wait /timer (add ~s10 now.hid)]~
132−++ wake-timer
133− |= {wir/wire $~} ^- (quip move +>)
134− ?: on
135− :_ +>.$
136− [ost.hid %hiss /request ~ %httr %purl (need (epur target))]~
137− [~ +>.$(in-progress |)]
138−::
139−++ prep ~& target _`. ::
140--
84--
141```
85```
142
86
143The app can easily be modified to use this (`/app/examples/ping.hoon`):
87The app can easily be modified to use this (`/app/examples/ping.hoon`):
144
88
145```
89```
90+:: Allows one ship to ping another with a string of text
146::
91::
147:::: /hoon/ping/examples/app
92:::: /hoon/ping/examples/app
148 ::
93 ::
149−/? 151
94+/? 314
150|%
95|%
151 ++ move {bone term wire *}
96 ++ move {bone term wire *}
152--
97--
@@ -172,8 +117,6 @@ The app can easily be modified to use this (`/app/examples/ping.hoon`):
172::
117::
173++ coup |=(* `+>)
118++ coup |=(* `+>)
174--
119--
175−
176−
177```
120```
178
121
179Now we can run this with:
122Now we can run this with:
@@ -195,7 +138,7 @@ to `:examples-ping`, let's put it in `/gen/examples/ping/send.hoon`:
195
138
196```
139```
197:- %say
140:- %say
198−|= {^ {{to/@p message/?($~ {text/@t $~})} $~}
141+|= {^ {to/@p message/?($~ {text/@t $~})} $~}
199[%examples-ping-message to ?~(message 'howdy' text.message)]
142[%examples-ping-message to ?~(message 'howdy' text.message)]
200```
143```
201
144
docs/hoon/library/2h.md+44
@@ -461,6 +461,50 @@ Examples
461
461
462------------------------------------------------------------------------
462------------------------------------------------------------------------
463
463
464+### `+-run:in`
465+
466+Apply gate to set (often called *map*)
467+
468+Produce a `++set` containing the products of gate `b` applied to each element
469+in `a`.
470+
471+Accepts
472+-------
473+
474+`a` is a `++set`.
475+
476+`b` is a gate.
477+
478+Produces
479+--------
480+
481+A set.
482+
483+Source
484+------
485+
486+ +- run :: apply gate to values
487+ ~/ %run
488+ |* b/gate
489+ =| c/(set _?>(?=(^ a) (b n.a)))
490+ |- ?~ a c
491+ =. c (~(put in c) (b n.a))
492+ =. c $(a l.a, c c)
493+ $(a r.a, c c)
494+
495+
496+
497+Examples
498+--------
499+
500+ > =s (sy ~["a" "A" "b" "c"])
501+ > s
502+ {"A" "a" "c" "b"}
503+ > (~(run in s) cuss)
504+ {'A' 'C' 'B'}
505+
506+------------------------------------------------------------------------
507+
464### `+-tap:in`
508### `+-tap:in`
465
509
466Set to list
510Set to list
docs/hoon/twig/bar-core/dot-trap.md+3
@@ -52,3 +52,6 @@ A more interesting trap:
52
52
53Note that we can use `:moar()` or `$()` to recurse back into the
53Note that we can use `:moar()` or `$()` to recurse back into the
54trap, since it's a core with an `$` arm.
54trap, since it's a core with an `$` arm.
55+
56+> `:moar()` expands to `:make($)` (`%=($)`), accepting a *jogging* body
57+> containing a list of changes to the subject.
docs/hoon/twig/bar-core/hep-loop.md+9
@@ -21,6 +21,15 @@ sort: 4
21
21
22Regular: *1-fixed*.
22Regular: *1-fixed*.
23
23
24+## Discussion
25+
26+The `:loop` keyword (and `|-` rune) can be thought of as a "recursion point" -
27+since `:loop` makes a `:trap` (a core with one arm named `$`), we can recurse
28+back into it with `:moar()` or `$()`.
29+
30+> `:moar()` expands to `:make($)` (`%=($)`), accepting a *jogging* body
31+> containing a list of changes to the subject.
32+
24## Examples
33## Examples
25
34
26A trivial loop doesn't even recurse:
35A trivial loop doesn't even recurse:
docs/hoon/twig/bar-core/tar-gill.md+5
@@ -32,6 +32,11 @@ is still only one copy of the code, however).
32Genericity is a powerful and dangerous tool. Use gills only if
32Genericity is a powerful and dangerous tool. Use gills only if
33you think you know what you're doing.
33you think you know what you're doing.
34
34
35+Just as with a `:gate`, we can recurse back into a `:gill` with `:moar()` or `$()`.
36+
37+> `:moar()` expands to `:make($)` (`%=($)`), accepting a *jogging* body
38+> containing a list of changes to the subject.
39+
35## Examples
40## Examples
36
41
37Wet and dry gates in a nutshell:
42Wet and dry gates in a nutshell:
docs/hoon/twig/bar-core/tis-gate.md+6
@@ -24,6 +24,12 @@ Regular: *2-fixed*.
24
24
25## Discussion
25## Discussion
26
26
27+A gate is a core with one arm named `$`, so, just as with `:loop` (`|-`),
28+we can recurse back into it with `:moar()` or `$()`.
29+
30+> `:moar()` expands to `:make($)` (`%=($)`), accepting a *jogging* body
31+> containing a list of changes to the subject.
32+
27## Examples
33## Examples
28
34
29A trivial gate:
35A trivial gate:
docs/using/filesystem.md+20−27
@@ -108,30 +108,30 @@ Unmounts the path `%/web` from whatever name it was mounted as.
108
108
109Unmounts the Unix path `/generators`.
109Unmounts the Unix path `/generators`.
110
110
111−### `|merge desk beak [strategy]`
111+### `|merge desk beak[, =gem strategy]`
112
112
113Merges a `beak` into a `desk` using an optional merge `strategy`.
113Merges a `beak` into a `desk` using an optional merge `strategy`.
114
114
115−A `beak` is either a desk (`%home`), a plot-desk cell (`[~doznec
116−%home]`), or a plot-desk-case (`/~doznec/home/2/web/md`)
115+A `beak` is a ship-desk-case triple, encoded as a path(`/~doznec/home/2`)
117
116
118**Examples:**
117**Examples:**
119
118
120− |merge %home-work /=home= %fine
119+ |merge %home-work /=home=, =gem %fine
121
120
122Merge `/=home=` into `%home-work` using merge strategy `%fine`.
121Merge `/=home=` into `%home-work` using merge strategy `%fine`.
123
122
124− |merge %examples [~wacbex-ribmex %examples]
123+ |merge %examples ~wacbex-ribmex %examples
125
124
126Merge the `%examples` desk from `~waxbex-ribmex`
125Merge the `%examples` desk from `~waxbex-ribmex`
127
126
128### `|sync desk plot [plot-desk]`
127### `|sync desk plot [plot-desk]`
129
128
130Subscribe to continuous updates from remote `plot` on local `desk`.
129Subscribe to continuous updates from remote `plot` on local `desk`.
131−`plot-desk` can specify the remote `desk` name. When omitted it's
130+`plot-desk` can specify the remote `desk` name. When omitted it is
132−assumed to be the same as `desk`. Moons have `|sync %home ~parent
131+defaulted to being the same as `desk`. Non-comet urbits have `|sync
133−%kids` automatically set up (where `~parent` is the planet that issued
132+%home ~parent %kids` automatically set up (where `~parent` is the
134−the moon).
133+planet that issued a moon, the star that issued a planet, or the
134+galaxy that issued a star).
135
135
136**Examples:**
136**Examples:**
137
137
@@ -140,8 +140,7 @@ the moon).
140### `|unsync desk plot [plot-desk]`
140### `|unsync desk plot [plot-desk]`
141
141
142Unsubscribe from updates from remote `plot` on local `desk` with
142Unsubscribe from updates from remote `plot` on local `desk` with
143−optional `plot-desk`. Arguments must match original `|sync` command
143+optional `plot-desk`. Arguments must match original `|sync` command.
144−exactly.
145
144
146Example:
145Example:
147
146
@@ -160,7 +159,7 @@ Example:
160`%init` - Used if it's the first commit to a desk. Also can be
159`%init` - Used if it's the first commit to a desk. Also can be
161used to "reinitialize" a desk -- revision numbers keep going up,
160used to "reinitialize" a desk -- revision numbers keep going up,
162but the new revision isn't necessarily a descendent of the
161but the new revision isn't necessarily a descendent of the
163−previously-numbered version.
162+previously-numbered version, allowing merges to be rerun.
164
163
165`%this` - Keep what's in Bob's desk, but join the ancestry.
164`%this` - Keep what's in Bob's desk, but join the ancestry.
166
165
@@ -209,32 +208,26 @@ Finally, we annotate any conflicts, if we know how.
209Remove the data at `path`. `path` must be a path to actual node, not
208Remove the data at `path`. `path` must be a path to actual node, not
210a 'directory'
209a 'directory'
211
210
212−### `|cp to from how`
211+### `|cp to from`
213
212
214−Copy the subtree `from` into the subtree `to`, committing it with the
213+Copy the file at `from` into the path `to`.
215−specified merge strategy `how`.
216
214
217−#### `|mv to from how`
215+#### `|mv to from`
218
216
219−Move the subtree `from` into the subtree `to`, committing it with the
217+Move the file at `from` into the path `to`.
220−specified merge strategy `how`.
221
218
222In `%clay`, `|mv` is just a shorthand for `|cp` then `|rm`. The `|rm`
219In `%clay`, `|mv` is just a shorthand for `|cp` then `|rm`. The `|rm`
223doesn't happen unless the `|cp` succeeds.
220doesn't happen unless the `|cp` succeeds.
224
221
225### Generators
222### Generators
226
223
227−<h3 class="first child"><code>+cat path</code> / <code>+cal [path
224+<h3 class="first child"><code>+cat path [path ...]</code></h3>
228−...]</code></h3>
229
225
230−Similar to Unix `cat`. `+cat` takes a single `path`, `+cal` a list of
226+Similar to Unix `cat`. `+cat` takes one or more `path`s, and prints
231−paths.
227+their contents.
232
228
233−Produces the contents of the file at the given `path`.
229+### `+ls path`
234
230
235−### `+ls path` / `+ll [path ...]`
236−
237−Similar to Unix `ls`. `+ls` takes a single `path`, `+ll` a list of
231+Similar to Unix `ls`. `+ls` takes a single `path`.
238−paths.
239
232
240Produces a list of names at the `path`.
233Produces a list of names at the `path`.
docs/using/messaging.md+45−1
@@ -27,7 +27,9 @@ For the most part we use `:talk` as a single-instance of Slack: one main channel
27
27
28Let's join `/urbit-meta`:
28Let's join `/urbit-meta`:
29
29
30+Use `ctrl-x` to switch from `:dojo` to `:talk`, then:
31+
30− ~your-urbit: ;join ~doznec/urbit-meta
32+ ~your-urbit:talk> ;join ~doznec/urbit-meta
31
33
32You'll see:
34You'll see:
33
35
@@ -95,14 +97,56 @@ insert a Unicode bullet-point character in an appropriate space
95in your post, to show you the prospective linebreak. Your essay
97in your post, to show you the prospective linebreak. Your essay
96will be posted in multiple lines.
98will be posted in multiple lines.
97
99
100+ ~your-urbit:talk> this is a long message, so it will by truncated right at this•spot
101+
102+will print as
103+
104+ ~your-urbit; this is a long message, so it will by truncated right at this
105+ ~your-urbit; spot
106+
98#### URLs
107#### URLs
99
108
100A URL is any valid URL.
109A URL is any valid URL.
101
110
111+ ~your-urbit:talk> http://example.com
112+
102### Commands
113### Commands
103
114
104A command is a hoon expression, prefaced by '#'.
115A command is a hoon expression, prefaced by '#'.
105
116
117+ ~your-urbit:talk> #(add 2 2)
118+
119+### Activating Lines
120+
121+A line number identifying the *subsequent* line is displayed every 5 lines.
122+
123+ ---------[0]
124+ ~your-urbit; this is my message
125+ ~your-urbit@ this is an @ message
126+ ~your-urbit; this is a long message, so it will by truncated right at this
127+ ~your-urbit; spot
128+ ~your-urbit/ http://example.com/
129+ ---------[5]
130+ ~your-urbit# (add 2 2) 4
131+
132+You can use a line number to *activate* a line:
133+
134+ ~your-urbit:talk> ;0
135+
136+which prints the number, line identifier, timestamp, sender, audience,
137+and contents:
138+
139+ ? 0
140+ 0v3.hl51p.jhege.amhec.vb37r.3rejr at ~2016.6.24..04.48.21..a235
141+ ~your-urbit to ~another-urbit
142+ this is my message
143+
144+Activating a URL will print the full URL (it could have been truncated),
145+and activating a command will evaluate it.
146+
147+You can activate the most recent line with `;`, the second-most recent with
148+`;;`, and so on.
149+
106### Creating and managing stations
150### Creating and managing stations
107
151
108`;create journal %serious-journal 'description'` - Creates a `%journal`, a privately writable publicly readable station.
152`;create journal %serious-journal 'description'` - Creates a `%journal`, a privately writable publicly readable station.
docs/using/setup.md+2−1
@@ -16,7 +16,8 @@ is both a network address and a memorable name.
16
16
17You are probably creating one of two kinds of urbit: a 32-bit
17You are probably creating one of two kinds of urbit: a 32-bit
18"planet" or a 128-bit "comet." For a quick terminology guide
18"planet" or a 128-bit "comet." For a quick terminology guide
19−and high-level refresher, refer to this [handy reference sheet](/about/terminology).
19+and high-level refresher, refer to this [handy reference
20+sheet](/docs/about/glossary).
20
21
21If you have an Urbit invitation, you'll have a planet like
22If you have an Urbit invitation, you'll have a planet like
22`~fintud-macrep` and `~fortyv-tombyt-tabsen-sonres`. To create
23`~fintud-macrep` and `~fortyv-tombyt-tabsen-sonres`. To create
docs/using/shell.md+12−6
@@ -28,7 +28,7 @@ Evaluate a hoon expression:
28Tall form Hoon may require multiple lines:
28Tall form Hoon may require multiple lines:
29
29
30 ~your-urbit:dojo> %+ add
30 ~your-urbit:dojo> %+ add
31− ~your-urbit:dojo< 2
31+ ~your-urbit:dojo< 2
32 ~your-urbit:dojo< 2
32 ~your-urbit:dojo< 2
33
33
34Use `=var` to save a shell variable:
34Use `=var` to save a shell variable:
@@ -74,6 +74,8 @@ Run system commands from `:hood`, like `reload`, using `|`:
74
74
75**`+moon`** - Generate a random moon from a planet. No arguments.
75**`+moon`** - Generate a random moon from a planet. No arguments.
76
76
77+ ~your-urbit:dojo> +moon
78+
77**`+solid`** - Compile the current state of the kernel and output a noun. Usually downloaded to a file in unix. No arguments.
79**`+solid`** - Compile the current state of the kernel and output a noun. Usually downloaded to a file in unix. No arguments.
78
80
79 ~your-urbit:dojo> .urbit/pill +solid
81 ~your-urbit:dojo> .urbit/pill +solid
@@ -100,11 +102,15 @@ The hood is the system daemon. See `gen/hood` and `app/hood`.
100
102
101**`|mass`** - Prints the current memory usage of all the kernel modules. No arguments.
103**`|mass`** - Prints the current memory usage of all the kernel modules. No arguments.
102
104
105+ ~your-urbit:dojo> |mass
106+
103**`|reload`** - Reloads a kernel module (vane) from source. Accepts any number of vane names.
107**`|reload`** - Reloads a kernel module (vane) from source. Accepts any number of vane names.
104
108
105 ~your-urbit:dojo> |reload %clay %eyre
109 ~your-urbit:dojo> |reload %clay %eyre
106
110
107−**`|reset`** - Reloads `hoon.hoon`. No arguments.
111+**`|reset`** - Reloads `hoon.hoon` and all modules. No arguments.
112+
113+ ~your-urbit:dojo> |reset
108
114
109**`|start`** - Starts an app. Accepts an app name.
115**`|start`** - Starts an app. Accepts an app name.
110
116
@@ -129,7 +135,7 @@ Set any envronment variable:
129
135
130 44
136 44
131
137
132−(There are a few special variables that the dojo expects. See below.)
138+(There are a few special variables that the dojo maintains. See below.)
133
139
134#### `:` - Send to app
140#### `:` - Send to app
135
141
@@ -149,9 +155,9 @@ Save a new `md` file in `web`:
149
155
150The last component of the path is expected to be the mark (or mime type).
156The last component of the path is expected to be the mark (or mime type).
151
157
152−#### `.` - Download to Unix
158+#### `.` - Export to Unix
153
159
154−Download a noun to Unix with `.`:
160+Export a noun to Unix with `.`:
155
161
156 ~your-urbit:dojo> .foo/bar/baz (add 2 2)
162 ~your-urbit:dojo> .foo/bar/baz (add 2 2)
157
163
@@ -181,7 +187,7 @@ Use `_` to run a gate (or function):
181 ~your-urbit:dojo> _|=({a/@} (mul a 3)) 3
187 ~your-urbit:dojo> _|=({a/@} (mul a 3)) 3
182 :: produces
188 :: produces
183 9
189 9
184− :: assign an arbitrary function to get the status code from an http request
190+ :: use a function to get the status code from an http request
185 ~your-urbit:dojo> _|=({p/@ud q/* r/*} p) +http://google.com
191 ~your-urbit:dojo> _|=({p/@ud q/* r/*} p) +http://google.com
186 :: produces
192 :: produces
187 301
193 301