Commit Graph

1161 Commits

Author SHA1 Message Date
Pranjal Kole db1c03f0e6 lib/ui/textinput: stop at /, ", and ' chars
This matches the default behaviour of Ctrl+W in vim.
2022-02-03 13:17:10 +01:00
Robin Jarry dc6fd7c15e compose: allow setting all headers in templates
Allow setting To, Cc, Subject, Bcc in template headers.

Fixes: https://todo.sr.ht/~rjarry/aerc/19
Signed-off-by: Robin Jarry <robin@jarry.cc>
2022-02-03 09:55:20 +01:00
Robin Jarry 77b3a141a4 review: display actual bindings for commands
Parse the actual user bindings to determine what shortcuts are available
in the compose::review stage. Add a predefined list of commands for
which we want to display the keyboard shortcuts.

Fixes: https://todo.sr.ht/~rjarry/aerc/14
Signed-off-by: Robin Jarry <robin@jarry.cc>
2022-02-02 22:12:08 +01:00
Robin Jarry 923e949c05 binds.conf: change default review bindings
Add missing :detach binding.
Ask user for confirmation when pressing 'q'.

Signed-off-by: Robin Jarry <robin@jarry.cc>
2022-02-02 22:12:08 +01:00
Robin Jarry 1f99581f67 mk: use debug to generate a non-optimized binary
Do not use this to run the debugger. Instead, build a non-optimized
binary and display what command should be executed to attach to
a running program.

Signed-off-by: Robin Jarry <robin@jarry.cc>
2022-02-02 22:12:08 +01:00
inwit e0b5f2e08c completions: add folder flexible search as an option
Provide an option to change the completion style when selecting a folder
from completing with folders starting with the input string to
completing with folders in which the input string is a substring present
at any point in the folder name.

References: https://lists.sr.ht/~sircmpwn/aerc/%3C20201129181020.186984-1-inwit%40sindominio.net%3E
References: https://lists.sr.ht/~sircmpwn/aerc/%3C20210223202536.199355-1-clayton%40craftyguy.net%3E
Signed-off-by: inwit <inwit@sindominio.net>
2022-01-31 17:51:57 +01:00
john1doe@ya.ru 27122ef8e8 compose: add option to never include your own address when replying
Introduce an option in aerc.conf to disable the auto-including
of your own address when replying to your own emails (address
replies to the original To: and Cc: instead); default to true
(allow the auto-including)
2022-01-31 16:22:54 +01:00
Robin Jarry 622802d3a5 maildir: defer the count of recent messages
Since commit 01c96e78df ("Update DirectoryInfo handling for maildir"),
flags are checked for every message of a folder when entering it.
Iterating over all messages of a folder takes a long time for large
collections of emails.

Only count the number of messages and state that the directory info
counts are not accurate. Defer the parsing of message flags in
a goroutine to have a more responsive UI.

Fixes: https://todo.sr.ht/~rjarry/aerc/16
Suggested-by: Koni Marti <koni.marti@gmail.com>
Signed-off-by: Robin Jarry <robin@jarry.cc>
2022-01-30 20:49:30 +01:00
Robin Jarry a5c046efe3 dirlist: use shorter delay before listing directory contents
1 second is a bit excessive. Use 200ms which should cover most quick
folder changes.

Add an option to make that delay configurable by the users.

References: https://todo.sr.ht/~rjarry/aerc/16
Fixes: cb3090956c ("dirlist: skip unnecessary change-folder action")
Suggested-by: Koni Marti <koni.marti@gmail.com>
Signed-off-by: Robin Jarry <robin@jarry.cc>
2022-01-29 22:01:25 +01:00
Koni Marti cdec23323c recover: recover emails from tempdir after a crash
implements a recover command that searches the local temp dir for aerc
emails. If a file is found and selected, a new composer tab will open
with the file contents as the message body. No header data is stored in
the temp file and thus this information cannot be recovered.

Recover will not remove the temporary file unless the force flag (-f) is
explicitly used.

This recovery method only works when the editor buffer is saved to
disk and the Close() function of the composer has not been called yet.

Sending, postponing or quitting will call the Close() function which
removes the temporary file completely. After Close() is called, no
recovery is possible anymore.

Signed-off-by: Koni Marti <koni.marti@gmail.com>
2022-01-29 22:01:25 +01:00
Mark Dain fc07495ee8 readme: add shield for github macos build 2022-01-28 20:52:49 +01:00
Robin Jarry 7edcc9f794 reply: use new-message template for non-quoted replies
Unless a template is specified with reply -T, use the new-message
template for non-quoted replies.

Fixes: 877a94f5d9 ("compose: add default template for new messages")
Signed-off-by: Robin Jarry <robin@jarry.cc>
2022-01-27 09:16:54 +01:00
Ariel Costas 7c945149a6 doc: correct typo in man-pages
Fix a typo in the man page where it reads "maintained by by Robin"
instead of "maintained by Robin"

Signed-off-by: Ariel Costas <ariel@costas.dev>
2022-01-26 19:23:29 +01:00
Robin Jarry 59ecf93b9b github: add workflow to test on macos
We have some users on macOS. builds.sr.ht does not support proprietary
build images and will never do.

Signed-off-by: Robin Jarry <robin@jarry.cc>
2022-01-25 09:35:08 +01:00
Adnan Maolood 6be78781a1 aerc: shutdown if socket communication fails
When provided with a mailto argument, aerc tries to connect to an
existing instance via a unix socket. If that fails, it starts up a new
instance and tries again. However, if that fails again (e.g. if the
unix server could not be started) then the new instance will remain open
without any indication that an error occured. Instead, shutdown the new
instance so the user can see the error message.
2022-01-24 12:06:41 +01:00
inwit d922d7325c binds: Warning on unexistent account bindings
After commit 175d0ef ("binds: add account specific bindings"), when
bindings are defined for an account not defined in accounts.conf, aerc
quits with an error. After this commit, a warning is logged and aerc
ignores those bindings.

Signed-off-by: inwit <inwit@sindominio.net>
2022-01-24 11:48:51 +01:00
Koni Marti cb3090956c dirlist: skip unnecessary change-folder action
when traversing the directory list, aerc will fetch the contents for
every directory even though the user might just move on to the next.
This causes an unnecessary delay (and load on the worker) and can be
avoided by skipping the old change-folder action when a newer one
arrives within a predefined time interval.

Signed-off-by: Koni Marti <koni.marti@gmail.com>
2022-01-24 09:51:32 +01:00
Koni Marti eafb537081 dirlist: improve change-folder responsiveness
improves change-folder responsiveness. When changing folders, the
highlighted directory is currently updated in a callback function to the
open-directory action. This creates an unpleasent lag in the ui until
the entire operation is done. Instead, we should provide an immediate
visual feedback of the selection to the user and keep loading the
directory contents in the background.

Signed-off-by: Koni Marti <koni.marti@gmail.com>
2022-01-24 09:51:29 +01:00
inwit 50b0436510 readme: fix typo in contribution guide
git: 'sendemail' is not a git command. See 'git --help'.

The most similar command is
        send-email

Fixes: b84374a572 ("readme: add contribution guide")
Signed-off-by: inwit <inwit@sindominio.net>
2022-01-24 09:48:22 +01:00
Mark Dain e58194c7b5 build: check make install
Ensure that install works on all platforms.
2022-01-24 09:38:56 +01:00
Mark Dain 1864680bfc mk: add make checkinstall
Adds a quick way to ensure the install was successful.
2022-01-24 09:38:45 +01:00
Mark Dain b9e96751af build: replace archlinux by openbsd
This commit drops Arch Linux in favor of a BSD so there's more variety
in CI.

Link: https://lists.sr.ht/~rjarry/aerc-devel/%3C20220122033806.91728-1-ktprograms%40gmail.com%3E
2022-01-24 09:38:23 +01:00
Koni Marti e5ad877af5 msgstore: fetch missing headers in visual mode
fetches missing headers when in visual selection mode. This prevents
large archive operations from panicking due to a nil pointer
dereference.

The archive command will return an error to the ui when a nil message is
encountered to signal that the message store is not ready yet.

Signed-off-by: Koni Marti <koni.marti@gmail.com>
2022-01-22 17:07:50 +01:00
Robin Jarry 44f81c87e4 mk: syntax cleanup
Avoid multiline strings. Use dlv --build-flags.

Signed-off-by: Robin Jarry <robin@jarry.cc>
2022-01-21 21:56:40 +01:00
Robin Jarry e97e0d8ab1 mk: be compatible with bsd make
ifeq is not supported by bsd make. We don't need this. Use a simple
shell command.

Signed-off-by: Robin Jarry <robin@jarry.cc>
2022-01-21 21:56:40 +01:00
Robin Jarry 34d36bad0d Revert "mk: only install if files changed"
This reverts commit 22ad9e199a.

This breaks install on macOS:

      install -m755 -D aerc /usr/local/bin/aerc
      install: illegal option -- D

Signed-off-by: Robin Jarry <robin@jarry.cc>
2022-01-21 21:38:01 +01:00
Robin Jarry 0709115916 mk: avoid searching in hidden directories at the root
Signed-off-by: Robin Jarry <robin@jarry.cc>
2022-01-20 21:43:47 +01:00
Robin Jarry 561f8c19af Add .editorconfig file
Most of the go source files

Signed-off-by: Robin Jarry <robin@jarry.cc>
2022-01-20 21:43:47 +01:00
Robin Jarry 662a82e7db readme: add package links to debian and fedora
Signed-off-by: Robin Jarry <robin@jarry.cc>
2022-01-20 20:52:11 +01:00
Robin Jarry a46262ee57 build: add multiple distributions
Add build and test on debian, fedora and archlinux. Only check code
formatting on alpine.

Signed-off-by: Robin Jarry <robin@jarry.cc>
2022-01-20 20:51:42 +01:00
Nguyễn Gia Phong bf4abd309e maildir,notmuch: pass in-memory message to callback
This fixes piped full message (:pipe -m) being empty.

Fixes: 904ffacb0e ("maildir,notmuch: avoid leaking open files")
Signed-off-by: Nguyễn Gia Phong <mcsinyx@disroot.org>
2022-01-20 15:44:46 +01:00
Robin Jarry b96326517d bindings: fix ctrl-h binding not working
For some unknown reason. tcell does not include the ctrl modifier for
the ctrl-h key event.

Fixes: 7a6c808c04 ("bindings: prepare for more modifers")
Fixes: https://todo.sr.ht/~rjarry/aerc/8
Signed-off-by: Robin Jarry <robin@jarry.cc>
2022-01-20 13:23:35 +01:00
Koni Marti 7f34cab5e5 terminal: fix nil pointer dereference in pty.Getsize
pty.Getsize() is used in the Draw function of the terminal widget and wraps the
pty.GetsizeFull() function. However, pty.Getsize does not check the returned
error from pty.GetsizeFull before dereferencing the winsize struct. In case of
an error, this will cause a nil pointer deference and panic.

This has been reported in the upstream package, but in the meantime, we can
directly use pty.GetsizeFull.

References: https://todo.sr.ht/~rjarry/aerc/11
Signed-off-by: Koni Marti <koni.marti@gmail.com>
2022-01-19 22:16:36 +01:00
Robin Jarry 22ad9e199a mk: only install if files changed
Signed-off-by: Robin Jarry <robin@jarry.cc>
2022-01-19 22:02:44 +01:00
Robin Jarry 877a94f5d9 compose: add default template for new messages
Allow defining a default template to use when composing new messages.
Add an example to be used for new users.

Signed-off-by: Robin Jarry <robin@jarry.cc>
2022-01-19 21:42:41 +01:00
Robin Jarry 92bf89c338 docs: mention missing -T options for compose and forward
A template file may be specified for compose and forward as well.

Signed-off-by: Robin Jarry <robin@jarry.cc>
2022-01-19 21:29:16 +01:00
Robin Jarry f0f7cf347c templates: add x-mailer header in default files
This should serve as an example for new users.

Signed-off-by: Robin Jarry <robin@jarry.cc>
2022-01-19 20:56:38 +01:00
Nguyễn Gia Phong 904ffacb0e maildir,notmuch: avoid leaking open files
Previously, Message.NewReader returned the wrapped buffered reader
without a reference to the opened file, so the files descriptors
were left unclosed after reading.  Now, the file reader is returned
directly and closed on the call site.  Buffering is not needed here
because it is an implementation detail of go-message.

Fixes: https://todo.sr.ht/~rjarry/aerc/9
2022-01-19 20:18:00 +01:00
Koni Marti beae17a6da imap: auto-reconnects on connection error
if the worker emits a connection error, the ui will automatically send back a
reconnect command. The worker then establishes a new connection. Auto-reconnect
is disabled when the user sends the disconnect command.

Fixes: https://todo.sr.ht/~rjarry/aerc/1
Signed-off-by: Koni Marti <koni.marti@gmail.com>
2022-01-19 17:40:52 +01:00
Koni Marti 1ace50a6b9 imap: emits connection error on logout
implements a new connection error message. This allows the worker to emit a
connection-related error message to the ui when the imap client closes the
loggedOut channel.

Signed-off-by: Koni Marti <koni.marti@gmail.com>
2022-01-19 17:34:42 +01:00
Koni Marti 022bf1a11f imap: fix panic when sending multiple connect cmds
fixes the panic when the user sends multiple connect commands and is
already connected. The panic is caused by closing an already closed
channel. This happens when the idle re-init code is not executed, e.g.
when there's a return statement in the switch block.  A defer func()
before the switch block will prevent this. The existing behavior of only
creating a new idleStop channel when properly connected is preseverd.

Signed-off-by: Koni Marti <koni.marti@gmail.com>
2022-01-19 17:34:41 +01:00
Robin Jarry f81d8871c7 Release version 0.7.1
Signed-off-by: Robin Jarry <robin@jarry.cc>
2022-01-15 12:14:32 +01:00
Robin Jarry 899d1cca3c Revert "imap: attempt automatic reconnection on error"
This reverts commit c605ada3dd.

This breaks reading message bodies. I am not sure why, I'll take some
time to fix it later.

Signed-off-by: Robin Jarry <robin@jarry.cc>
2022-01-15 12:13:47 +01:00
Robin Jarry 4d7d01b3f0 Release version 0.7.0
Signed-off-by: Robin Jarry <robin@jarry.cc>
2022-01-14 21:23:18 +01:00
Robin Jarry c605ada3dd imap: attempt automatic reconnection on error
Attempt to reconnect to the server when there is an unexpected
disconnection or network error.

Use the Client.LoggedOut() channel which is closed when the connection
is closed.

This patch is rather flaky and is certainly bugged. However, it is
a start.

Signed-off-by: Robin Jarry <robin@jarry.cc>
2022-01-14 21:17:40 +01:00
Nguyễn Gia Phong 6f8c167e27 Stop wrapping OriginalText in default templates
Wrapping embeded code or patches could mess up the content.
2022-01-14 20:36:19 +01:00
Koni Marti 4782473064 fix segfault when copy-pasting into compose editor
fixes the segmentation fault when copy-pasting a large text into the
composer editor. The problem is a concurrent read of the vterm field in the
Terminal widget in its flushTerminal() method which can be avoided with a mutex.

Fixes: https://todo.sr.ht/~rjarry/aerc/12
Signed-off-by: Koni Marti <koni.marti@gmail.com>
2022-01-14 20:35:07 +01:00
Parasrah 71eda7d37c completions: add support for completing multiple addresses
as per the discussion https://lists.sr.ht/~sircmpwn/aerc/patches/15367
this handles completions in `completer/completer.go` by enabling the
completer to return a `prefix` that will be prepended to the selected
completion candidate.
2022-01-07 13:54:10 +01:00
Koni Marti b19b844a63 pgp: PGP/MIME encryption for outgoing emails
implements PGP/MIME encryption with go-pgpmail. The Encrypt() function of
go-pgpmail requires a list of public keys which are taken from the
keystore. The keystore is searched for the email addresses of all
recipients (to, cc, and bcc).
If you want to be able to read the encrypted email afterwards, add
yourself as a recipient in either to, cc, or bcc as well.

Public keys can be exported from gpg into aerc as follows:
$ gpg --export  >> ~/.local/share/aerc/keyring.asc

When composing a message, the encryption is enabled with the
":encrypt" command. This sets a bool flag in the Composer struct.
A reapted application of this command will toggle the flag.
The encrypted message can also be signed by using the ":sign"
command before or after ":encrypt".

References: https://todo.sr.ht/~rjarry/aerc/6
Signed-off-by: Koni Marti <koni.marti@gmail.com>
2022-01-07 13:45:34 +01:00
Koni Marti 69d4e3895f pgp: PGP/MIME signing for outgoing emails
implements PGP/MIME signing with go-pgpmail. The Sign() function of
go-pgpmail requires a private (signing) key. The signing key which matches
the senders email address (from field in email header) is looked up
in aerc's copy of the keyring.

Private keys can be exported from gpg into aerc as follows:
$ gpg --export-secret-keys  >> ~/.local/share/aerc/keyring.asc

A message is signed with the ":sign" command. The sign command sets
a bool flag in the Composer struct. Using the command repeatedly will
toggle the flag.

References: https://todo.sr.ht/~rjarry/aerc/6
Signed-off-by: Koni Marti <koni.marti@gmail.com>
2022-01-07 13:45:34 +01:00