aboutsummaryrefslogtreecommitdiff
path: root/lib
AgeCommit message (Collapse)Author
2019-08-03Remove aerc specific code from the uiNicolai Dagestad
Separatiing the ui code from aerc makes it usable as a library in other projects.
2019-07-29Fix test failuresDrew DeVault
2019-07-29Ring bell when new messages arrive0.2.0Ben Burwell
Add a "new-message-bell" option to the UI section of aerc.conf. A new hook into the message store allows the msglist widget to detect new messages being added to the displayed list. When new messages are delivered, and the new-message-bell option is enabled (as it is by default), the terminal will beep.
2019-07-29lib/msgstore: Fix Select, Next, Prev with filterKevin Kuehler
When filter is active we want to use store.results instead of store.uids, since we are dealing with a subset of the uids. Otherwise any methods involving len will have undefined behavior. Signed-off-by: Kevin Kuehler <keur@ocf.berkeley.edu>
2019-07-26Fix tabstrip over-drawing when not enough spaceJeffas
Tabstrip didn't take into account the width of the context. Now, it just shows as many tabs as can fit and truncates the last one if necessary. In future it probably would be best to ensure that the selected tab is rendered on the screen.
2019-07-26Add tab completion to textinputsJeffas
This adds tab completion to textinput components. They can be configured with a completion function. This function is called when the user presses <tab>. The first completion is initially shown to the user inserted into the text. Repeated presses of <tab> or <backtab> cycle through the completions list. The completions list is invalidated when any other non-tab-like key is pressed. Also changed is some logic for current completion generation so that all available commands are returned when <tab> is pressed with no current text and similarly for arguments of commands.
2019-07-26Fix invalid tab state when deselecting removed tabDrew DeVault
2019-07-26Add command history and cyclingGalen Abell
Aerc will keep track of the previous 1000 commands, which the user can cycle through using the arrow keys while in the ex-line. Pressing up will move backwards in history while pressing down will move forward.
2019-07-26Move msgstore map to dirstoreJeffas
This map represents a mapping from directory names to their associated messagestores anyway so they should be under dirstore. This simply moves them there and adds some methods required to interact with them.
2019-07-26Add new-email triggerJeffas
This patch sets up the trigger config section of aerc.conf. Each trigger has its own function which is called from the place where it is triggered. Currently only the new-email trigger is implemented. The triggers make use of format strings. For instance, in the new-email trigger this allows the user to select the trigger command and also the information extracted from the command and placed into their command. To actually execute the trigger commands the keypresses are simulated. Further triggers can be implemented in the future. Formatting of the command is moved to a new package.
2019-07-25Fix :close on terminal panicJeffas
Executing :close on a terminal would panic due to it already having been removed. This is also related to the fact that removing a tab doesn't check for whether it actually found a tab to remove or not.
2019-07-25Fix grid creating too large subcontextsJeffas
The grid was not checking there was enough space for the cells so would just attempt to create subcontexts that don't actually fit. This attempts to use the remaining space and then if there is no space then it just skips drawing this cell.
2019-07-25Fix panic when tabs.popHistory is nonexistentDrew DeVault
2019-07-25Make :next-result :prev-result relative to cursorKevin Kuehler
Signed-off-by: Kevin Kuehler <keur@ocf.berkeley.edu>
2019-07-23Add change tab commandJeffas
This command allows the user to change tab by giving the tab name. This can be tab completed too. The previous tab is stored in the tabs module so that when a new tab is created it is still possible to go to the previous one. Normal invocation is :ct folder Previous tab is :ct -
2019-07-19Forward mailto links to server via ./aerc <mailto>Drew DeVault
2019-07-19Add Unix socket for communicating with aercDrew DeVault
2019-07-19Implement :filter, :clearKevin Kuehler
Signed-off-by: Kevin Kuehler <keur@ocf.berkeley.edu>
2019-07-17Display user specified headers in viewer if presentDaniel Bridges
2019-07-17Fix grid widths when using weighted widthsJeffas
If the column weights do not collectively divide the extent of the grid layout then some width was not used and so would not be redrawn, resulting in previous drawings showing through. This fixes this by checking if there is any remainingExact width and if there is it is assigned to the weighted columns by their proportion from left to right.
2019-07-17Add MouseEnabled config settingJeffas
This patch adds the ability to control whether aerc captures mouseevents or not. By default it will be set to not capture events.
2019-07-17Fix text input cursor position with non-ASCII textTuomas Siipola
Fixes #171
2019-07-12Fix read reply flag formattingJeffas
The readFlag was displaying wrong and not using combinations of the flags to decide the string.
2019-07-12Create UIDStore packageBen Burwell
This package can be used to provide a source for mapping mock UIDs back to relevant keys for alternate backends. For example, for the Maildir backend, we need to map between UID and message file names.
2019-07-11Add clickable tabsJeffas
This introduces a new interface `Clickable`. I'd imagine this would be implemented for most widgets eventually and would allow for programs run in the terminal to also have their mouse events forwarded to them. For the tabs it was relatively simple to check that the position of the click is within the boxes for the tabs. For other components I'd imagine that some state representing their currently drawn bounding box would be useful.
2019-07-11#190 Handle gmail duplicate folderDaniel Bridges
2019-07-11Support imaps with oauthbearer authentication (Gmail)Frode Aannevik
imaps+oauthbearer://user:token@host?token_endpoint=... - the config Source password is used as access token if no token_endpoint parameter is set - the config Source password is used as refresh token if token_endpoint parameter is set, and used to exchange with an access token The implementation has only been tested with Gmail. source = imaps+oauthbearer://{username}:{refersh_token}@imap.gmail.com:993? \ client_id=XX&\ client_secret=XX&\ token_endpoint=https%3A%2F%2Faccounts.google.com%2Fo%2Foauth2%2Ftoken client credentials created with https://console.developers.google.com/apis/credentials refresh token created with https://github.com/google/gmail-oauth2-tools/blob/master/python/oauth2.py rel: https://todo.sr.ht/~sircmpwn/aerc2/42
2019-07-08Fix re-opening of expired pipe tabsDrew DeVault
2019-07-08Factor IMAP-specific structs out of UI modelsBen Burwell
Before, we were using several IMAP-specific concepts to represent information being displayed in the UI. Factor these structures out of the IMAP package to make it easier for other backends to provide the required information.
2019-07-08Use []uint32 instead of imap.SeqSetBen Burwell
A sequence-set is an IMAP-specific implementation detail. Throughout the UI, aerc simply operates using lists of opaque identifiers. In order to loosen the coupling between the UI and IMAP in particular, replace most usages of imap.SeqSet with []uint32, leaving the translation to a SeqSet to the IMAP backend as needed.
2019-07-08Factor UI models out of the worker message packageBen Burwell
Before, the information needed to display different parts of the UI was tightly coupled to the specific messages being sent back and forth to the backend worker. Separating out a models package allows us to be more specific about exactly what a backend is able to and required to provide for the UI.
2019-07-04Sort out dirstore once and for allDrew DeVault
2019-07-04Use go-message implementation of GenerateMessageIDBen Burwell
Now that this is available in the upstream, we no longer need to maintain a parallel implementation.
2019-07-04Use "open" instead of "xdg-open" on Darwin systemsBen Burwell
2019-06-29panic: runtime error: index out of range in handleFetchMessages (#127)Zach Sisco
2019-06-29Add new lib/dirstore to source completions fromGregory Mullen
2019-06-29Implement basic tab completion supportGregory Mullen
Tab completion currently only works on commands. Contextual completion will be added in the future.
2019-06-26Implement :search, :next-result, :prev-resultDrew DeVault
2019-06-16Ensure that flags are set properlyAditya Mahajan
The current implementation has three classes of flags: - readFlag - delFlag - flaggedFlag The logic to check for them should be in parallel if branches rather than in sequential if-else ladder.
2019-06-11lib/ui/tab: Add Replace methodKevin Kuehler
Also expose a light wrapper method in aerc.go for tab replacement Signed-off-by: Kevin Kuehler <kkuehler@brave.com>
2019-06-11Move select functionality from msglist to msgstoreKevin Kuehler
Remove msglist Next and Prev commands Signed-off-by: Kevin Kuehler <kkuehler@brave.com>
2019-06-09Add :read and :unread commandsDrew DeVault
2019-06-09Update our message flags when server updates themDrew DeVault
2019-06-09Add archive commandRobert Günzler
Adds an archive command that moves the current message into the folder specified in the account config entry. Supports three layouts at this point: - flat: puts all messages next to each other - year: creates a folder per year - month: same as above, plus folders per month This also adds a "-p" argument to "cp" and "mv" that works like "--parents" on mkdir(1). We use this to auto-create the directories for the archive layout.
2019-06-08msglist: use distinct style for unread emailsYash Srivastav
2019-06-07Message list: implement index-format optionYash Srivastav
2019-06-03Fix #1160.1.0Drew DeVault
2019-06-02Add Tabs historyReto Brunner
Fixes #77: When closing a tab, bring you back to the one you last had focused
2019-05-25ensureScroll on text input framesDrew DeVault
2019-05-25Implement scrolling in text inputDrew DeVault