aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
...
* msgviewer: Document Labels in header-layoutinwit2022-11-221-0/+2
| | | | | | | | Mention the header Labels (for showing notmuch tags in the viewer) in the docs. Signed-off-by: inwit <inwit@sindominio.net> Acked-by: Moritz Poldrack <moritz@poldrack.dev>
* msgviewer: fix parts indexKoni Marti2022-11-211-1/+4
| | | | | | | | Fix parts index by making an explicit copy of the index slice. Fixes: https://todo.sr.ht/~rjarry/aerc/103 Signed-off-by: Koni Marti <koni.marti@gmail.com> Acked-by: Robin Jarry <robin@jarry.cc>
* compose binds: add backtab to field cycleBence Ferdinandy2022-11-211-0/+1
| | | | | | | | Currently we have tab to go forward among the tabs, but not backwards. Add backtab bound to prev-field to make the defaults symmetrical. Signed-off-by: Bence Ferdinandy <bence@ferdinandy.com> Acked-by: Robin Jarry <robin@jarry.cc>
* ui: box and frame an interactive widgetKoni Marti2022-11-212-1/+76
| | | | | | | | Draw a framed box with a title containing an interactive-drawable widget. Signed-off-by: Koni Marti <koni.marti@gmail.com> Acked-by: Tim Culverhouse <tim@timculverhouse.com>
* attach: open file picker menu with -m flagKoni Marti2022-11-215-3/+118
| | | | | | | | | | | | | | | | | | | | | Open a user-defined file picker with the -m flag for the attach command to select attachments. Specify your file picker of choice with the 'file-picker-cmd' in the [composer] section of aerc.conf, e.g. "file-picker-cmd=fzf -m". A '%s' placeholder can be used in the 'file-picker-cmd' which is then substituted for the argument <arg> provided to :attach -m <arg>. For example, when you set 'file-picker-cmd=find %s -type f | fzf -m', you can easily change the directory to start the search with ':attach -m <path-to-search>'. Tested with fzf, fzy and peco. Implements: https://todo.sr.ht/~rjarry/aerc/108 Signed-off-by: Koni Marti <koni.marti@gmail.com> Acked-by: Tim Culverhouse <tim@timculverhouse.com>
* config: add log-file and log-level settingsRobin Jarry2022-11-217-32/+116
| | | | | | | | | | | Allow configuring persistent logging to file with a log level. When redirecting the output of aerc to a file these two settings are ignored and all messages are printed to stdout. Suggested-by: Moritz Poldrack <moritz@poldrack.dev> Suggested-by: Tim Culverhouse <tim@timculverhouse.com> Signed-off-by: Robin Jarry <robin@jarry.cc> Acked-by: Tim Culverhouse <tim@timculverhouse.com>
* config: move [triggers] parsing in proper fileRobin Jarry2022-11-162-19/+20
| | | | | | | | | | The config.go file is getting too big. Move the aerc.conf [triggers] section parsing logic into a dedicated triggers.go file. No functional change. Signed-off-by: Robin Jarry <robin@jarry.cc> Acked-by: Moritz Poldrack <moritz@poldrack.dev>
* config: move [openers] parsing in separate fileRobin Jarry2022-11-162-13/+32
| | | | | | | | | | The config.go file is getting too big. Move the aerc.conf [openers] section parsing logic into a dedicated openers.go file. No functional change. Signed-off-by: Robin Jarry <robin@jarry.cc> Acked-by: Moritz Poldrack <moritz@poldrack.dev>
* config: move [statusline] in separate fileRobin Jarry2022-11-162-29/+45
| | | | | | | | | | | | | The config.go file is getting too big. Move the aerc.conf [statusline] section parsing logic into a dedicated statusline.go file. No functional change. Please ignore the casual "realignment" of fields in the default config initialization. Thanks gofmt. Signed-off-by: Robin Jarry <robin@jarry.cc> Acked-by: Moritz Poldrack <moritz@poldrack.dev>
* config: move [viewer] parsing in separate fileRobin Jarry2022-11-162-37/+58
| | | | | | | | | | The config.go file is getting too big. Move the aerc.conf [viewer] section parsing logic into a dedicated viewer.go file. No functional change. Signed-off-by: Robin Jarry <robin@jarry.cc> Acked-by: Moritz Poldrack <moritz@poldrack.dev>
* config: move [compose] parsing in separate fileRobin Jarry2022-11-162-41/+63
| | | | | | | | | | The config.go file is getting too big. Move the aerc.conf [compose] section parsing logic into a dedicated compose.go file. No functional change. Signed-off-by: Robin Jarry <robin@jarry.cc> Acked-by: Moritz Poldrack <moritz@poldrack.dev>
* config: move [filters] parsing to separate fileRobin Jarry2022-11-163-48/+72
| | | | | | | | | | The config.go file is getting too big. Move the aerc.conf [filters] section parsing logic into a dedicated filters.go file. No functional change. Signed-off-by: Robin Jarry <robin@jarry.cc> Acked-by: Moritz Poldrack <moritz@poldrack.dev>
* config: move [general] parsing in separate fileRobin Jarry2022-11-162-35/+51
| | | | | | | | | | The config.go file is getting too big. Move the aerc.conf [general] section parsing logic into a dedicated general.go file. No functional change. Signed-off-by: Robin Jarry <robin@jarry.cc> Acked-by: Moritz Poldrack <moritz@poldrack.dev>
* config: move [templates] parsing in separate fileRobin Jarry2022-11-162-46/+67
| | | | | | | | | | The config.go file is getting too big. Move the aerc.conf [templates] section parsing logic into a dedicated templates.go file. No functional change. Signed-off-by: Robin Jarry <robin@jarry.cc> Acked-by: Moritz Poldrack <moritz@poldrack.dev>
* config: move [ui] parsing in separate fileRobin Jarry2022-11-162-316/+345
| | | | | | | | | | | | | | | | | | | | | The config.go file is getting too big. Move the aerc.conf [ui] section parsing logic into a dedicated ui.go file. Add a defaultUiConfig() function to also get the default configuration values in a separate file. Extract fragmented bits of code in AercConfig.parseConfig() in a new AercConfig.parseUi() function defined in ui.go. Change parseUiConfig() into a UIConfig.parse() method. Change some methods receiver args to pointers to avoid unnecessary copies. No functional change. Signed-off-by: Robin Jarry <robin@jarry.cc> Acked-by: Moritz Poldrack <moritz@poldrack.dev>
* config: move binds.conf parsing in binds.goRobin Jarry2022-11-162-191/+207
| | | | | | | | | | The config.go file is getting too big. Move all binds.conf parsing logic into binds.go where it belongs. No functional change. Signed-off-by: Robin Jarry <robin@jarry.cc> Acked-by: Moritz Poldrack <moritz@poldrack.dev>
* config: move accounts.conf parsing in separate fileRobin Jarry2022-11-162-250/+257
| | | | | | | | | | The config.go file is getting too big. Move accounts.conf parsing logic into a dedicated accounts.go file. No functional change. Signed-off-by: Robin Jarry <robin@jarry.cc> Acked-by: Moritz Poldrack <moritz@poldrack.dev>
* config: rename bindings -> bindsRobin Jarry2022-11-162-0/+0
| | | | | | | For consistency with binds.conf Signed-off-by: Robin Jarry <robin@jarry.cc> Acked-by: Moritz Poldrack <moritz@poldrack.dev>
* config: remove unused Ini fieldRobin Jarry2022-11-161-3/+0
| | | | | | | There is no point in keeping an open reference to the ini file. Signed-off-by: Robin Jarry <robin@jarry.cc> Acked-by: Moritz Poldrack <moritz@poldrack.dev>
* commands: remove broken :set commandRobin Jarry2022-11-163-80/+4
| | | | | | | | | This may have worked at some point in time but that is not the case anymore. To accommodate for the rework of the config module, it needs to be removed anyway. Signed-off-by: Robin Jarry <robin@jarry.cc> Acked-by: Moritz Poldrack <moritz@poldrack.dev>
* move and archive: common code for common operationBence Ferdinandy2022-11-133-44/+58
| | | | | | | | | | | | The code of Archive and Move are slightly different, even though they essentially do the same thing sans the destination and archive always creating the destination if it doesn't exist. Extract common code into a function used by both. This will also result in Move now also respecting next-message-on-delete. Signed-off-by: Bence Ferdinandy <bence@ferdinandy.com> Acked-by: Koni Marti <koni.marti@gmail.com> Acked-by: Robin Jarry <robin@jarry.cc>
* maildir: fallback when parsing for in-reply-to failsKoni Marti2022-11-131-4/+7
| | | | | | | | | | Fallback to just using the raw In-Reply-To header content when it cannot be properly parsed as a message-id. Fixes: ca903d422826 ("envelope: add InReplyTo field") Reported-by: Bence Ferdinandy <bence@ferdinandy.com> Signed-off-by: Koni Marti <koni.marti@gmail.com> Tested-by: Bence Ferdinandy <bence@ferdinandy.com>
* dirtree: fix mouse support for selecting foldersKoni Marti2022-11-131-5/+12
| | | | | | | | | Fix mouse support for selecting folders. Toggle foldable directories to expand or collapse when clicked on. Fixes: https://todo.sr.ht/~rjarry/aerc/99 Signed-off-by: Koni Marti <koni.marti@gmail.com> Tested-by: Bence Ferdinandy <bence@ferdinandy.com>
* reply: allow to override localized Re regexp in configurationjp392022-11-135-6/+25
| | | | | | | | | | | | | | | My corporate email server annoyingly adds an "[External] " prefix when delivering emails from outside my organization. I'd like to be able to automatically strip it from the subject line when replying to external emails. With this patch, I can achieve it by setting this line in my account configuration: subject-re-pattern = ^(\[External\] : )?((?i)((AW|RE|SV|VS|ODP|R): ?)+) Signed-off-by: jp39 <jp39@gmx.com> Acked-by: Moritz Poldrack <moritz@poldrack.dev>
* filters: export more info to filter processesRobin Jarry2022-11-134-0/+19
| | | | | | | Export some more environment variables to the pager commands. Signed-off-by: Robin Jarry <robin@jarry.cc> Acked-by: Koni Marti <koni.marti@gmail.com>
* msgviewer: show error if MessageInfo has errorTim Culverhouse2022-11-091-2/+9
| | | | | | | | | | | | | | | | | MessageInfo structs can be returned from the workers with parser errors. MessageViews were previously prevented from opening if the error field was not nil, however the addition of message view splits have allowed these messages to have split views created. A panic can occur if a split is open and one of these messages is scrolled over. Prevent access to MessageInfo methods if the Error field is set. Display the error to the user in the split view. The partSwitcher will be nil if an error is set: check for this condition before calling it's methods. Reported-by: Ben Lee-Cohen <ben@lee-cohen.com> Signed-off-by: Tim Culverhouse <tim@timculverhouse.com> Acked-by: Robin Jarry <robin@jarry.cc>
* dirtree: show dynamic folders properlyKoni Marti2022-11-091-0/+15
| | | | | | | | | | Show dynamic folders from notmuch queries using :cf when using the directory tree view. The current dirtree implementation would swallow the query list entry but show the folder contents correctly in the message list. Signed-off-by: Koni Marti <koni.marti@gmail.com> Tested-by: Inwit <inwit@sindominio.net>
* dirtree: prevent panic when no folder is foundKoni Marti2022-11-092-2/+2
| | | | | | | | | Prevent crash when no folder is found. Fixes: https://todo.sr.ht/~rjarry/aerc/100 Fixes: https://todo.sr.ht/~rjarry/aerc/101 Signed-off-by: Koni Marti <koni.marti@gmail.com> Tested-by: Inwit <inwit@sindominio.net>
* maildir: drain limit channel on parse error when sortingTim Culverhouse2022-11-091-0/+1
| | | | | | | | | | | | | | Commit 155f0c3f28a1 ("maildir/sort: get MessageInfos in parallel") added parallel parsing of maildir messages. The parsing is limitted to 2x the number of CPUs using a buffered channel. The channel is drained at the end of the parsing, however it is not drained if a parse error is encountered. With enough errors, this can lead to a deadlock. Drain the channel when an error occurs. Fixes: 155f0c3f28a1 ("maildir/sort: get MessageInfos in parallel") Signed-off-by: Tim Culverhouse <tim@timculverhouse.com> Acked-by: Robin Jarry <robin@jarry.cc>
* maildir: always sort by at least uidTim Culverhouse2022-11-091-1/+7
| | | | | | | | | | | | | | | | | | | | Commit 29205fdd07c0 ("maildir/search: get MessageInfos in parallel") introduced parallel searching of maildir backends, which improves search and filtering performance. When no filter is specified, the search algorithm is still used with no criteria because the FilterCriteria field always contains "filter" as a minimum. With the new parallelized search, the message order becomes random. Only use the search algorithm if there is a filter specified. If a filter *is* specified and a sort order is *not*, the messages will go through the search algorithm and become randomized, but not sorted back in order. Always default to a UID order sort (the same as prior to this commit) when no sort order is specified. Fixes: 29205fdd07c0 ("maildir/search: get MessageInfos in parallel") Reported-by: Ben Lee-Cohen <bdc@fastmail.fm> Signed-off-by: Tim Culverhouse <tim@timculverhouse.com> Tested-by: Ben Lee-Cohen <bdc@fastmail.fm>
* style: add italic optionTim Culverhouse2022-11-092-1/+19
| | | | | | | | Add italic option to style config. Update docs. Suggested-by: inwit <inwit@sindominio.net> Signed-off-by: Tim Culverhouse <tim@timculverhouse.com> Tested-by: Bence Ferdinandy <bence@ferdinandy.com>
* maildir: enable backend threadsTim Culverhouse2022-11-091-1/+85
| | | | | | | | | | Add thread capability to maildir backend. Enables the maildir worker to thread the entire folder, as opposed to only the displayed messages via client side threads. Signed-off-by: Tim Culverhouse <tim@timculverhouse.com> Tested-by: Inwit <inwit@sindominio.net> Acked-by: Robin Jarry <robin@jarry.cc>
* message-info: add explicit References fieldTim Culverhouse2022-11-094-0/+17
| | | | | | | | | | Add an explicit References field to message info. This is useful for storing information needed for threading without storing all of the header values, keeping system RAM usage lower. Signed-off-by: Tim Culverhouse <tim@timculverhouse.com> Tested-by: Inwit <inwit@sindominio.net> Acked-by: Robin Jarry <robin@jarry.cc>
* envelope: add InReplyTo fieldTim Culverhouse2022-11-093-5/+18
| | | | | | | | | | A standard IMAP envelope response includes the In-Reply-To header field. Add this field to the aerc model of Envelope. Update envelope parser to set this value. Update imap worker to set this value. Signed-off-by: Tim Culverhouse <tim@timculverhouse.com> Tested-by: Inwit <inwit@sindominio.net> Acked-by: Robin Jarry <robin@jarry.cc>
* imap: add support for ORDEREDSUBJECT threading algorithmjp392022-11-092-5/+11
| | | | | | | | | | | | The imap worker incorrectly tries to use the REFERENCES threading algorithm by default although some servers only support the ORDEREDSUBJECT threading algorithm. Use whichever threading algorithm is advertised as supported by the server, buf prefer REFERENCES if available. Signed-off-by: jp39 <jp39@gmx.com> Acked-by: Tim Culverhouse <tim@timculverhouse.com>
* maildir: speedup move to larger foldersBence Ferdinandy2022-11-091-7/+4
| | | | | | | | | | When moving or archiving to a very large folder, aerc requests directory info, which can takes several seconds to receive. Also, when moving, we post a MessagesDeleted message. Remove unnecessary call to directory info and change posted message to the correct MessagesMoved. Signed-off-by: Bence Ferdinandy <bence@ferdinandy.com> Acked-by: Tim Culverhouse <tim@timculverhouse.com>
* notmuch: correct a typo in error messageinwit2022-11-091-1/+1
| | | | | Signed-off-by: inwit <inwit@sindominio.net> Acked-by: Tim Culverhouse <tim@timculverhouse.com>
* notmuch: allow whitespace before '=' in query-mapinwit2022-11-091-2/+2
| | | | | | | | | When reading the query-map file, any white spaces before the '=' were read as part of the query name. Trim any leading and trailing white space from the query name. Signed-off-by: inwit <inwit@sindominio.net> Acked-by: Tim Culverhouse <tim@timculverhouse.com>
* composer: add message previewKoni Marti2022-11-095-8/+25
| | | | | | | | | | Add message preview to the composer. Add preview option to the review window. Open the message in a message viewer before sending to check the headers and attachments. Implements: https://todo.sr.ht/~rjarry/aerc/86 Signed-off-by: Koni Marti <koni.marti@gmail.com> Acked-by: Robin Jarry <robin@jarry.cc>
* lib: prepare attachments for multiple readsKoni Marti2022-11-094-22/+57
| | | | | | | | | | | Prepare attachments for multiple reads. The data for lib.PartAttachment is stored as an io.Reader which can only be read once. This will cause an issue when we want to call composer.WriteMessage multiple times, i.e. for a message preview. We fix this by keeping a copy of the data and create a new reader everytime the attachment is read. Signed-off-by: Koni Marti <koni.marti@gmail.com> Acked-by: Robin Jarry <robin@jarry.cc>
* viewer: open rfc822 attachmentsKoni Marti2022-11-093-10/+29
| | | | | | | | | | Open message/rfc822 attachments from the message viewer when no filter is defined for this mimetype. When the rfc822 part is selected, call the eml command to open the attachment in a new message viewer. Suggested-by: Jens Grassel <jens@wegtam.com> Signed-off-by: Koni Marti <koni.marti@gmail.com> Acked-by: Robin Jarry <robin@jarry.cc>
* commands/eml: open and view eml filesKoni Marti2022-11-092-0/+66
| | | | | | | | | Open and view eml data from a file. Call the eml command and use the completion feature to select an eml file from disk. The eml data will be opened in the message viewer. Signed-off-by: Koni Marti <koni.marti@gmail.com> Acked-by: Robin Jarry <robin@jarry.cc>
* lib: implement an eml message viewKoni Marti2022-11-094-4/+116
| | | | | | | | | Implement a MessageView representation for eml data that are not stored in a message store. With this, we can display any rfc822 message data in the message viewer. Signed-off-by: Koni Marti <koni.marti@gmail.com> Acked-by: Robin Jarry <robin@jarry.cc>
* ui: invalidate ui when queuing redrawTim Culverhouse2022-11-064-5/+3
| | | | | | | | | | | | | | | The QueueRedraw function should always be preceeded by a call to ui.Invalidate in order to make a redraw a occur. In one instance, this was not done and it was possible for the UI to not redraw itself (when a terminal closes, a UI redraw request is made but it is possible for the UI to not be invalidated as a result of the close). Move the call to Invalidate into the QueueRedraw function to ensure that every QueueRedraw call will redraw the screen. Fixes: https://todo.sr.ht/~rjarry/aerc/98 Signed-off-by: Tim Culverhouse <tim@timculverhouse.com> Acked-by: Robin Jarry <robin@jarry.cc>
* split: close current split after replacing with newTim Culverhouse2022-11-061-3/+3
| | | | | | | | | | Close the current split view after replacing it with a new view. Previously we closed it before replacing it with the new split view which could create a race condition when attempting the replace. Reported-by: Bence Ferdinandy <bence@ferdinandy.com> Signed-off-by: Tim Culverhouse <tim@timculverhouse.com> Acked-by: Robin Jarry <robin@jarry.cc>
* msglist: style search resultsTim Culverhouse2022-11-066-0/+21
| | | | | | | | Add option to style search results in the message list. Set default style for results. Signed-off-by: Tim Culverhouse <tim@timculverhouse.com> Acked-by: Robin Jarry <robin@jarry.cc>
* maildir: keep less data in memory for sortingTim Culverhouse2022-11-063-1/+67
| | | | | | | | | | | | | | | | Sorting opens and reads portions of every file within a directory in order to gather the data needed. Specifically, RFC822Headers and BodyStructure are not needed. The RFC822Headers field stores a lot of information, and the BodyStructure field requires parsing the body of the email. Don't set these two values when parsing. Note: in my testing, this dropped sorting a 52k archive from 2.2gb of ram usage, to < 500mb Signed-off-by: Tim Culverhouse <tim@timculverhouse.com> Acked-by: Robin Jarry <robin@jarry.cc>
* maildir/search: get MessageInfos in parallelTim Culverhouse2022-11-061-8/+23
| | | | | | | | Searching in the maildir worker requires reading each file in the directory. Use waitgroups and goroutines to read files in parallel. Signed-off-by: Tim Culverhouse <tim@timculverhouse.com> Acked-by: Robin Jarry <robin@jarry.cc>
* maildir/sort: get MessageInfos in parallelTim Culverhouse2022-11-061-6/+22
| | | | | | | | Sorting in the maildir worker requires reading each file in the directory. Use waitgroups and goroutines to read files in parallel. Signed-off-by: Tim Culverhouse <tim@timculverhouse.com> Acked-by: Robin Jarry <robin@jarry.cc>
* msgviewer: warn user when pager is not in PATHTim Culverhouse2022-11-061-1/+11
| | | | | | | | | Warn user when configured pager is not in PATH. Attempt fallbacks, and throw error if none of the fallbacks are in PATH. Fixes: https://todo.sr.ht/~rjarry/aerc/94 Signed-off-by: Tim Culverhouse <tim@timculverhouse.com> Acked-by: Robin Jarry <robin@jarry.cc>