049c72393a
The Invalidatable struct is designed so that a widget can have a callback function ran when it is Invalidated. This is used to cascade up the widget tree, marking things as Invalid along the way so that only Invalid widgets are drawn. However, this is only implemented at the grid cell level for checks if the cell is invalidated -- and the grid cells are never set back to a "valid" state. The effect of this is that no matter what is invalidated, the entire UI gets drawn again. The calling through the Invalidate callbacks creates *several* race conditions, as Invalidate is called from several different goroutines, and many widgets call invalidate on their parent or children. Tcell has optimizations to only rerender screen cells that have changed their rune and style. The only performance penalty by redrawing the entire screen for aerc is the operations *within the aerc draw methods*. Most of these are not expensive and have relatively no impact on performance. Skip all of the OnInvalidates, and directly invalidate the UI when DoInvalidate is called by a widget. This reduces data races, and simplifies the widget redraw logic signficantly. Signed-off-by: Tim Culverhouse <tim@timculverhouse.com> Acked-by: Robin Jarry <robin@jarry.cc> |
||
---|---|---|
.builds | ||
.github/workflows | ||
commands | ||
completer | ||
config | ||
contrib | ||
doc | ||
filters | ||
lib | ||
logging | ||
models | ||
templates | ||
widgets | ||
worker | ||
.editorconfig | ||
.gitignore | ||
.golangci.toml | ||
.mailmap | ||
aerc.go | ||
CHANGELOG.md | ||
CONTRIBUTING.md | ||
go.mod | ||
go.sum | ||
LICENSE | ||
MAINTAINERS | ||
Makefile | ||
README.md | ||
tools.go |
aerc
aerc is an email client for your terminal.
This is a fork of the original aerc by Drew DeVault.
A short demonstration can be found on https://aerc-mail.org/
Join the IRC channel: #aerc on irc.libera.chat for end-user support, and development.
Usage
On its first run, aerc will copy the default config files to ~/.config/aerc
on Linux or ~/Library/Preferences/aerc
on MacOS (or $XDG_CONFIG_HOME/aerc
if set)
and show the account configuration wizard.
If you redirect stdout to a file, logging output will be written to that file:
$ aerc > log
Note that the example HTML filter (off by default), additionally needs w3m
and
dante
to be installed.
Documentation
Also available as man pages:
- aerc(1)
- aerc-config(5)
- aerc-imap(5)
- aerc-maildir(5)
- aerc-notmuch(5)
- aerc-search(1)
- aerc-sendmail(5)
- aerc-smtp(5)
- aerc-stylesets(7)
- aerc-templates(7)
- aerc-tutorial(7)
User contributions and integration with external tools:
Installation
Binary Packages
Recent versions of aerc are available on:
And likely other platforms.
From Source
Install the dependencies:
- go (>=1.16) (Go versions are supported until their end-of-life; support for older versions may be dropped at any time due to incompatibilities or newer required language features.)
- scdoc
Then compile aerc:
$ make
aerc optionally supports notmuch. To enable it, you need to have a recent version of notmuch, including the header files (notmuch.h). Then compile aerc with the necessary build tags:
$ GOFLAGS=-tags=notmuch make
To install aerc locally:
# make install
By default, aerc will install config files to directories under /usr/local/aerc
,
and will search for templates and stylesets in these locations in order:
${XDG_CONFIG_HOME:-~/.config}/aerc
${XDG_DATA_HOME:-~/.local/share}/aerc
/usr/local/share/aerc
/usr/share/aerc
At build time it is possible to add an extra location to this list and to use
that location as the default install location for config files by setting the
PREFIX
option like so:
# make PREFIX=/custom/location
# make install PREFIX=/custom/location
This will install templates and other config files to /custom/location/share/aerc
,
and man pages to /custom/location/share/man
. This extra location will have lower
priority than the XDG locations but higher than the fixed paths.
Contributing
Anyone can contribute to aerc. Please refer to the contribution guidelines
Resources
Ask for support or follow general discussions on ~rjarry/aerc-discuss@lists.sr.ht.
Send patches and development related questions to ~rjarry/aerc-devel@lists.sr.ht.
Instructions for preparing a patch are available at git-send-email.io
Subscribe to release announcements on ~rjarry/aerc-announce@lists.sr.ht
Submit confirmed bug reports and confirmed feature requests on https://todo.sr.ht/~rjarry/aerc.