aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--Makefile6
-rw-r--r--doc/aerc-tutorial.7.scd143
-rw-r--r--widgets/account-wizard.go22
4 files changed, 170 insertions, 2 deletions
diff --git a/.gitignore b/.gitignore
index 90e16243..426f49a0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,3 +5,4 @@ log
raw.log
*.1
*.5
+*.7
diff --git a/Makefile b/Makefile
index 6c9963d4..03dd7c37 100644
--- a/Makefile
+++ b/Makefile
@@ -7,11 +7,15 @@ aerc:
%.5: doc/%.5.scd
scdoc < $< > $@
+%.7: doc/%.7.scd
+ scdoc < $< > $@
+
DOCS := \
aerc.1 \
aerc-config.5 \
aerc-imap.5 \
- aerc-smtp.5
+ aerc-smtp.5 \
+ aerc-tutorial.7
all: aerc $(DOCS)
diff --git a/doc/aerc-tutorial.7.scd b/doc/aerc-tutorial.7.scd
new file mode 100644
index 00000000..793e0256
--- /dev/null
+++ b/doc/aerc-tutorial.7.scd
@@ -0,0 +1,143 @@
+aerc-tutorial(7)
+
+# NAME
+
+aerc - the world's best email client
+
+# INTRODUCTION
+
+Welcome to aerc! This tutorial will guide you through your first steps in using
+the client. This tutorial is a man page - you can read it again later with
+*:help tutorial* from aerc, or *man aerc-tutorial* from your terminal.
+
+First, let's introduce some basic keybindings. For convention, we'll use *<C-p>*
+to represent Ctrl+p, which matches the convention used for writing keybindings
+for aerc.
+
+*C-n*
+ Cycles to the next tab
+
+*C-p*
+ Cycles to the previous tab
+
+Try using these now to switch between your message list and the tutorial. In
+your message list, we use vim-style keys to get around.
+
+*k*, *j*
+ Scrolls up and down between messages
+
+*<C-u>*, *<C-d>*
+ Scrolls half a page up or down
+
+*g*, *G*
+ Selects the first or last message, respectively
+
+*K*, *J*
+ Switches between folders in the sidebar
+
+*<Enter>*
+ Opens the selected message
+
+# THE MESSAGE VIEWER
+
+Press *<Enter>* to open a message. By default, the message viewer will display
+your message using *less*(1). This should also have familiar, vim-like
+keybindings for scrolling around in your message.
+
+Multipart messages (messages with attachments, or messages with several
+alternative formats) show a part selector on the bottom of the message viewer.
+
+*<C-k>*, *<C-j>*
+ Cycle between parts of a multipart message
+
+*q*
+ Close the message viewer
+
+# COMPOSING MESSAGES
+
+Return to the message list by pressing *q* to dismiss the message viewer. Once
+there, let's compose a message.
+
+*C*
+ Compose a new message
+
+*rr*
+ Reply to a message
+
+*rq*
+ Reply to a message, and pre-fill the editor with a quoted version of the
+ message being replied to
+
+*Rr*
+ Reply-all to a message
+
+*Rq*
+ Reply-all to a message, and pre-fill the editor with a quoted version of the
+ message being replied to
+
+For now, let's use *C* to compose a new message. The message composer will
+appear. You should see To, From, and Subject lines, as well as your *$EDITOR*.
+You can use *<Tab>* or *<C-j>* and *<C-k>* to cycle between these fields (tab
+won't cycle between fields once you enter the editor, but *<C-j>* and *<C-k>*
+will).
+
+Let's send an email to yourself. Note that the To and From headers only accept
+RFC 5322 addresses, e.g. *John Doe <john@example.org>*, or simply
+*<john@example.org>*. Go ahead and fill out an email (to yourself, perhaps?),
+then close the editor.
+
+The message review screen is shown next. You have a chance now to revise the
+email before it's sent. Press *y* to send the email if it looks good.
+
+# USING THE TERMINAL
+
+aerc comes with an embedded terminal, which you've already used to view and edit
+emails. We can also use this for other purposes, such as referencing a git
+repository while reviewing a patch. From the message list, we can use the
+following keybindings to open a terminal:
+
+*<C-t>*
+ Opens a new terminal tab, running your shell
+
+*$*, *!*
+ Prompts for a command to run, then opens a new terminal tab running that
+ command
+
+*|*
+ Prompts for a command to run, then pipes the selected email into that
+ command and displays the result on a new terminal tab
+
+Try pressing *$* and entering "top". You can also use the *:cd* command to
+change aerc's working directory, and the directory in which new terminals run.
+Use *:pwd* to see it again if you're not sure where you are.
+
+# ADDITIONAL NOTES
+
+## COMMANDS
+
+Every keybinding is ultimately bound to an aerc command. You can also summon the
+command line by pressing ':', then entering one of these commands. See *aerc*(1)
+or *:help* for a full list of commands.
+
+## MESSAGE FILTERS
+
+When displaying messages in the message viewer, aerc will pipe them through a
+_message filter_ first. This allows you to decode messages in non-plaintext
+formats, add syntax highlighting, etc. aerc ships with a few default filters:
+
+- Emails which begin with "[PATCH" will be piped into a filter for rendering
+ git-format-patch and hg export emails.
+- text/html is rendered with w3m in a network sandbox
+- text/\* is rendered with a simple filter for coloring quoted text
+
+## CUSTOMIZING AERC
+
+Aerc is highly customizable. Review *aerc-config*(5) (or use *:help config*) to
+learn more about how to add custom keybindings, install new message filters,
+change its appearance and behavior, and so on.
+
+# AUTHORS
+
+Maintained by Drew DeVault <sir@cmpwn.com>, who is assisted by other open
+source contributors. For more information about aerc development, see
+https://git.sr.ht/~sircmpwn/aerc.
diff --git a/widgets/account-wizard.go b/widgets/account-wizard.go
index 7ed9a62c..aa68ed79 100644
--- a/widgets/account-wizard.go
+++ b/widgets/account-wizard.go
@@ -5,6 +5,7 @@ import (
"fmt"
"net/url"
"os"
+ "os/exec"
"path"
"strings"
"time"
@@ -451,6 +452,7 @@ func (wizard *AccountWizard) finish(tutorial bool) {
sec, _ = file.NewSection(wizard.accountName.String())
sec.NewKey("source", wizard.imapUrl.String())
sec.NewKey("outgoing", wizard.smtpUrl.String())
+ sec.NewKey("default", "INBOX")
if wizard.smtpMode == SMTP_STARTTLS {
sec.NewKey("smtp-starttls", "yes")
}
@@ -472,6 +474,7 @@ func (wizard *AccountWizard) finish(tutorial bool) {
account := config.AccountConfig{
Name: sec.Name(),
+ Default: "INBOX",
From: sec.Key("from").String(),
Source: sec.Key("source").String(),
Outgoing: sec.Key("outgoing").String(),
@@ -492,7 +495,24 @@ func (wizard *AccountWizard) finish(tutorial bool) {
wizard.aerc.NewTab(view, account.Name)
if tutorial {
- // TODO: Open tutorial
+ name := "aerc-tutorial"
+ if _, err := os.Stat("./aerc-tutorial.7"); !os.IsNotExist(err) {
+ // For development
+ name = "./aerc-tutorial.7"
+ }
+ term, err := NewTerminal(exec.Command("man", name))
+ if err != nil {
+ wizard.errorFor(nil, err)
+ return
+ }
+ wizard.aerc.NewTab(term, "Tutorial")
+ term.OnClose = func(err error) {
+ wizard.aerc.RemoveTab(term)
+ if err != nil {
+ wizard.aerc.PushStatus(" "+err.Error(), 10*time.Second).
+ Color(tcell.ColorDefault, tcell.ColorRed)
+ }
+ }
}
wizard.aerc.RemoveTab(wizard)