| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Make the Completer interface accept a context.Context. Provide a
cancellation feature on text input tab completion to cancel an inflight
completion command. This is particularly useful for address book
completion if the user has specified a network-accessing command, eg
carddav-query. The command is started according to the completion delay,
but is cancellable if another request comes in. We also check for
cancellation after the request is complete to ensure we only show valid
completion results.
Changelog-changed: Tab completions for text fields are run
asynchronously. In-flight requests are cancelled when new input
arrives.
Signed-off-by: Tim Culverhouse <tim@timculverhouse.com>
Acked-by: Robin Jarry <robin@jarry.cc>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Use go-opt v2 new completion API which returns items descriptions along
with their text values.
Display the descriptions after the items separated by two spaces. Wrap
the descriptions in parentheses to better indicate that they are not
part of the completion choices. Limit the description length to 80
characters to avoid display issues.
Add a new style object completion_description in stylesets. By default,
the object will be rendered with a dimmed terminal attribute. Update all
stylesets and documentation accordingly.
Implements: https://todo.sr.ht/~rjarry/aerc/271
Link: https://git.sr.ht/~rjarry/go-opt/commit/ebeb82538395a
Changelog-added: Command completion now displays descriptions next
to completion items.
Changelog-added: New `completion_description` style object in style
sets used for rendering completion item descriptions.
Signed-off-by: Robin Jarry <robin@jarry.cc>
Tested-by: Bojan Gabric <bojan@bojangabric.com>
Tested-by: Jason Cox <me@jasoncarloscox.com>
Acked-by: Tim Culverhouse <tim@timculverhouse.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When an error occurs during the opening of a message because its
contents cannot be parsed, the PartSwitcher object is left to nil and
the err field is set to the reported error.
This defers the error reporting after the viewer tab is displayed but it
is not handled in all sub functions which assume that switcher cannot be
nil.
Error: runtime error: invalid memory address or nil pointer dereference
git.sr.ht/~rjarry/aerc/app.(*PartSwitcher).Show(...)
/build/aerc/src/aerc/app/partswitcher.go:77
git.sr.ht/~rjarry/aerc/app.(*MessageViewer).Show(...)
/build/aerc/src/aerc/app/msgviewer.go:409
git.sr.ht/~rjarry/aerc/lib/ui.(*Tabs).selectPriv(...)
/build/aerc/src/aerc/lib/ui/tab.go:181
git.sr.ht/~rjarry/aerc/lib/ui.(*Tabs).Add(...)
/build/aerc/src/aerc/lib/ui/tab.go:75
git.sr.ht/~rjarry/aerc/app.(*Aerc).NewTab(...)
/build/aerc/src/aerc/app/aerc.go:511
git.sr.ht/~rjarry/aerc/app.NewTab(...)
/build/aerc/src/aerc/app/app.go:61
git.sr.ht/~rjarry/aerc/commands/account.ViewMessage.Execute.func1(...)
/build/aerc/src/aerc/commands/account/view.go:71
git.sr.ht/~rjarry/aerc/lib.NewMessageStoreView.func1(...)
/build/aerc/src/aerc/lib/messageview.go:80
git.sr.ht/~rjarry/aerc/lib.NewMessageStoreView(...)
/build/aerc/src/aerc/lib/messageview.go:124
git.sr.ht/~rjarry/aerc/commands/account.ViewMessage.Execute(...)
/build/aerc/src/aerc/commands/account/view.go:52
git.sr.ht/~rjarry/aerc/commands.ExecuteCommand(...)
/build/aerc/src/aerc/commands/commands.go:205
main.execCommand(...)
Remove that private err field and return an explicit error when the
message cannot be opened to enforce handling of the error by the caller.
When the msg argument is nil (only used in split viewer), return an
empty message viewer object and ensure that all code paths that read the
switcher or msg fields perform a nil check before accessing it.
Link: https://lists.sr.ht/~rjarry/aerc-devel/%3C12c465e4-b733-4b15-b4b0-62f87429fdf7@gmail.com%3E
Link: https://lists.sr.ht/~rjarry/aerc-devel/%3C2C55CF50-A636-46E5-9BA8-FE60A2303ECA@proton.me%3E
Link: https://lists.sr.ht/~rjarry/aerc-devel/%3CD51PEB6OMNDT.1KVSX0UCNL2MB@posteo.de%3E
Reported-by: Benjamin Braun <ben.braun@posteo.de>
Reported-by: Filip <filip.sh@proton.me>
Reported-by: Sarthak Bhan <sbstratos79@gmail.com>
Signed-off-by: Robin Jarry <robin@jarry.cc>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Add a drop-down (quake-mode) terminal which is a persistent terminal
session that overlays aerc at the top and can be toggled on or off.
Enable quake mode by setting [General].enable-quake-mode=true.
The height of the drop-down terminal can be set with
[ui].quake-terminal-height (default: 20).
Toggling is hardcoded to the F1 key. Note that this key should not be
used in your key bindings when you enable Quake mode.
Signed-off-by: Koni Marti <koni.marti@gmail.com>
Tested-by: Inwit <inwit@sindominio.net>
Acked-by: Robin Jarry <robin@jarry.cc>
|
|
|
|
|
|
|
|
|
| |
Ensure not to collapse any folder when dirlist-collapse=0.
Fixes: 73dc39c6ee08 ("treewide: replace uint32 uids with opaque strings")
Reported-by: Tim Culverhouse <tim@timculverhouse.com>
Signed-off-by: Robin Jarry <robin@jarry.cc>
Tested-by: Tim Culverhouse <tim@timculverhouse.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
golangci-lint 1.56 does not work with go 1.23. It causes obscure errors:
[linters_context/goanalysis] buildir: panic during analysis:
Cannot range over: func(yield func(K, V) bool), goroutine 4743 [running]: runtime/debug.Stack()
/usr/lib/go/src/runtime/debug/stack.go:26 +0x5e
github.com/golangci/golangci-lint/pkg/golinters/goanalysis.(*action).analyzeSafe.func1()
/home/build/go/pkg/mod/github.com/golangci/golangci-lint@v1.56.1/pkg/golinters/goanalysis/runner_action.go:104 +0x5a
panic({0x164b260?, 0xc00669b4a0?})
/usr/lib/go/src/runtime/panic.go:785 +0x132
honnef.co/go/tools/go/ir.(*builder).rangeStmt(0xc000051910, 0xc00a29cf00, 0xc009bf55c0, 0x0, {0x1af1960, 0xc009bf55c0})
/home/build/go/pkg/mod/honnef.co/go/tools@v0.4.6/go/ir/builder.go:2214 +0x894
honnef.co/go/tools/go/ir.(*builder).stmt(0xc000051910, 0xc00a29cf00, {0x1af6970?, 0xc009bf55c0?})
/home/build/go/pkg/mod/honnef.co/go/tools@v0.4.6/go/ir/builder.go:2427 +0x20a
honnef.co/go/tools/go/ir.(*builder).stmtList(...)
/home/build/go/pkg/mod/honnef.co/go/tools@v0.4.6/go/ir/builder.go:847
honnef.co/go/tools/go/ir.(*builder).stmt(0xc000051910, 0xc00a29cf00, {0x1af6880?, 0xc004f52ed0?})
/home/build/go/pkg/mod/honnef.co/go/tools@v0.4.6/go/ir/builder.go:2385 +0x1415
honnef.co/go/tools/go/ir.(*builder).buildFunction(0xc000051910, 0xc00a29cf00)
/home/build/go/pkg/mod/honnef.co/go/tools@v0.4.6/go/ir/builder.go:2497 +0x417
honnef.co/go/tools/go/ir.(*builder).buildFuncDecl(0xc000051910, 0xc00622eea0, 0xc004f52f00)
/home/build/go/pkg/mod/honnef.co/go/tools@v0.4.6/go/ir/builder.go:2534 +0x189
honnef.co/go/tools/go/ir.(*Package).build(0xc00622eea0)
/home/build/go/pkg/mod/honnef.co/go/tools@v0.4.6/go/ir/builder.go:2638 +0xb46
sync.(*Once).doSlow(0xc009b81260?, 0xc009bf5bc0?)
/usr/lib/go/src/sync/once.go:76 +0xb4
sync.(*Once).Do(...)
/usr/lib/go/src/sync/once.go:67
honnef.co/go/tools/go/ir.(*Package).Build(...)
/home/build/go/pkg/mod/honnef.co/go/tools@v0.4.6/go/ir/builder.go:2556
honnef.co/go/tools/internal/passes/buildir.run(0xc000cf61a0)
/home/build/go/pkg/mod/honnef.co/go/tools@v0.4.6/internal/passes/buildir/buildir.go:86 +0x18b
github.com/golangci/golangci-lint/pkg/golinters/goanalysis.(*action).analyze(0xc002d77d70)
/home/build/go/pkg/mod/github.com/golangci/golangci-lint@v1.56.1/pkg/golinters/goanalysis/runner_action.go:190 +0x9cd
github.com/golangci/golangci-lint/pkg/golinters/goanalysis.(*action).analyzeSafe.func2()
/home/build/go/pkg/mod/github.com/golangci/golangci-lint@v1.56.1/pkg/golinters/goanalysis/runner_action.go:112 +0x17
github.com/golangci/golangci-lint/pkg/timeutils.(*Stopwatch).TrackStage(0xc0007a5c70, {0x1859190, 0x7}, 0xc001c28f48)
/home/build/go/pkg/mod/github.com/golangci/golangci-lint@v1.56.1/pkg/timeutils/stopwatch.go:111 +0x44
github.com/golangci/golangci-lint/pkg/golinters/goanalysis.(*action).analyzeSafe(0xc00212f680?)
/home/build/go/pkg/mod/github.com/golangci/golangci-lint@v1.56.1/pkg/golinters/goanalysis/runner_action.go:111 +0x6e
github.com/golangci/golangci-lint/pkg/golinters/goanalysis.(*loadingPackage).analyze.func2(0xc002d77d70)
/home/build/go/pkg/mod/github.com/golangci/golangci-lint@v1.56.1/pkg/golinters/goanalysis/runner_loadingpackage.go:80 +0xa5
created by github.com/golangci/golangci-lint/pkg/golinters/goanalysis.(*loadingPackage).analyze in goroutine 3468
/home/build/go/pkg/mod/github.com/golangci/golangci-lint@v1.56.1/pkg/golinters/goanalysis/runner_loadingpackage.go:75 +0x1e9
Update golangci-lint to 1.61.0 that works with go 1.23. It has new
checkers that report errors that we need to fix:
lib/crypto/gpg/gpgbin/gpgbin.go:226:22: printf: non-constant format string in call to fmt.Errorf (govet)
return fmt.Errorf(strings.TrimPrefix(line, "[GNUPG:] "))
^
worker/imap/observer.go:142:21: printf: non-constant format string in call to fmt.Errorf (govet)
Error: fmt.Errorf(errMsg),
^
app/dirlist.go:409:5: S1009: should omit nil check; len() for []string is defined as zero (gosimple)
if dirlist.dirs == nil || len(dirlist.dirs) == 0 {
^
app/dirtree.go:181:5: S1009: should omit nil check; len() for []*git.sr.ht/~rjarry/aerc/worker/types.Thread is defined as zero (gosimple)
if dt.list == nil || len(dt.list) == 0 || dt.countVisible(dt.list) < y+dt.Scroll() {
^
app/authinfo.go:30:34: printf: non-constant format string in call to (*git.sr.ht/~rjarry/aerc/lib/ui.Context).Printf (govet)
ctx.Printf(0, 0, defaultStyle, text)
^
app/authinfo.go:34:27: printf: non-constant format string in call to (*git.sr.ht/~rjarry/aerc/lib/ui.Context).Printf (govet)
ctx.Printf(0, 0, style, text)
^
app/authinfo.go:62:34: printf: non-constant format string in call to (*git.sr.ht/~rjarry/aerc/lib/ui.Context).Printf (govet)
x += ctx.Printf(x, 0, style, text)
^
Pretty much all of these errors are us passing non-const format strings
to various methods. In C land, this is a large security issue. I would
assume the same stands in Go. Thank you golangci-lint!
Link: https://builds.sr.ht/~rjarry/job/1332376#task-validate-500
Signed-off-by: Tristan Partin <tristan@partin.io>
Acked-by: Robin Jarry <robin@jarry.cc>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Add a new models.UID type (an alias to string). Replace all occurrences
of uint32 being used as message UID or thread UID with models.UID.
Update all workers to only expose models.UID values and deal with the
conversion internally. Only IMAP needs to convert these to uint32. All
other backends already use plain strings as message identifiers, in
which case no conversion is even needed.
The directory tree implementation needed to be heavily refactored in
order to accommodate thread UID not being usable as a list index.
Signed-off-by: Robin Jarry <robin@jarry.cc>
Tested-by: Inwit <inwit@sindominio.net>
Tested-by: Tim Culverhouse <tim@timculverhouse.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Add an auto-switch option that changes the project of the patch manager
based on the subject line of a message if it contains a '[PATCH
<project>]' segment.
A subject line with '[PATCH aerc v2]' would switch to the 'aerc' project
if that project is available in the patch manager.
The auto switching can be activated per account by adding
'pama-auto-switch = true' to your account config.
Implements: https://todo.sr.ht/~rjarry/aerc/226
Changelog-added: Auto-switch projects based on the message subject
for the :patch command.
Signed-off-by: Koni Marti <koni.marti@gmail.com>
Acked-by: Robin Jarry <robin@jarry.cc>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Add the reload command that performs a reload of config files. The
reload command supports reloading the binds.conf and aerc.conf config
files.
Reloading will reload account views (including the directory list),
message viewers, and composers.
Signed-off-by: Koni Marti <koni.marti@gmail.com>
Tested-by: Inwit <inwit@sindominio.net>
Acked-by: Robin Jarry <robin@jarry.cc>
|
|
|
|
|
|
|
|
|
|
| |
Extract a function to configure the message store from its constructor
to reconfigure the store when the data changes.
Signed-off-by: Koni Marti <koni.marti@gmail.com>
Tested-by: Inwit <inwit@sindominio.net>
Acked-by: Robin Jarry <robin@jarry.cc>
|
|
|
|
|
|
|
|
|
|
|
| |
Update split views on reload. Use the safe acct.SelectedMessage()
instead of acct.msglist.Selected() which can panic if msglist.store is
nil.
Signed-off-by: Koni Marti <koni.marti@gmail.com>
Tested-by: Inwit <inwit@sindominio.net>
Acked-by: Robin Jarry <robin@jarry.cc>
|
|
|
|
|
|
|
|
|
|
| |
Extract a function to configure the account view from the constructor;
rebuild the grid whenever the config data changed on a hot-reload.
Signed-off-by: Koni Marti <koni.marti@gmail.com>
Tested-by: Inwit <inwit@sindominio.net>
Acked-by: Robin Jarry <robin@jarry.cc>
|
|
|
|
|
|
|
|
|
|
| |
Remove the UI config field in the AccountView struct to ensure we use
the most current UI config.
Signed-off-by: Koni Marti <koni.marti@gmail.com>
Tested-by: Inwit <inwit@sindominio.net>
Acked-by: Robin Jarry <robin@jarry.cc>
|
|
|
|
|
|
|
|
|
| |
Update UI config in tabs.
Signed-off-by: Koni Marti <koni.marti@gmail.com>
Tested-by: Inwit <inwit@sindominio.net>
Acked-by: Robin Jarry <robin@jarry.cc>
|
|
|
|
|
|
|
|
|
|
|
| |
Allow for messages marked with the forwarded flag to be styled
differently.
Changelog-added: Forwarded messages can be styled differently in the
message list.
Signed-off-by: inwit <inwit@sindominio.net>
Acked-by: Robin Jarry <robin@jarry.cc>
|
|
|
|
|
|
|
|
|
|
|
|
| |
Previously filters received default COLUMNS LINES values no matter the
width of the terminal.
Fixes: https://todo.sr.ht/~rjarry/aerc/232
Changelog-added: Filters will receive the actual COLUMNS and LINES
values.
Signed-off-by: Tristan Partin <tristan@partin.io>
Acked-by: Robin Jarry <robin@jarry.cc>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Add a -b flag to the :view command to open messages in a background tab
instead of automatically switching to the new tab after opening. This is
similar to opening browser tabs in the background. More generally, adds
a new function app.NewBackgroundTab so that it is possible to enable other
tabs to be opened in the background in the future.
Implements: https://todo.sr.ht/~rjarry/aerc/266
Changelog-added: Add `-b` flag to the `:view` command to open messages
in a background tab.
Signed-off-by: Aron Lebani <aron@lebani.dev>
Acked-by: Robin Jarry <robin@jarry.cc>
|
|
|
|
|
|
|
|
|
| |
Add a new copy-to-replied setting in accounts.conf to copy sent replies
to the same folder than their replied message.
Requested-by: Tristan Partin <tristan@partin.io>
Signed-off-by: Robin Jarry <robin@jarry.cc>
Tested-by: Tristan Partin <tristan@partin.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Indicate the connection state in the tab title.
Example [ui].tab-title-account option in aerc.conf:
tab-title-account= {{if .Connected}}{{.Account}}✓{{else}}{{.Account}}✗{{end}}
Suggested-by: inwit <inwit@sindominio.net>
Signed-off-by: Koni Marti <koni.marti@gmail.com>
Tested-by: Gregory Anders <greg@gpanders.com>
Tested-by: Inwit <inwit@sindominio.net>
Reviewed-by: Tristan Partin <tristan@partin.io>
Acked-by: Robin Jarry <robin@jarry.cc>
|
|
|
|
|
|
|
|
|
|
|
|
| |
Avoid eternal spinner on the message list when the imap server
advertises some message UIDs but fails to provide their headers when
aerc asks from them.
When an error occurs, or if some UIDs are not returned, make sure to
report the errors to the message list UI.
Signed-off-by: Robin Jarry <robin@jarry.cc>
Reviewed-by: Tristan Partin <tristan@partin.io>
|
|
|
|
|
|
|
|
|
|
|
|
| |
If no match were found in the References and In-Reply-To headers,
allow threading by looking at subjects.
This behaviour is disabled by default. Add a setting to enable it.
Changelog-added: Allow fallback to threading by subject with
`[ui].threading-by-subject`.
Signed-off-by: Robin Jarry <robin@jarry.cc>
Tested-by: Matěj Cepl <mcepl@cepl.eu>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Show all threading associations even when not all nodes are present.
Indicate if a thread is incomplete, i.e. misses a direct parent node.
Use the `msglist_thread_orphan.fg=red` styleobject in your stylesheet to
indicate whether a messsage has a missing parent.
Also use a different thread prefix ("┬─" instead of "├─") not to confuse
them with regular threads that have a visible parent.
Signed-off-by: Koni Marti <koni.marti@gmail.com>
Signed-off-by: Robin Jarry <robin@jarry.cc>
Tested-by: Matěj Cepl <mcepl@cepl.eu>
|
|
|
|
|
|
|
|
|
|
| |
Store the previous folder in the dirlist and retire the global 'history'
map in the commands package. This ensures that the previous folder is
always available when using ':cf -'.
Signed-off-by: Koni Marti <koni.marti@gmail.com>
Acked-by: Robin Jarry <robin@jarry.cc>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Currently, when using :query the user is forced to create a new folder
for every query, since aerc doesn't allow overwriting an existing
folder. Actually, "overwriting" an existing folder with a query is
a non-destructive operation in the sense, that the underlying maildir is
not touched, the only thing lost is the state in aerc. The current
behaviour doesn't allow for a simple `:query -n query ` type of binding.
Allow overwriting an existing folder with the -f flag.
Changelog-added: Allow using existing directory name with `:query -f`.
Signed-off-by: Bence Ferdinandy <bence@ferdinandy.com>
Acked-by: Robin Jarry <robin@jarry.cc>
|
|
|
|
|
|
|
|
|
|
| |
Allow creating [view:folder=FooBar] in binds.conf.
Changelog-added: Per folder key bindings can now be defined for the
message viewer.
Requested-by: Matěj Cepl <mcepl@cepl.eu>
Signed-off-by: Robin Jarry <robin@jarry.cc>
Tested-by: Matěj Cepl <mcepl@cepl.eu>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When the selector dialog body text contains multiple lines, its height
is adjusted automatically. Since commit 3d529aa09330 ("config: make
popover dialogs configurable"), all text after the first line is
truncated.
This happens because SelectorDialog no longer satisfies the Dialog
interface which got an extra ContextWidth() method.
Implement that method using the full width. The [ui].dialog-* settings
are ignored as they were before for that dialog.
Fixes: 3d529aa09330 ("config: make popover dialogs configurable")
Signed-off-by: Robin Jarry <robin@jarry.cc>
Tested-by: Johannes Thyssen Tishman <johannes@thyssentishman.com>
|
|
|
|
|
|
|
|
|
|
| |
It can be good to know the backend used for an account in a hook. Add
this information to all hooks that already pass the account name along.
Changelog-added: Added `AERC_ACCOUNT_BACKEND` to hooks with
`AERC_ACCOUNT`.
Signed-off-by: Bence Ferdinandy <bence@ferdinandy.com>
Acked-by: Robin Jarry <robin@jarry.cc>
|
|
|
|
|
|
|
|
|
|
| |
It's logical to pass this information as well, when we pass a folder
name.
Changelog-added: Added `AERC_FOLDER_ROLE` to hooks that have
`AERC_FOLDER`.
Signed-off-by: Bence Ferdinandy <bence@ferdinandy.com>
Acked-by: Robin Jarry <robin@jarry.cc>
|
|
|
|
|
|
|
|
|
| |
Make aerc ring the terminal bell if a program running in it's built-in
terminal attempts to do the same.
Changelog-added: Propagate terminal bell from the built-in terminal.
Signed-off-by: Karel Balej <balejk@matfyz.cz>
Acked-by: Robin Jarry <robin@jarry.cc>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Add a [ui].select-last-message option to position the cursor at the
bottom of the message list view.
Fixes: https://todo.sr.ht/~rjarry/aerc/254
Changelog-added: Add `[ui].select-last-message` option to position
cursor at the bottom of the view.
Suggested-by: Bence Ferdinandy <bence@ferdinandy.com>
Requested-by: Tomasz Kramkowski <tomasz@kramkow.ski>
Signed-off-by: Koni Marti <koni.marti@gmail.com>
Tested-by: Tomasz Kramkowski <tomasz@kramkow.ski>
Acked-by: Robin Jarry <robin@jarry.cc>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
During the Vaxis switchover, the Beeper interface was changed because
Vaxis' Bell() function does not return error. However the corresponding
change was not made on aerc making it not satisfy this interface and
thus the DrawableInteractiveBeeper interface. This lead to the Bell
function not getting registered making aerc unable to ring the terminal
bell. Fix this.
Fixes: 0fd5f4115792 ("ui: initialize vaxis directly, drop tcell.Screen initialization")
Signed-off-by: Karel Balej <balejk@matfyz.cz>
Reviewed-by: Tim Culverhouse <tim@timculverhouse.com>
Acked-by: Robin Jarry <robin@jarry.cc>
|
|
|
|
|
|
|
|
|
|
|
|
| |
Sometimes it is easier to change folders when adding attachments, but
currently we store relative paths, which doesn't work with this. Add the
absolute paths when attaching files.
Replace the current user home dir with ~ to make it prettier in the UI.
Implements: https://todo.sr.ht/~rjarry/aerc/134
Signed-off-by: Bence Ferdinandy <bence@ferdinandy.com>
Acked-by: Robin Jarry <robin@jarry.cc>
|
|
|
|
|
|
|
|
|
| |
Add the flag-changed hook.
References: https://todo.sr.ht/~rjarry/aerc/136
Changelog-added: New `flag-changed` hook.
Signed-off-by: Bence Ferdinandy <bence@ferdinandy.com>
Acked-by: Robin Jarry <robin@jarry.cc>
|
|
|
|
|
|
|
|
|
| |
Add the tag-modified hook for notmuch and JMAP accounts.
References: https://todo.sr.ht/~rjarry/aerc/136
Changelog-added: New `tag-modified` hook for notmuch and JMAP accounts.
Signed-off-by: Bence Ferdinandy <bence@ferdinandy.com>
Acked-by: Robin Jarry <robin@jarry.cc>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When running :accept, an error is displayed on the review screen:
text/calendar error: no command defined for mime/type
When running :multipart text/xxx, its contents are not specified. They
are regenerated every time the review screen is displayed. When running
:accept, a text/calendar part is added with actual contents.
Update the Part object to hold a boolean initialized when first being
created. If body is nil, identify the part as "Converted" and update its
contents every time the review screen is displayed. When body is not nil
but contains text (e.g. when running :accept), identify the part as
*not* converted and ignore the conversion step.
Fixes: cbcabfafaab2 ("compose: allow writing multipart/alternative messages")
Reported-by: Inwit <inwit@sindominio.net>
Signed-off-by: Robin Jarry <robin@jarry.cc>
Tested-by: Inwit <inwit@sindominio.net>
|
|
|
|
|
|
|
|
| |
Prevent aerc from quiting if there is an active composer instance,
unless `:quit -f` is used.
Signed-off-by: Vitaly Ovchinnikov <v@ovch.ru>
Acked-by: Robin Jarry <robin@jarry.cc>
|
|
|
|
|
|
|
|
|
| |
If IPC fails the first time we try it, we know that no other aerc
instance is running. When we retry, run the command directly instead of
going through the current instance's own IPC server.
Signed-off-by: Jason Cox <me@jasoncarloscox.com>
Acked-by: Robin Jarry <robin@jarry.cc>
|
|
|
|
|
|
|
|
|
|
| |
These messages are not really the root of the thread, and should not be
displayed as such. Add a new special prefix to make them appear like
the first child of a rootless thread.
Signed-off-by: Julio B <julio.bacel@gmail.com>
Tested-by: Inwit <inwit@sindominio.net>
Acked-by: Robin Jarry <robin@jarry.cc>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Given the following configuration:
binds.conf:
[compose::review]
y = :multipart text/html<Enter>:send<Enter>
aerc.conf:
[multipart-converters]
text/html = /path/to/some/script.sh
/path/to/some/script.sh:
#!/bin/sh
exit 10 # falls for some reason
When you press `y` aerc runs `:multipart` command and although it gets
an error from the converter script, the error is ignored and then the
`:send` command actually sends a broken message.
Add ConversionError field to Composer.Part to track multipart conversion
errors.
Check for conversion errors in :send, block sending if the errors are
found.
There is no way to skip this like missing attachment or empty subject.
This is done intentionally. The user needs to update or delete the
problematic part before actually sending a message.
Signed-off-by: Vitaly Ovchinnikov <v@ovch.ru>
Acked-by: Robin Jarry <robin@jarry.cc>
|
|
|
|
|
|
|
|
|
|
| |
Add an option to encrypt outgoing messages to the sender or the key
specified in pgp-key-id.
Implements: https://todo.sr.ht/~rjarry/aerc/237
Changelog-added: New `pgp-self-encrypt` option in `accounts.conf`.
Signed-off-by: Bartkk <bartkk@bartkk.xyz>
Acked-by: Robin Jarry <robin@jarry.cc>
|
|
|
|
|
|
|
|
|
|
|
|
| |
Add the [ui].dialog-{position,width,height} options in aerc.conf to set
the position, width and height of popover dialogs such as the one from
:menu, :envelope or :attach -m relative to the main window.
Changelog-added: Add `[ui].dialog-{position,width,height}` to set
the position, width and height of popover dialogs.
Signed-off-by: Johannes Thyssen Tishman <johannes@thyssentishman.com>
Reviewed-by: Tim Culverhouse <tim@timculverhouse.com>
Acked-by: Robin Jarry <robin@jarry.cc>
|
|
|
|
|
|
|
|
|
|
|
|
| |
The mimetype of attachments are set by the sender, which can results in
attachments getting not so useful mimetypes (e.g.
application/octet-stream for a csv). Allow matching filter against
filenames directly, by adding the `.filename,` and `.filename,~` syntax,
similarly to headers.
Changelog-added: Match filters on filename via `.filename,~<regexp> =`.
Signed-off-by: Bence Ferdinandy <bence@ferdinandy.com>
Acked-by: Robin Jarry <robin@jarry.cc>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Some MTAs try to normalize the case of all headers (including signed
text parts headers). Unfortunately, Mime-Version can be normalized to
different casing depending on the implementation (MIME- vs Mime-).
Since the signature is computed on the whole part, including its header,
changing the case can cause the signature to become invalid.
Due to how multipart/signed messages are constructed, we need to hack
around go-message writers to intercept the writing of a text part,
compute its signature and write the actual message with the proper
headers.
Unfortunately, go-message does not allow creating a message writer that
does not insert a Mime-Version header. This causes the Mime-Version
header to be inserted in the wrong place: it is put inside the signed
text part header instead on the top level header. Thus, included in the
signed content.
Make sure to remove any Mime-Version header from the signed part header.
Finally, ensure that Mime-Version is set on the top-level header so that
messages are compliant with RFC 2045.
Fixes: https://todo.sr.ht/~rjarry/aerc/143
Link: https://github.com/emersion/go-message/issues/165
Link: https://github.com/emersion/go-pgpmail/pull/15
Link: https://lists.sr.ht/~rjarry/aerc-devel/%3CCQRPF5EA0TF8.PEJ4AKCEGMFM%40fembook%3E
Changelog-fixed: `Mime-Version` is no longer inserted in signed
text parts headers. MTAs normalizing header case will not corrupt
signatures anymore.
Reported-by: Coco Liliace <chloe@liliace.dev>
Reported-by: Kirill Chibisov <contact@kchibisov.com>
Signed-off-by: Robin Jarry <robin@jarry.cc>
Tested-by: Tim Culverhouse <tim@timculverhouse.com>
|
|
|
|
|
|
|
|
|
|
|
| |
It's useful to have some indicator of whether or not aerc is in visual
mark mode. Add such an indicator to the TrayInfo available in the status
line.
Changelog-changed: The `TrayInfo` template variable now includes a
visual mark mode indicator.
Signed-off-by: Jason Cox <me@jasoncarloscox.com>
Acked-by: Robin Jarry <robin@jarry.cc>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The current :cf command can be used to create folders for arbitrary
notmuch queries. These folders use the query as their namee. In some
cases, though, it's useful to give a more human-readable name. Create a
new :query command to allow doing so.
The :query command accepts an optional -n flag to specify a name. The
remaining arguments are interpreted verbatim as a notmuch query. If no
name is specified, the query itself is used as the name.
For example, to create a new folder with the full thread of the current
message, named by its subject, run the following command:
:query -n "{{.SubjectBase}}" thread:"{mid:{{.MessageId}}}"
:query could have been implemented as an additional flag to :cf. Giving
a name to the created folder would make the smantics of :cf strange,
though. For example, to create a named query folder, one would use
:cf -n <name> <query>. This syntax feels odd; the name of the folder
seems like it ought to be the positional argument of the change folder
command. Alternatively, the usage could be :cf -q <query> <name>, but
this feels wrong as well: the query, which is provided as a positional
parameter when no name is specified, becomes a flag parameter when a
name is specified. What's more, both of these potential usages add a
notmuch-specific flag to an otherwise general command. Creating a new
command feels cleaner. Perhaps the current query functionality of the
:cf command could eventually be deprecated to remove the duplicate
functionality and keep :cf limited to changing to existing folders.
Changelog-added: Create notmuch named queries with the `:query`
command.
Signed-off-by: Jason Cox <me@jasoncarloscox.com>
Tested-by: Inwit <inwit@sindominio.net>
Acked-by: Robin Jarry <robin@jarry.cc>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Add a new setting to configure the default split layout for message list
tabs. The syntax is a bit different from the :split and :vsplit commands
since it needs to convey the direction in the value as well. I didn't
reuse split/vsplit since they are a bit confusing when used in
a configuration file.
The syntax is as follows:
message-list-split = [<direction>] <size>
The direction is optional and defaults to horizontal. The size is the
number of terminal cells that will be used to display the message list.
All these examples are equivalent:
message-list-split = horiz 12
message-list-split = h 12
message-list-split = 12
Same idea for vertical splits:
message-list-split = vertical 120
message-list-split = vert 120
message-list-split = v 120
Both :split and :vsplit commands remain usable as before. The
configuration options only affect the initial layout at startup.
Add config.SPLIT_* constants and sanitize AccountView.{Split,Vsplit}
methods.
Changelog-added: Configure default message list `:split` or `:vsplit`
on startup with `message-list-split` in `aerc.conf`.
Signed-off-by: Robin Jarry <robin@jarry.cc>
Tested-by: Tim Culverhouse <tim@timculverhouse.com>
|
|
|
|
|
|
|
|
|
| |
Make .Recent, .Unread, .Exists, and .RUE work in statusline templates.
Changelog-added: Message counts are available in statusline templates.
Signed-off-by: Jason Cox <me@jasoncarloscox.com>
Acked-by: Robin Jarry <robin@jarry.cc>
|
|
|
|
|
|
|
| |
This has nothing to do at the root of the source tree.
Signed-off-by: Robin Jarry <robin@jarry.cc>
Acked-by: Bence Ferdinandy <bence@ferdinandy.com>
|
|
|
|
|
|
|
|
|
| |
Make the function already present in app/compose.go reusable while also
changing its signature for it not to require involvement of a Composer
instance.
Signed-off-by: Karel Balej <balejk@matfyz.cz>
Acked-by: Robin Jarry <robin@jarry.cc>
|
|
|
|
|
|
|
|
|
| |
Use the StartWithSize method to start the terminal with the appropriate
size. This prevents multiple WINCH signals from being sent to the pty at
startup
Signed-off-by: Tim Culverhouse <tim@timculverhouse.com>
Acked-by: Robin Jarry <robin@jarry.cc>
|