aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2019-05-25Implement scrolling in text inputDrew DeVault
2019-05-25Implement :forwardDrew DeVault
2019-05-25Fix special characters in address.PersonalNameDrew DeVault
2019-05-24Change ex command to C-x when using terminalDrew DeVault
2019-05-23Bind :compose to C in binds.confFrancis Dinh
The tutorial mentions using "C" for composing messages, but this was not actually implemented in binds.conf.
2019-05-23Fix key value typo in documentationRoshless
2019-05-22Mention custom headers in aerc-tutorial(7)Drew DeVault
2019-05-22Minor fixes to list of filter dependenciesFrancis Dinh
- "sockify" -> "socksify" - Added colorama dependency
2019-05-22Makefile: Minor improvements, usage of $@ and $(RM)Stefan Tatschner
2019-05-22Correct typo in MakefileDrew DeVault
2019-05-22Install $(MANDIR)/man7Drew DeVault
2019-05-22Install aerc-tutorial man page with make installDrew DeVault
2019-05-22Minor improvements to aerc-tutorialDrew DeVault
2019-05-22Install default configs to XDG config if not foundDrew DeVault
2019-05-22Add GOFLAGS variable to MakefileDrew DeVault
2019-05-22Show account wizard if no accounts configuredDrew DeVault
2019-05-22Implement :helpDrew 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-21Use kebab-case for cred-cmdsDrew DeVault
2019-05-20Load IMAP worker for imap+insecureDrew DeVault
2019-05-20Pass ServerName to tls.Config for SMTPDrew 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-20asdfDrew DeVault
2019-05-20pipe.go: let tab widget handle ellipsisDrew DeVault
2019-05-19Missed a spotDrew DeVault
2019-05-19Rename :delete-message et al to :delete et alDrew DeVault
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-19Implement :pwd commandAmin Bandali
2019-05-19worker/types/worker: remove mutexSimon Ser
Worker.callbacks contains two types of callbacks: some are action callbacks, some are message callbacks. Each of those is access from one side of the communication channel (UI goroutine vs. worker goroutine). Instead of using a channel, we can use two different maps for each kind. This simplifies the code and also ensures we don't call an action callback instead of a message callback (or the other way around).
2019-05-19worker/types/worker: make ID allocation atomicSimon Ser
Message IDs are allocated for both messages from UI to workers and the other way around. Hence, the global nextId variable is accessed from multiple goroutines. Instead, use atomic to access the global counter.
2019-05-19worker/types/worker: set ID before sending messageSimon Ser
The previous code set the message ID after sending it, which could result in the receiver reading the ID before it's set.
2019-05-19lib/ui/ui: use atomic instead of channelSimon Ser
This makes it so an atomic `invalid` value is used instead of an unbuffered channel. When many invalidations kick in, a lot of values were sent to the channel. (Since OnInvalidate's callback can be run in any goroutine, we need to be careful about races here.)
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-19Update go-imap and go-imap-idleSimon Ser
This fixes a race condition in go-imap-idle. See [1]. [1]: https://github.com/emersion/go-imap-idle/commit/2704abd7050ed7f2143753554ee23affdf847bd9
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-18Fix scdoc & gofmt issuesDrew DeVault
2019-05-18Implement loading passwords from external commandsGalen Abell
* Resolves #80
2019-05-17s/aerc2/aerc/gDrew DeVault
2019-05-17Document dependenciesDrew DeVault