@@ -8,10 +8,9 @@
88
99# Messaging (Talk and Hall)
1010
11−
1211Talk is the built-in frontend for the Urbit messaging and notifications
1312protocol, Hall. Today we use Hall to chat and coordinate, but it's really
14−a general purpose piece of infrastructure. Test.
13+a general purpose piece of infrastructure.
1514
1615For the time being come join us in `/urbit-meta` by using the
1716'quickstart' section below.
@@ -22,26 +21,34 @@ Any Urbit can host one.
2221
2322Hall is a general purpose tool for both aggregating and publishing
2423streams of messages. Applications can use Hall as their transport
25−protcol, API connectors can push disparate data sources into Hall,
24+protocol, API connectors can push disparate data sources into Hall,
2625and so on. There are lots of things a distributed message protocol can
2726be used for that we haven't even thought of.
2827
2928Here we'll be discussing how to operate the default CLI frontend, Talk,
3029to send and receive messages. For a more in-depth look at Hall's internals,
31−take a look at its [documentation](../../hall/architecture).
30+take a look at its [documentation](../../tutorials/hall).
3231
3332## Quickstart
3433
35−For the most part we use Talk as a single-instance of Slack: one main
34+The most common use of talk right now is as a single-instance of Slack: one main
3635channel (`/urbit-meta`) and direct messages. Everyone is more than welcome
3736in `/urbit-meta`. It's the place to get help, ask questions and chat about
3837Urbit in general.
3938
40−Let's join `/urbit-meta`:
39+There are two ways of using Talk: from the terminal running the Urbit process,
40+or through a web UI available at `http://localhost:8080/~~/talk`. This
41+quick-start guide will cover the first method.
42+
43+##### Joining a Channel
4144
42−Use `ctrl-x` to switch from Dojo to Talk.
45+In Hall, a medium for a message is called a _circle_. There are four types of
46+circles, but we for now we'll be dealing with the _channel_: a publicly
47+accessible chatroom for general use. We'll discuss the other three
48+kinds in the [manual](#manual) section.
4349
44−To join `/urbit-meta`:
50+Let's join the `/urbit-meta` channel. Use `ctrl-x` to switch from Dojo to Talk.
51+Then, :
4552
4653```
4754~your-urbit:talk> ;join /urbit-meta
@@ -55,23 +62,28 @@ You'll see something like:
5562--------------| bound '=' {[hos=~binzod nom=%urbit-meta]}
5663--------------| new = /urbit-meta
5764--------------| /urbit-meta: cap: For Urbit-related discussion. Politically
58− | correct and safe for work. Don't be rude!
65+ | correct and safe for work. Don't be rude.
5966--------------| /urbit-meta: fit: caps:n unic:n
6067~your-urbit:talk=
6168```
6269
70+Scrolling down your terminal window, you'll probably also see the playback of
71+previous `/urbit-meta` messages that you missed.
72+
6373Post a line to `/urbit-meta`:
6474
6575```
6676~your-urbit:talk= Hello, world!
6777```
6878
69−You'll see, echoed back at you:
79+You'll see your message printed below messages from others that came before it:
7080
7181```
7282~your-urbit= Hello, world!
7383```
7484
85+##### Direct Messaging
86+
7587To send a direct message to someone, first set your audience:
7688
7789```
@@ -117,10 +129,6 @@ Use `;leave` to unsubscribe from a channel:
117129~your-urbit:talk= ;leave /urbit-meta
118130```
119131
120−There are two ways of using Talk: from the CLI or through a web UI
121−available at `http://your-urbit.urbit.org/~~/talk` (or
122−`http://localhost:8080/~~/talk`).
123−
124132The web UI ships as compiled JavaScript on your Urbit, but has its own
125133source repo [here](https://github.com/urbit/talk).
126134
@@ -132,7 +140,9 @@ Last, let's create a channel we can invite some friends to:
132140
133141Now you can tell your friends to `;join ~your-urbit/my-channel`.
134142
135−## Manual
143+;h2
144+ ;div(id "manual"): Manual
145+==
136146
137147Hall's design is similar in spirit to
138148[NNTP](https://en.wikipedia.org/wiki/Network_News_Transfer_Protocol),
@@ -149,16 +159,15 @@ general use.
149159### Posts
150160
151161A post can be a variety of different data structures. Let's look at the
152−ones you can use from within Talk: lines, URLs, Hoon and
153−replies.
162+ones you can use from within Talk: lines, URLs, Hoon and replies.
154163
155−#### Lines
164+##### Lines
156165
157166A line is simply a string of text. Depending on the filtering rules set
158167by the circle's host, these may or may not include uppercase and Unicode
159168characters.
160169
161−If the line starts with `@`, it's an action (IRC `/me`).
170+If the line starts with `@`, it's an action (like `/me` in IRC).
162171
163172```
164173~your-urbit:talk= @sends a message.
@@ -170,7 +179,7 @@ will print as
170179~your-urbit sends a message.
171180```
172181
173−#### URLs
182+##### URLs
174183
175184A URL is any valid URL.
176185
@@ -178,7 +187,7 @@ A URL is any valid URL.
178187~your-urbit:talk= https://example.com/
179188```
180189
181−### Hoon
190+##### Hoon
182191
183192You can use Talk to evaluate Hoon code and share the result with everyone in a
184193Hall circle. To do so, preface your Hoon with `#`.
@@ -194,7 +203,7 @@ will print as
1942034
195204```
196205
197−### Replies
206+##### Replies
198207
199208To indicate what you're saying is in direct response to a specific
200209message, select the message (see Activating Lines below) and type your
@@ -246,7 +255,7 @@ in reply to: ~your-urbit:
246255That's my message!
247256```
248257
249−If information got truncated — like happens for long URLs or expressions —
258+If information got truncated — like what happens for long URLs or expressions,
250259or if there's additional information available — as is the case with
251260replies and attachments — activating the message will show you all the
252261details.
@@ -256,7 +265,13 @@ with `;;`, and so on.
256265
257266### Creating and managing circles
258267
259−###### `;create [type] %name 'description'`
268+As mentioned before, any urbit can host any number of circles. Existing circles
269+can be deleted or modified with various commands. All commands in this section
270+shoild be sent from the `talk>` prompt.
271+
272+###### Create
273+
274+Syntax: `;create [type] %name 'description'`
260275
261276Creates and joins a circle, where `[type]` is any of the following:
262277- `channel`: public circle. Has a blacklist for write control.
@@ -264,76 +279,173 @@ Creates and joins a circle, where `[type]` is any of the following:
264279- `journal`: publicly readable, invite-only for writing.
265280- `mailbox`: publicly writeable, can only be read by its host.
266281
267−###### `;delete %name 'optional reason'`
282+Let's create an example mailbox:
283+
284+```
285+sampel-palnet:talk> ;create mailbox %coolbox 'cool messages only'
286+```
287+
288+Something like this should print:
289+
290+```
291+--------------| ;create mailbox %coolbox 'cool messages only'
292+--------------| :: onn %coolbox
293+--------------| bound '>' {[hos=~sampel-palnet nom=%coolbox]}
294+--------------| %coolbox: see ~sampel-palnet hear
295+--------------| new > %coolbox
296+--------------| %coolbox: cap: cool messages only
297+--------------| %coolbox: fit: caps:Y unic:â
298+```
299+
300+###### Delete
301+
302+Syntax: `;delete %name 'optional reason'`
268303
269304Deletes a circle. If a reason is specified, that gets sent to all
270305subscribers before the circle gets deleted.
271306
272−###### `;depict %name 'description'`
307+To delete our example above:
308+
309+```
310+sampel-palnet:talk> ;delete %coolbox 'people sent uncool messages'
311+```
312+
313+###### Change Description
314+
315+Syntax: `;depict %name 'description'`
273316
274−Changes the description of circle `%name`.
317+Changes the description of an existing circle `%name`.
275318
276−###### `;filter %name [capitals] [unicode]`
319+For example:
320+
321+```
322+sampel-palnet:talk> ;depict %coolbox 'cool messages only. NO EXCEPTIONS.'
323+```
324+
325+###### Filter
326+
327+Syntax: `;filter %name [capitals] [unicode]`
277328
278329Configures the message filter for circle `%name`: whether to allow
279330capital and/or unicode characters. `y`/`&`/`true` for allowed,
280331`n`/`|`/`false` for disallowed.
281332
282−###### `;invite %name ~someone`
333+So, to allow capital letters and disallow unicode in the circle `%coolbox`:
283334
284−Invite someone into your circle `%name`. If they were previously banished,
335+```
336+sampel-palnet:talk> ;filter %coolbox & |
337+```
338+or
339+```
340+sampel-palnet:talk> ;filter %coolbox y n
341+```
342+
343+And we get the output:
344+
345+```
346+--------------| ;filter %coolbox & |
347+--------------| %coolbox: fit: caps:Y unic:n
348+```
349+
350+###### Invite
351+
352+Syntax: `;invite %name ~someone`
353+
354+Invites someone into your circle `%name`. If they were previously banished,
285355removes them from the blacklist.
286356Can also invite multiple ships at once, `~comma, ~separated`.
287357
288−###### `;banish %name ~someone`
358+For example:
359+
360+```
361+~sampel-palnet:talk> ;invite %coolbox ~lodleb-ritrul
362+```
363+
364+###### Banish
365+
366+Syntax: `;banish %name ~someone`
289367
290−Banish someone from your circle `%name`. If they were previously invited,
368+Removes someone from your circle `%name`. If they were previously invited,
291369removes them from the whitelist.
292370Can also banish multiple ships at once, `~comma, ~separated`.
293371
294−###### `;source %name ~other/circle`
372+###### Source
373+
374+Syntax: `;source %name ~other/circle`
295375
296376Adds `~other/circle` as a source for circle `%name`. This causes all
297377messages sent to `~other/circle` to also appear in `%name`.
298378
299−###### `;unsource %name ~other/circle`
379+For example:
380+
381+```
382+~sampel-palnet:talk> ;source %coolbox ~marzod/urbit-meta
383+```
384+
385+###### Unsource
386+
387+Syntax: `;unsource %name ~other/circle`
300388
301389Removes `~other/circle` as a source for circle `%name`.
302390
303−### Membership
391+For example:
392+
393+```
394+~sampel-palnet:talk> ;unsource %coolbox ~marzod/urbit-meta
395+```
396+
397+### Circle Membership
304398
305399If you have joined a circle, you can make this information publicly
306400available to help others find that circle as well.
307401
308−###### `;show ~some/circle`
402+###### Show Membership
403+
404+Syntax: `;show ~some/circle`
309405
310−Adds a circle to your public membership list.
406+Adds a circle to your public membership list on your Hall profile. Hall profiles
407+are not used yet.
311408
312−###### `;hide ~some/circle`
409+###### Hide Membership
313410
314−Removes a circle from your public membership list.
411+Syntax: `;hide ~some/circle`
412+
413+Removes a circle from your public membership list on your Hall profile. Hall
414+profiles are not used yet.
315415
316416### Status
317417
318−You'll see status notifications when people enter or leave stations
418+You'll see status notifications when people enter or leave circles you're
419+subscribed to.
420+
421+###### Notifications Off
319422
320−###### `;set quiet`
423+Syntax: `;set quiet`
321424
322425Turn off status (and config) notifications.
323426
324−###### `;unset quiet`
427+###### Notifications On
428+
429+Syntax: `;unset quiet`
325430
326431Turn on status (and config) notifications.
327432
328−###### `;who`
433+###### Who
434+
435+Syntax: `;who`
329436
330437List everyone in all your subscribed circles. Optionally specify a
331−specific circle to list members of just those.
438+specific circle to list members of just those: `;who ~some/circle`
332439
333−You'll see presence notifications when people enter or leave stations
334−you're subscribed to.
440+For example:
441+
442+```
443+~sampel-palnet:talk> ;who ~marzod/urbit-meta
444+```
335445
336−###### `;attend ~some/circle [presence]`
446+###### Attend
447+
448+Syntax: `;attend ~some/circle [presence]`
337449
338450Manually set your presence to show up as one of the following. (In the
339451future, a sufficiently advanced client can automatically set these for
@@ -344,21 +456,32 @@ you.)
344456- `idle` - inactive
345457- `gone` - not present
346458
347−###### `;name ~some/circle 'my handle'`
459+For example:
460+
461+```
462+~sampel-palnet:talk> ;attend ~marzod/urbit-meta idle
463+```
464+
465+###### Set Display Name
466+
467+Syntax: `;name ~some/circle 'my handle'`
348468
349469Set a handle ("name") for yourself in a specific circle. It will display
350470to users who have done `;set nicks`, but gets truncated if it's longer
351471than 14 characters.
352472
353−### Audience
473+## Audience
354474
355475An audience consists of one or more messaging targets. These can be
356476circles or ships. (In the latter case, it's secretly the `~ship/inbox`
357477circle.)
358478
359−### Circle glyphs
479+#### Circle Glyphs
360480
361−Glyphs are assigned by circle hash out of the following list
481+Glyphs are found at the end of your prompt to as a quick indicator of where
482+your messages will be sent.
483+
484+Glyphs are assigned by circle hash out of the following list:
362485
363486```
364487> = + - } ) , . " ' ^ $ % & @
@@ -367,19 +490,51 @@ Glyphs are assigned by circle hash out of the following list
367490Alphanumeric characters and `|#;:*~_` are reserved; all others (the
368491above list, and `\/!?({<`) can be manually assigned.
369492
370−###### `;bind + /urbit-test`
493+For example, `-` the glyph at the end of the prompt below might indicates that
494+messages sent from this prompt will go to some circle with that glyph:
495+
496+```
497+~sampel-palnet:talk-
498+```
499+
500+To see what circle is bound to a glyph, use the `;what` command followed by the
501+glyph in question. For example, to see `=`:
502+
503+```
504+~sampel-palnet:talk> ;what =
505+/urbit-meta
506+```
507+
508+Not every audience has a glyph, however. When the audience doesn't have a glyph,
509+such as in the case of direct-messaging a ship, we see their name at the end of
510+the prompt instead. Here we're talking directly to `~dannum-mitryl`:
511+
512+```
513+~sampel-palnet:talk[~dannum-mitryl]
514+```
515+
516+###### Bind
371517
372−Assigns the `+` glyph to `/urbit-test`.
518+Syntax: `;bind [glyph] /circle-name`
373519
374−###### `;unbind + /urbit-test`
520+Assigns the chosen glyph to a circle owned by your ship.
375521
376−Unassigns the `+` glyph from `/urbit-test`.
522+For example:
377523
378−To see what circle is bound to a glyph:
524+```
525+~sampel-palnet:talk> ;bind + /my-circle
526+```
527+
528+###### Unbind
529+
530+Syntax: `;unbind [glyph] /circle-name`
531+
532+Unassigns the chosen glyph from a circle owned by your ship.
533+
534+For example:
379535
380536```
381−;what +
382−/urbit-test
537+~sampel-palnet:talk> ;unbind + /my-circle
383538```
384539
385540### Prefixes
@@ -395,44 +550,39 @@ There are a few special-purpose glyphs:
395550- `;` - Posts to you and others (a multiparty conversation)
396551- `*` - Posts to a complex audience that doesn't directly include you.
397552
398−#### Prompt
399553
400−The audience you're sending to is always shown in your prompt. If
401−there's a glyph for it, it's shown as the glyph.
554+### Configuration
402555
403−Here we're talking to the station bound to `=`:
556+###### Set Audience
404557
405−```
406−~your-urbit:talk=
407−```
408−
409−Here we're talking directly to `~dannum-mitryl`:
558+`;~ship/circle`
410559
411−```
412−~your-urbit:talk[~dannum-mitryl]
413−```
560+Set audience to `~ship/circle`.
414561
415−#### Configuration
562+###### Set Audience by Glyph
416563
417−###### `;~urbit/circle`
564+Syntax: `;[glyph]`
418565
419−Set audience to `~urbit/circle`.
566+Set audience to the circle previously bound to the chosen glyph.
420567
421−###### `;=`
568+###### Set Audience to Ship
422569
423−Set audience to the station bound to the `=` glyph
570+syntax `;~ship`
424571
425−###### `;~dannum-mitryl`
572+Set audience to another ship.
426573
427−Set audience to `~dannum-mitryl` (a direct post).
574+###### Set Audience to Own Circle
428575
429−###### `;%circle`
576+Syntax: `;%circle`
430577
431578Set audience to a circle on your own ship
432579
433−###### `;~dannum-mitryl this is a private message`
580+###### Set Audience + Send Message
581+
582+Syntax: `;~dannum-mitryl this is a private message`
434583
435−Set the audience and send a post in the same line. This works for all of the above.
584+Set the audience and send a post in the same line. This works for all of the
585+above audience commands.
436586
437587Your audience is configured with regard to the following rules (in order):
438588
@@ -442,34 +592,48 @@ Your audience is configured with regard to the following rules (in order):
442592
443593### Local nicknames
444594
445−###### `;nick`
595+###### See Nicknames
596+
597+Syntax: `;nick`
446598
447599List all local nicknames.
448600
449−###### `;nick ~some-urbit`
601+###### Find Nickname
602+
603+Syntax: `;nick ~some-urbit`
604+
605+Look up a nickname using the known ship-name.
606+
607+###### Reverse Find Nickname
450608
451−Look up a nickname.
609+syntax: `;nick plato`
452610
453−###### `;nick plato`
611+Find a ship's name using its nickname.
454612
455−Search in reverse.
613+###### Set Nickname
456614
457−###### `;nick ~some-urbit plato`
615+Syntax: `;nick ~some-urbit plato`
458616
459−Create a nickname.
617+Create a new nickname.
460618
461−###### `;nick ~some-urbit ~`
619+###### Clear Nickname
620+
621+Syntax: `;nick ~some-urbit ~`
462622
463623Clear an assigned nickname.
464624
465−###### `;set nicks`
625+###### Display Nicks, Not Ship-Names
626+
627+Syntax: `;set nicks`
466628
467−Show nicknames instead of urbit names. If no local nickname is set, uses
629+Show nicknames instead of ship-names. If no local nickname is set, uses
468630that user's handle. If the user has no handle, just the urbit name.
469631
470−###### `;unset nicks`
632+###### Display Ship-Names, Not Nicks
633+
634+Syntax: `;unset nicks`
471635
472−Show urbit names instead of nicknames.
636+Show ship-names instead of nicknames.
473637
474638Nicknames and handles longer than 14 character will be truncated in
475639output. Nicknames are strictly local - like the names on entries in a
@@ -477,28 +641,40 @@ phonebook.
477641
478642### Miscellaneous configuration
479643
480−###### `;set showtime`
644+###### Show Timestamps
645+
646+Syntax: `;set showtime`
481647
482648Show the timestamp for each message.
483649
484−###### `;unset showtime`
650+###### Hide Timestamps
651+
652+Syntax: `;unset showtime`
485653
486654Stop showing the timestamp for each message.
487655
488−###### `;set timezone [+/-][hours]`
656+###### Change Time Zone
657+
658+Syntax: `;set timezone [+/-][hours]`
489659
490660Adjust the display of the timestamps to a specific timezone. Relative to UTC.
491661
492−###### `;set notify`
662+###### Sound Notification On
663+
664+Syntax: `;set notify`
493665
494666Emit a terminal bell sound if your six-syllable ship name is mentioned in
495667a message.
496668
497−###### `;unset notify`
669+###### Sound Notification Off
670+
671+Syntax `;unset notify`
498672
499673Do not notify when your ship name is mentioned.
500674
501−###### `;set width [number]`
675+###### Set Width
676+
677+Syntax: `;set width [number]`
502678
503679Set the rendering width of `:talk` to a specific number of characters.
504680(Minimum of 30.)