aboutsummaryrefslogtreecommitdiff
path: root/widgets
AgeCommit message (Collapse)Author
2019-06-14Set empty message in dirlist if no folder exist.Reto Brunner
2019-06-14imap: respect the folder config optionReto Brunner
2019-06-11Fix automatic scrolling when messages arrive/leaveDrew DeVault
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-09Select user's preferred mimetype in MessageViewerClayton Craft
This implements selecting the most preferred mimetype under the 'View->Alternatives' configuration setting when viewing a message. Mimetypes in the alternatives array are weighted by their position, where the lower the index in the array the higher the priority, so this is taken into account during selection. If no message part matches a mimetype in the alternatives array, then it selects the first mimetype in the message.
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-07Truncate long subject linesDrew DeVault
2019-06-07Message list: implement index-format optionYash Srivastav
2019-06-07Move ANSI stripping from filters to GoDrew DeVault
2019-06-07Remove unnecessary branchDrew DeVault
2019-06-07Execute the editor with the shellDrew DeVault
Fixes #164
2019-06-07Add binding to toggle headersDrew DeVault
2019-06-07implements ability to view headers in message viewYash Srivastav
2019-06-07Skip rendering dirlist if sidebar width is 0Lucas F. Souza
2019-06-05Use SetAddressList for From headerDrew DeVault
2019-06-05Introduce :new-account -tJanUlrich
Adding the [-t] temporary flag to the new-account command - when using -t a newly created account will not be stored into the accounts.conf Issue #134
2019-06-02Add date to message viewerDrew DeVault
2019-06-02widget: Add ProvidesMessage interfaceKevin Kuehler
Consists of 3 functions * Store: Access to MessageStore type * SelectedAccount: Access to Account widget that the target widget belongs to * SelectedMessage: Current message (selected in msglist or the one we are viewing) Signed-off-by: Kevin Kuehler <keur@ocf.berkeley.edu>
2019-06-02Only add message to store if store existsKevin Kuehler
Prevents the program from panicing when changing folders too quickly. onMessage can race store creation for an AccountView. Signed-off-by: Kevin Kuehler <keur@ocf.berkeley.edu>
2019-06-02Enumerate Cc and Bcc lists in composerDrew DeVault
2019-06-02Simplify layout of message viewer gridDrew DeVault
This sub-grid was an artifact of an older design
2019-06-01Use forked version of tcellDrew DeVault
2019-06-01widgets/terminal: Don't segfault on resizeKevin Kuehler
vterm.Write and vterm.SetSize race when the window resizes, which causing the underlying library to segfault. Signed-off-by: Kevin Kuehler <keur@ocf.berkeley.edu>
2019-05-27Add :save and :pipe commands to viewerGalen Abell
* :save takes a path and saves the current message part to that location * :pipe is the same as pipe on the account page, but uses the current message part rather than the whole email (ie :pipe gzip -d) * Refactored account:pipe and extracted common pipe code to commands.util.QuickTerm * Added helper command aerc.PushError
2019-05-26Update terminal color handling per vterm changesDrew DeVault
2019-05-26Update to the latest go-libvtermDrew DeVault
2019-05-26Implement :edit in compose screenDrew DeVault
2019-05-26msgviewer: copy stderr into pagerDrew DeVault
This prevents a broken filter config from being a silent error
2019-05-25Fix special characters in address.PersonalNameDrew DeVault
2019-05-22Show account wizard if no accounts configuredDrew DeVault
2019-05-22Implement opening tutorial after account wizardDrew DeVault
2019-05-22Write new accounts to config and open tabDrew DeVault
2019-05-22Fix always showing last account tabDrew DeVault
2019-05-21Remove excess padding from incoming config pageDrew DeVault
2019-05-21New account wizard, part oneDrew DeVault
2019-05-20Load IMAP worker for imap+insecureDrew DeVault
2019-05-20Show unsupported mimetype message in redDrew DeVault
2019-05-20Show attachment names in multipart viewDrew DeVault
2019-05-20Implement :next-part, :prev-partDrew DeVault
2019-05-20Flesh out multipart switcherDrew DeVault
2019-05-20Refactor message part into dedicated widgetDrew DeVault
2019-05-20Verify TLS certificatesDrew DeVault
I was partway done implementing a UI for users to approve untrusted certs with, but let's just make them configure their servers right instead.
2019-05-19Advance cursor after :delete and :moveDrew DeVault
So that you can repeat the action on the next message if appropriate
2019-05-19Reset message list cursor when switching storesDrew DeVault
2019-05-19Advance message list cursor when messages arriveDrew DeVault
2019-05-19Update internal state and draw from the same goroutineSimon Ser
This commit introduces a new Aerc.Tick function that should be called to refresh the internal state. This in turn makes each AccountView process worker events. The UI goroutine repeatedly refreshes the internal state before drawing a new frame. The reason for this is that many worker messages may need to be processed for a single frame, and drawing the UI is far slower than refreshing the internal state. This has been confirmed in my testing (calling Aerc.Tick only once per frame results in a slower display). Many synchronization code has been removed. We can now write widgets without having to care so much about races. The remaining sync users are: - widgets/spinner: the spinner value is updated from inside an internal goroutine - lib/ui/invalidatable: Invalidate may be called from any goroutine - lib/ui/grid: same - lib/ui/ui: an internal goroutine needs read access to UI.exit - worker/types/worker: Worker.callbacks is used for both worker and UI callbacks The exact goroutine requirements for Drawable have been documented.
2019-05-19widgets/terminal: fix damage race conditionSimon Ser
Terminal.damage is accessed when drawing and when invalidating the widget. For this reason we need to protect it with a mutex. This seems to fix various damage issues I've been experiencing (where some regions of the terminal weren't correctly repainted). Race detector trace: Read at 0x00c0000c6670 by main goroutine: git.sr.ht/~sircmpwn/aerc/widgets.(*Terminal).Draw() /home/simon/src/aerc/widgets/terminal.go:292 +0x191 git.sr.ht/~sircmpwn/aerc/lib/ui.(*Grid).Draw() /home/simon/src/aerc/lib/ui/grid.go:117 +0x575 git.sr.ht/~sircmpwn/aerc/lib/ui.(*Grid).Draw() /home/simon/src/aerc/lib/ui/grid.go:117 +0x575 git.sr.ht/~sircmpwn/aerc/widgets.(*MessageViewer).Draw() /home/simon/src/aerc/widgets/msgviewer.go:231 +0x253 git.sr.ht/~sircmpwn/aerc/lib/ui.(*TabContent).Draw() /home/simon/src/aerc/lib/ui/tab.go:124 +0x12e git.sr.ht/~sircmpwn/aerc/lib/ui.(*Grid).Draw() /home/simon/src/aerc/lib/ui/grid.go:117 +0x575 git.sr.ht/~sircmpwn/aerc/widgets.(*Aerc).Draw() /home/simon/src/aerc/widgets/aerc.go:95 +0x5a git.sr.ht/~sircmpwn/aerc/lib/ui.(*UI).Tick() /home/simon/src/aerc/lib/ui/ui.go:93 +0x1dd main.main() /home/simon/src/aerc/aerc.go:105 +0x539 Previous write at 0x00c0000c6670 by goroutine 37: git.sr.ht/~sircmpwn/aerc/widgets.(*Terminal).onDamage-fm() /home/simon/src/aerc/widgets/terminal.go:429 +0x131 git.sr.ht/~sircmpwn/go-libvterm._go_handle_damage() /home/simon/go/pkg/mod/git.sr.ht/~sircmpwn/go-libvterm@v0.0.0-20190421201021-3184f6f13687/vterm.go:481 +0xf9 git.sr.ht/~sircmpwn/go-libvterm._cgoexpwrap_5e22200b58b7__go_handle_damage() _cgo_gotypes.go:731 +0x58 runtime.call32() /usr/lib/go/src/runtime/asm_amd64.s:519 +0x3a git.sr.ht/~sircmpwn/go-libvterm.(*VTerm).Write.func1() /home/simon/go/pkg/mod/git.sr.ht/~sircmpwn/go-libvterm@v0.0.0-20190421201021-3184f6f13687/vterm.go:329 +0x9d git.sr.ht/~sircmpwn/go-libvterm.(*VTerm).Write() /home/simon/go/pkg/mod/git.sr.ht/~sircmpwn/go-libvterm@v0.0.0-20190421201021-3184f6f13687/vterm.go:329 +0x7f git.sr.ht/~sircmpwn/aerc/widgets.NewTerminal.func1() /home/simon/src/aerc/widgets/terminal.go:131 +0x18c Goroutine 37 (running) created at: git.sr.ht/~sircmpwn/aerc/widgets.NewTerminal() /home/simon/src/aerc/widgets/terminal.go:121 +0x23f git.sr.ht/~sircmpwn/aerc/widgets.NewMessageViewer() /home/simon/src/aerc/widgets/msgviewer.go:147 +0xfbe git.sr.ht/~sircmpwn/aerc/commands/account.ViewMessage() /home/simon/src/aerc/commands/account/view-message.go:26 +0x4a4 git.sr.ht/~sircmpwn/aerc/commands.(*Commands).ExecuteCommand() /home/simon/src/aerc/commands/commands.go:47 +0x1f0 main.main.func1() /home/simon/src/aerc/aerc.go:76 +0x205 git.sr.ht/~sircmpwn/aerc/widgets.(*Aerc).BeginExCommand.func1() /home/simon/src/aerc/widgets/aerc.go:262 +0x89 git.sr.ht/~sircmpwn/aerc/widgets.(*ExLine).Event() /home/simon/src/aerc/widgets/exline.go:47 +0x222 git.sr.ht/~sircmpwn/aerc/widgets.(*Aerc).Event() /home/simon/src/aerc/widgets/aerc.go:133 +0x83c git.sr.ht/~sircmpwn/aerc/widgets.(*Aerc).simulate() /home/simon/src/aerc/widgets/aerc.go:126 +0x12a git.sr.ht/~sircmpwn/aerc/widgets.(*Aerc).Event() /home/simon/src/aerc/widgets/aerc.go:148 +0x766 git.sr.ht/~sircmpwn/aerc/lib/ui.(*UI).Tick() /home/simon/src/aerc/lib/ui/ui.go:86 +0x11b main.main() /home/simon/src/aerc/aerc.go:105 +0x539
2019-05-17s/aerc2/aerc/gDrew DeVault