@@ -8,10 +8,9 @@
9# Messaging (Talk and Hall)
9# Messaging (Talk and Hall)
12Talk is the built-in frontend for the Urbit messaging and notifications
11Talk is the built-in frontend for the Urbit messaging and notifications
13protocol, Hall. Today we use Hall to chat and coordinate, but it's really
12protocol, 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.
16For the time being come join us in `/urbit-meta` by using the
15For the time being come join us in `/urbit-meta` by using the
17'quickstart' section below.
16'quickstart' section below.
@@ -22,26 +21,34 @@ Any Urbit can host one.
23Hall is a general purpose tool for both aggregating and publishing
22Hall is a general purpose tool for both aggregating and publishing
24streams of messages. Applications can use Hall as their transport
23streams 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,
26and so on. There are lots of things a distributed message protocol can
25and so on. There are lots of things a distributed message protocol can
27be used for that we haven't even thought of.
26be used for that we haven't even thought of.
29Here we'll be discussing how to operate the default CLI frontend, Talk,
28Here we'll be discussing how to operate the default CLI frontend, Talk,
30to send and receive messages. For a more in-depth look at Hall's internals,
29to 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).
33## Quickstart
32## Quickstart
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
36channel (`/urbit-meta`) and direct messages. Everyone is more than welcome
35channel (`/urbit-meta`) and direct messages. Everyone is more than welcome
37in `/urbit-meta`. It's the place to get help, ask questions and chat about
36in `/urbit-meta`. It's the place to get help, ask questions and chat about
38Urbit in general.
37Urbit in general.
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.
43+##### Joining a Channel
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.
44−To join `/urbit-meta`:
50+Let's join the `/urbit-meta` channel. Use `ctrl-x` to switch from Dojo to Talk.
47~your-urbit:talk> ;join /urbit-meta
54~your-urbit:talk> ;join /urbit-meta
@@ -55,23 +62,28 @@ You'll see something like:
55--------------| bound '=' {[hos=~binzod nom=%urbit-meta]}
62--------------| bound '=' {[hos=~binzod nom=%urbit-meta]}
56--------------| new = /urbit-meta
63--------------| new = /urbit-meta
57--------------| /urbit-meta: cap: For Urbit-related discussion. Politically
64--------------| /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.
59--------------| /urbit-meta: fit: caps:n unic:n
66--------------| /urbit-meta: fit: caps:n unic:n
60~your-urbit:talk=
67~your-urbit:talk=
70+Scrolling down your terminal window, you'll probably also see the playback of
71+previous `/urbit-meta` messages that you missed.
63Post a line to `/urbit-meta`:
73Post a line to `/urbit-meta`:
66~your-urbit:talk= Hello, world!
76~your-urbit:talk= Hello, world!
69−You'll see, echoed back at you:
79+You'll see your message printed below messages from others that came before it:
72~your-urbit= Hello, world!
82~your-urbit= Hello, world!
85+##### Direct Messaging
75To send a direct message to someone, first set your audience:
87To send a direct message to someone, first set your audience:
@@ -117,10 +129,6 @@ Use `;leave` to unsubscribe from a channel:
117~your-urbit:talk= ;leave /urbit-meta
129~your-urbit:talk= ;leave /urbit-meta
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`).
124The web UI ships as compiled JavaScript on your Urbit, but has its own
132The web UI ships as compiled JavaScript on your Urbit, but has its own
125source repo [here](https://github.com/urbit/talk).
133source repo [here](https://github.com/urbit/talk).
@@ -132,7 +140,9 @@ Last, let's create a channel we can invite some friends to:
133Now you can tell your friends to `;join ~your-urbit/my-channel`.
141Now you can tell your friends to `;join ~your-urbit/my-channel`.
135−## Manual
144+ ;div(id "manual"): Manual
137Hall's design is similar in spirit to
147Hall's design is similar in spirit to
138[NNTP](https://en.wikipedia.org/wiki/Network_News_Transfer_Protocol),
148[NNTP](https://en.wikipedia.org/wiki/Network_News_Transfer_Protocol),
@@ -149,16 +159,15 @@ general use.
151A post can be a variety of different data structures. Let's look at the
161A 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
162+ones you can use from within Talk: lines, URLs, Hoon and replies.
155−#### Lines
164+##### Lines
157A line is simply a string of text. Depending on the filtering rules set
166A line is simply a string of text. Depending on the filtering rules set
158by the circle's host, these may or may not include uppercase and Unicode
167by the circle's host, these may or may not include uppercase and Unicode
159characters.
168characters.
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).
164~your-urbit:talk= @sends a message.
173~your-urbit:talk= @sends a message.
@@ -170,7 +179,7 @@ will print as
170~your-urbit sends a message.
179~your-urbit sends a message.
173−#### URLs
182+##### URLs
175A URL is any valid URL.
184A URL is any valid URL.
@@ -178,7 +187,7 @@ A URL is any valid URL.
178~your-urbit:talk= https://example.com/
187~your-urbit:talk= https://example.com/
181−### Hoon
190+##### Hoon
183You can use Talk to evaluate Hoon code and share the result with everyone in a
192You can use Talk to evaluate Hoon code and share the result with everyone in a
184Hall circle. To do so, preface your Hoon with `#`.
193Hall circle. To do so, preface your Hoon with `#`.
@@ -194,7 +203,7 @@ will print as
197−### Replies
206+##### Replies
199To indicate what you're saying is in direct response to a specific
208To indicate what you're saying is in direct response to a specific
200message, select the message (see Activating Lines below) and type your
209message, select the message (see Activating Lines below) and type your
@@ -246,7 +255,7 @@ in reply to: ~your-urbit:
246That's my message!
255That's my message!
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,
250or if there's additional information available — as is the case with
259or if there's additional information available — as is the case with
251replies and attachments — activating the message will show you all the
260replies and attachments — activating the message will show you all the
@@ -256,7 +265,13 @@ with `;;`, and so on.
257### Creating and managing circles
266### Creating and managing circles
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.
259−###### `;create [type] %name 'description'`
274+Syntax: `;create [type] %name 'description'`
261Creates and joins a circle, where `[type]` is any of the following:
276Creates and joins a circle, where `[type]` is any of the following:
262- `channel`: public circle. Has a blacklist for write control.
277- `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:
264- `journal`: publicly readable, invite-only for writing.
279- `journal`: publicly readable, invite-only for writing.
265- `mailbox`: publicly writeable, can only be read by its host.
280- `mailbox`: publicly writeable, can only be read by its host.
282+Let's create an example mailbox:
285+sampel-palnet:talk> ;create mailbox %coolbox 'cool messages only'
288+Something like this should print:
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:â
267−###### `;delete %name 'optional reason'`
302+Syntax: `;delete %name 'optional reason'`
269Deletes a circle. If a reason is specified, that gets sent to all
304Deletes a circle. If a reason is specified, that gets sent to all
270subscribers before the circle gets deleted.
305subscribers before the circle gets deleted.
307+To delete our example above:
310+sampel-palnet:talk> ;delete %coolbox 'people sent uncool messages'
313+###### Change Description
272−###### `;depict %name 'description'`
315+Syntax: `;depict %name 'description'`
274−Changes the description of circle `%name`.
317+Changes the description of an existing circle `%name`.
322+sampel-palnet:talk> ;depict %coolbox 'cool messages only. NO EXCEPTIONS.'
276−###### `;filter %name [capitals] [unicode]`
327+Syntax: `;filter %name [capitals] [unicode]`
278Configures the message filter for circle `%name`: whether to allow
329Configures the message filter for circle `%name`: whether to allow
279capital and/or unicode characters. `y`/`&`/`true` for allowed,
330capital and/or unicode characters. `y`/`&`/`true` for allowed,
280`n`/`|`/`false` for disallowed.
331`n`/`|`/`false` for disallowed.
282−###### `;invite %name ~someone`
333+So, to allow capital letters and disallow unicode in the circle `%coolbox`:
336+sampel-palnet:talk> ;filter %coolbox & |
340+sampel-palnet:talk> ;filter %coolbox y n
343+And we get the output:
346+--------------| ;filter %coolbox & |
347+--------------| %coolbox: fit: caps:Y unic:n
352+Syntax: `;invite %name ~someone`
284−Invite someone into your circle `%name`. If they were previously banished,
354+Invites someone into your circle `%name`. If they were previously banished,
285removes them from the blacklist.
355removes them from the blacklist.
286Can also invite multiple ships at once, `~comma, ~separated`.
356Can also invite multiple ships at once, `~comma, ~separated`.
361+~sampel-palnet:talk> ;invite %coolbox ~lodleb-ritrul
288−###### `;banish %name ~someone`
366+Syntax: `;banish %name ~someone`
290−Banish someone from your circle `%name`. If they were previously invited,
368+Removes someone from your circle `%name`. If they were previously invited,
291removes them from the whitelist.
369removes them from the whitelist.
292Can also banish multiple ships at once, `~comma, ~separated`.
370Can also banish multiple ships at once, `~comma, ~separated`.
294−###### `;source %name ~other/circle`
374+Syntax: `;source %name ~other/circle`
296Adds `~other/circle` as a source for circle `%name`. This causes all
376Adds `~other/circle` as a source for circle `%name`. This causes all
297messages sent to `~other/circle` to also appear in `%name`.
377messages sent to `~other/circle` to also appear in `%name`.
382+~sampel-palnet:talk> ;source %coolbox ~marzod/urbit-meta
299−###### `;unsource %name ~other/circle`
387+Syntax: `;unsource %name ~other/circle`
301Removes `~other/circle` as a source for circle `%name`.
389Removes `~other/circle` as a source for circle `%name`.
394+~sampel-palnet:talk> ;unsource %coolbox ~marzod/urbit-meta
303−### Membership
397+### Circle Membership
305If you have joined a circle, you can make this information publicly
399If you have joined a circle, you can make this information publicly
306available to help others find that circle as well.
400available to help others find that circle as well.
402+###### Show Membership
308−###### `;show ~some/circle`
404+Syntax: `;show ~some/circle`
310−Adds a circle to your public membership list.
406+Adds a circle to your public membership list on your Hall profile. Hall profiles
312−###### `;hide ~some/circle`
409+###### Hide Membership
411+Syntax: `;hide ~some/circle`
314−Removes a circle from your public membership list.
413+Removes a circle from your public membership list on your Hall profile. Hall
414+profiles are not used yet.
316### Status
416### Status
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
421+###### Notifications Off
320−###### `;set quiet`
423+Syntax: `;set quiet`
322Turn off status (and config) notifications.
425Turn off status (and config) notifications.
427+###### Notifications On
324−###### `;unset quiet`
429+Syntax: `;unset quiet`
326Turn on status (and config) notifications.
431Turn on status (and config) notifications.
328−###### `;who`
435+Syntax: `;who`
330List everyone in all your subscribed circles. Optionally specify a
437List 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`
333−You'll see presence notifications when people enter or leave stations
440+For example:
334−you're subscribed to.
441+
443+~sampel-palnet:talk> ;who ~marzod/urbit-meta
336−###### `;attend ~some/circle [presence]`
448+Syntax: `;attend ~some/circle [presence]`
338Manually set your presence to show up as one of the following. (In the
450Manually set your presence to show up as one of the following. (In the
339future, a sufficiently advanced client can automatically set these for
451future, a sufficiently advanced client can automatically set these for
@@ -344,21 +456,32 @@ you.)
344- `idle` - inactive
456- `idle` - inactive
345- `gone` - not present
457- `gone` - not present
462+~sampel-palnet:talk> ;attend ~marzod/urbit-meta idle
465+###### Set Display Name
347−###### `;name ~some/circle 'my handle'`
467+Syntax: `;name ~some/circle 'my handle'`
349Set a handle ("name") for yourself in a specific circle. It will display
469Set a handle ("name") for yourself in a specific circle. It will display
350to users who have done `;set nicks`, but gets truncated if it's longer
470to users who have done `;set nicks`, but gets truncated if it's longer
351than 14 characters.
471than 14 characters.
353−### Audience
473+## Audience
355An audience consists of one or more messaging targets. These can be
475An audience consists of one or more messaging targets. These can be
356circles or ships. (In the latter case, it's secretly the `~ship/inbox`
476circles or ships. (In the latter case, it's secretly the `~ship/inbox`
359−### Circle glyphs
479+#### Circle Glyphs
481+Glyphs are found at the end of your prompt to as a quick indicator of where
482+your messages will be sent.
361−Glyphs are assigned by circle hash out of the following list
484+Glyphs are assigned by circle hash out of the following list:
364> = + - } ) , . " ' ^ $ % & @
487> = + - } ) , . " ' ^ $ % & @
@@ -367,19 +490,51 @@ Glyphs are assigned by circle hash out of the following list
367Alphanumeric characters and `|#;:*~_` are reserved; all others (the
490Alphanumeric characters and `|#;:*~_` are reserved; all others (the
368above list, and `\/!?({<`) can be manually assigned.
491above list, and `\/!?({<`) can be manually assigned.
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:
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 `=`:
504+~sampel-palnet:talk> ;what =
370−###### `;bind + /urbit-test`
505+/urbit-meta
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`:
513+~sampel-palnet:talk[~dannum-mitryl]
372−Assigns the `+` glyph to `/urbit-test`.
518+Syntax: `;bind [glyph] /circle-name`
374−###### `;unbind + /urbit-test`
520+Assigns the chosen glyph to a circle owned by your ship.
376−Unassigns the `+` glyph from `/urbit-test`.
522+For example:
378−To see what circle is bound to a glyph:
524+```
525+~sampel-palnet:talk> ;bind + /my-circle
530+Syntax: `;unbind [glyph] /circle-name`
532+Unassigns the chosen glyph from a circle owned by your ship.
381−;what +
537+~sampel-palnet:talk> ;unbind + /my-circle
385### Prefixes
540### Prefixes
@@ -395,44 +550,39 @@ There are a few special-purpose glyphs:
395- `;` - Posts to you and others (a multiparty conversation)
550- `;` - Posts to you and others (a multiparty conversation)
396- `*` - Posts to a complex audience that doesn't directly include you.
551- `*` - Posts to a complex audience that doesn't directly include you.
400−The audience you're sending to is always shown in your prompt. If
554+### Configuration
401−there's a glyph for it, it's shown as the glyph.
403−Here we're talking to the station bound to `=`:
556+###### Set Audience
405−```
558+`;~ship/circle`
409−Here we're talking directly to `~dannum-mitryl`:
411−```
560+Set audience to `~ship/circle`.
412−~your-urbit:talk[~dannum-mitryl]
415−#### Configuration
562+###### Set Audience by Glyph
417−###### `;~urbit/circle`
564+Syntax: `;[glyph]`
419−Set audience to `~urbit/circle`.
566+Set audience to the circle previously bound to the chosen glyph.
421−###### `;=`
568+###### Set Audience to Ship
423−Set audience to the station bound to the `=` glyph
570+syntax `;~ship`
425−###### `;~dannum-mitryl`
572+Set audience to another ship.
427−Set audience to `~dannum-mitryl` (a direct post).
574+###### Set Audience to Own Circle
429−###### `;%circle`
576+Syntax: `;%circle`
431Set audience to a circle on your own ship
578Set audience to a circle on your own ship
580+###### Set Audience + Send Message
433−###### `;~dannum-mitryl this is a private message`
582+Syntax: `;~dannum-mitryl this is a private message`
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.
437Your audience is configured with regard to the following rules (in order):
587Your audience is configured with regard to the following rules (in order):
@@ -442,34 +592,48 @@ Your audience is configured with regard to the following rules (in order):
443### Local nicknames
593### Local nicknames
445−###### `;nick`
597+Syntax: `;nick`
447List all local nicknames.
599List all local nicknames.
449−###### `;nick ~some-urbit`
603+Syntax: `;nick ~some-urbit`
605+Look up a nickname using the known ship-name.
607+###### Reverse Find Nickname
451−Look up a nickname.
609+syntax: `;nick plato`
453−###### `;nick plato`
611+Find a ship's name using its nickname.
455−Search in reverse.
613+###### Set Nickname
457−###### `;nick ~some-urbit plato`
615+Syntax: `;nick ~some-urbit plato`
459−Create a nickname.
617+Create a new nickname.
619+###### Clear Nickname
461−###### `;nick ~some-urbit ~`
621+Syntax: `;nick ~some-urbit ~`
463Clear an assigned nickname.
623Clear an assigned nickname.
625+###### Display Nicks, Not Ship-Names
465−###### `;set nicks`
627+Syntax: `;set nicks`
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
468that user's handle. If the user has no handle, just the urbit name.
630that user's handle. If the user has no handle, just the urbit name.
632+###### Display Ship-Names, Not Nicks
470−###### `;unset nicks`
634+Syntax: `;unset nicks`
472−Show urbit names instead of nicknames.
636+Show ship-names instead of nicknames.
474Nicknames and handles longer than 14 character will be truncated in
638Nicknames and handles longer than 14 character will be truncated in
475output. Nicknames are strictly local - like the names on entries in a
639output. Nicknames are strictly local - like the names on entries in a
@@ -477,28 +641,40 @@ phonebook.
478### Miscellaneous configuration
642### Miscellaneous configuration
644+###### Show Timestamps
480−###### `;set showtime`
646+Syntax: `;set showtime`
482Show the timestamp for each message.
648Show the timestamp for each message.
650+###### Hide Timestamps
484−###### `;unset showtime`
652+Syntax: `;unset showtime`
486Stop showing the timestamp for each message.
654Stop showing the timestamp for each message.
656+###### Change Time Zone
488−###### `;set timezone [+/-][hours]`
658+Syntax: `;set timezone [+/-][hours]`
490Adjust the display of the timestamps to a specific timezone. Relative to UTC.
660Adjust the display of the timestamps to a specific timezone. Relative to UTC.
662+###### Sound Notification On
492−###### `;set notify`
664+Syntax: `;set notify`
494Emit a terminal bell sound if your six-syllable ship name is mentioned in
666Emit a terminal bell sound if your six-syllable ship name is mentioned in
495a message.
667a message.
669+###### Sound Notification Off
497−###### `;unset notify`
671+Syntax `;unset notify`
499Do not notify when your ship name is mentioned.
673Do not notify when your ship name is mentioned.
501−###### `;set width [number]`
677+Syntax: `;set width [number]`
503Set the rendering width of `:talk` to a specific number of characters.
679Set the rendering width of `:talk` to a specific number of characters.
504(Minimum of 30.)
680(Minimum of 30.)