doc/UserGuide.txt in sup-0.0.4 vs doc/UserGuide.txt in sup-0.0.5

- old
+ new

@@ -1,54 +1,212 @@ Welcome to Sup! Here's how to actually use it. -To get started, just run 'sup'. Assuming this is your first time, -you'll be confronted with a mostly blank screen, and a little message -at the bottom telling you that you have no messages. That's because -Sup doesn't have any messages in its index. In order to add messages, -Sup needs to have some "sources" from which to load messages. +First, try running 'sup'. Assuming this is your first time, you'll be +confronted with a mostly blank screen, and a notice at the bottom that +you have no new messages. That's because Sup doesn't have any messages +in its index yet, and has no idea where to look for them anyways. If you want to play around a little at this point, you can press 'b' to cycle between buffers and 'x' to kill a buffer. There's probably not too much interesting there, but there's a log buffer with some cryptic messages. You can also press '?' at any point to get a list of keyboard commands, but in the absense of any email, these will be -pretty useless. When you're done, press 'q' to quit. +mostly useless. When you're bored, press 'q' to quit. -Now let's add a source to Sup. Run sup-import with a URI pointing to -an email source. The URI should be of the form: +We need to add some messages to Sup. In order for Sup to know about a +message, it must be in the index. In order for Sup to load a message +into the index, it must know about the "source" in which it +resides. Sup stores all information necessary for search, and all +state we have about a message, in the index, but doesn't duplicate the +actual contents of the message itself. So when you search for messages +or view your inbox, Sup just talks to the index (stored locally on +disk), but when you view a message, Sup must request it from the +source. + +So let's tell Sup about some sources. Run 'sup-import' with a URI +pointing to an email source. The URI should be of the form: - mbox://path/to/a/filename, for an mbox file on disk. (You can also just provide the filename). - imap://imap.server/folder or imaps://secure.imap.server/folder for - an IMAP server. + an IMAP folder. (Leave the folder blank for INBOX.) - mbox+ssh://remote.machine/path/to/a/filename for a remote mbox file. -Note: sup-import tries to be smart about setting the labels on - messages that it adds (including the special labels "unread" and - "inbox"). There are options that control this behavior, and it's - worth taking a look at the output of sup-import --help to make - sure that you don't end up with 1000 new messages that you've - actually already read. +Before you actually import messages, you need to decide whether you +want them to be archived or not. An archived message will not show up +in your inbox. (Your inbox in Sup is, by definition, the set of all +all non-archived messages). If you specify --force-archive, messages +imported at *this* time will be archived, but new messages will go to +your inbox. If you specify --archive, messages imported at *any* time +will be automatically archived. (This is useful for sources that +contain high-traffic mailing lists that you don't want "polluting" +your inbox.) -If sup-import requires a username and password for the source, it will -prompt you for one. Either way, it will start loading messages from -that source into the index. Depending on the size of the source, this -may take some time. Don't worry! This is a one-time step, and all the -computation done now makes operating on the index faster. +Typically you'll want to specify --archive for every source you import +except your actual inbox. You can also force all messages to be marked +as read; run sup-import --help for details. The default is to preserve +the read/unread status from the source. +Now run sup-import to add the source. If it requires a username and +password for the source, it will prompt you. Either way, it will add +the sources to Sup, and immediately start loading messages from them +into the index. Depending on the size of the source, this may take a +while. Don't panic! It's a one-time process. + Now, before we run 'sup' again, take a moment to edit your ~/.sup/config.yaml file. Replace "Your Name Here" with your name, "your.email.here@domain.tld" with your email address, and fill in your .signature file if you choose. You can also set the default editor. -Now run 'sup'. You should messages being loaded into your "inbox!" -There are two things that are worth understanding at this point. -First, Sup does not actually use folders. Instead, messages can have -any number of labels applied to them. Rather than viewing a folder, -you view the results of a search. So your inbox is simply the set of -messages that have the 'inbox' label applied to them. +We're finally ready to run 'sup'. You should see the most recent +loaded messages appear in your inbox. Congratulations, you've got Sup +working! -Second, Sup groups together messages into threads. You rarely operate -on an individual message in Sup. +If you're coming from the world of traditional email, there are a +couple differences you should be aware of at this point. First, Sup +does not use folders. Instead, you organize and find messages by a +combination of search and labels (knowns as 'tags' everywhere else in +the world). I like to say that 95% of the functionality of folders is +superceded by a quick, easy-to-access, and powerful search mechanism, +and the other 5% by labels. (The Sup statement of philosophy has a +little more on this.) -Press enter to view a thread. +Search and labels are an integral part of Sup because in Sup, rather +than viewing the contents of a folder, you view the results of a +search. I mentioned above that your inbox is, by definition, the set +of all messages that aren't archived. This means that your inbox is, +in fact, the result of the search for "all messages without the label +'archive'". It's actually slightly more complicated---we omit killed, +deleted and spam messages as well. -To be continued... +So you could replicate the folder paradigm easily under this scheme, +by giving each message exactly one label and only viewing the results +of simple searches for those labels. But you'd quickly find out that +life can be easier than that if you just trust the search engine, and +use labels judiciously for things that are too hard to find with +search. + +But enough chit-chat! Let's take a look at your inbox. You'll see that +Sup groups messages together into threads: each line in the inbox is a +thread, and the number in parentheses is the number of messages in +that thread. (If there's no number in parens, it means there's just +one message.) In Sup, you rarely operate on an individual message. The +idea is that you rarely want to operate on a message independent of +its context; you typically want to view, archive, kill, or label all +the messages in a thread at one time. + +Use the up and down arrows to highlight a thread. ('j' and 'k' do the +same thing, and 'J' and 'K' will scroll the whole window. Even the +left and right arrow keys work!) By default, Sup only loads as many +threads as it takes to fill the window; if you'd like to load more, +press 'M'. You can hit tab to cycle between only threads with new +messages. + +Highlight a thread and press enter to view it. You'll notice that all +messages in the thread are displayed together, layed out graphically +by their relationship to each other (replies are nested under +parents). By default, only the new messages in a thread are expanded, +and the others are hidden. You can toggle an individual message's +state by highlighting a green line and pressing enter. You can use 'E' +to expand or collapse all messages or 'N' to expand only the new +messages. You'll also notice that Sup hides quoted text and +signatures. If you highlight a particular hidden chunk, you can press +enter to expand it, or you can press 'o' to toggle every hidden chunk +in a particular message. (Don't worry about remembering all these +things---you can hit '?' to see the full list of keyboard commands at +any point.) + +A few other useful commands while viewing a thread. Press 'd' to +toggle a detailed header fpr a message. If you've scrolled too far to +the right, press '[' to jump all the way to the left. Finally, you can +press 'n' and 'p' to jump forward and backward between open +messages. (I find that very useful!) + +Now press 'x' to kill the thread view buffer. You should see the inbox +again. If you don't, you can cycle through the buffers by pressing +'b', or you can press 'A' to see a list of all buffers and simply +select the inbox. + +There are many operations you can perform on threads beyond viewing +them. To archive a thread, press 'a'. The thread will disappear from +your inbox, but will still appear in search results. If someone +replies an archived thread, it will reappear in your inbox. To kill a +thread, press '&'. Killed threads will never come back to your inbox, +even if people reply, but will still be searchable. (This is useful +for those interminable threads that you really have no interest in, +but which seem to pop up on every mailing list.) + +If a thread is spam, press 'S'. It will disappear and won't come +back. It won't even appear in search results (unless you explicitly +search for spam.) + +You can also star a thread by pressing '*'. Starred threads are +displayed with a little yellow asterix next to them, but otherwise +have no special semantics. (But you can also search for them +easily---we'll see how in a moment). + +To edit the labels for (all the messages in) a thread, press 'l'. Type +in the labels as a sequence of space-separated words. To cancel the +input, press Ctrl-G. + +Many of these operations can be applied to a group of threads. Press +'t' to tag a thread. Tag a couple, then press ';' to apply the next +command to the set of threads. ';t', of course, will untag all tagged +messages. + +Ok, let's try using labels and search. Press 'L' to bring up a list of +all the labels you've ever used, along with some special labels +(Draft, Starred, Sent, Spam, etc.). Highlight a label and press enter +to view all the messages with that label. + +What you just did was actually a specific search. For a general +search, press "/". Now type in your query (again, Ctrl-G to cancel at +any point.) You can just type in arbitrary text, which will be matched +on a per-word basis against the bodies of all email in the index, or +you can make use of the full Ferret query syntax: + +- Phrasal queries using double-quotes, e.g.: "three contiguous words" +- Queries against a particular field using <field name>:<query>, + e.g.: label:ruby-talk, or from:matz@ruby-lang.org. (Fields include: + body, from, to, and subject.) +- Force occurrence and non-occurrence using + and -, e.g. +label:spam, + or -body:"hot soup" + +You can combine those all together. For example: + +label:ruby-talk +subject:\[ANN\] -rails + +Play around with the search, and see the Ferret documentation for +details on more sophisticated queries (date ranges, "within n words", +etc.) + +At this point, you're well on your way to figuring out all the cool +things Sup can do. By repeated applications of the '?' key, see if you +can figure out how to: + - List some recent contacts + - Easily search for all mail from a recent contact + - Easily search for all mail from several recent contacts! + - Add someone to your address book + - Postpone a message (i.e., save a draft) + - Quickly re-edit a just-saved draft message + - View the raw header of a message + - Star an individual message, not just a thread + +There's one last thing to be aware of when using Sup: how it interacts +with other email programs. Sup stores data about messages in the +index---information necessary for searching, and message state---but +doesn't duplicate the message contents themselves. The messages remain +on the source. If the index and the source every fall out of sync, +e.g. due to another email client modifying the source, then Sup will +be unable to operate on that source. + +For example, for mbox files, Sup stores a byte offset into the file +for each message. If a message deleted from that file by another +client, or even marked as read (yeah, mbox sucks), all succeeding +offsets will be wrong. + +That's the bad news. The good news is that Sup is fairly good at being +able to detect this type of situation, and fixing it is just a matter +of running sup-import --rebuild on the source. Sup will even tell you +how to invoke sup-import when it detects a problem. This is a +complication you will almost certainly run in to if you use both Sup +and another MUA on the same source, so it's good to be aware of it. + +Have fun, and let me know if you have any problems. --William