diff options
author | Drew DeVault <sir@cmpwn.com> | 2019-05-26 11:18:51 -0400 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2019-05-26 11:18:51 -0400 |
commit | 3cf6c82633fb153663e7927e20818f355d949a89 (patch) | |
tree | 8d7e429ddbd3cc74d18cf1c4762085aee88ac69e | |
parent | d30a6e3d1f1cf035d018ec27145ef57c4ce41606 (diff) |
msgviewer: copy stderr into pager
This prevents a broken filter config from being a silent error
-rw-r--r-- | widgets/msgviewer.go | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/widgets/msgviewer.go b/widgets/msgviewer.go index 39ee637..e0fe6aa 100644 --- a/widgets/msgviewer.go +++ b/widgets/msgviewer.go @@ -386,15 +386,31 @@ func (pv *PartViewer) attemptCopy() { header.SetText("Content-Description", pv.part.Description) if pv.filter != nil { stdout, _ := pv.filter.StdoutPipe() + stderr, _ := pv.filter.StderrPipe() pv.filter.Start() + ch := make(chan interface{}) go func() { _, err := io.Copy(pv.pagerin, stdout) if err != nil { pv.err = err pv.Invalidate() } - pv.pagerin.Close() stdout.Close() + ch <- nil + }() + go func() { + _, err := io.Copy(pv.pagerin, stderr) + if err != nil { + pv.err = err + pv.Invalidate() + } + stderr.Close() + ch <- nil + }() + go func() { + <-ch + <-ch + pv.pagerin.Close() }() } go func() { |