diff options
author | Koni Marti <koni.marti@gmail.com> | 2022-06-14 21:10:48 +0200 |
---|---|---|
committer | Robin Jarry <robin@jarry.cc> | 2022-06-14 22:12:48 +0200 |
commit | e1d8bc4d17cb7bd79e19fdf866d1da2fedda4de5 (patch) | |
tree | ececff85e82e42a2b95b27b03e53c79768ad0709 /commands/msgview | |
parent | 4753cfd3e33f985ec22c5600a8d7e68b72175607 (diff) | |
download | aerc-e1d8bc4d17cb7bd79e19fdf866d1da2fedda4de5.tar.gz |
msgviewer: open http links from messages
Parse http links from a message and display them as completions in the
:open-link command.
Add the following binds to the [view] section in your binds.conf:
<C-l> = :open-link <space>
Parsing can be disabled in aerc.conf by setting parse-http-links to
false in the viewer section.
Thanks to Moritz for the help with the regular expression.
Signed-off-by: Koni Marti <koni.marti@gmail.com>
Reviewed-by: Moritz Poldrack <git@moritz.sh>
Acked-by: Robin Jarry <robin@jarry.cc>
Diffstat (limited to 'commands/msgview')
-rw-r--r-- | commands/msgview/open.go | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/commands/msgview/open.go b/commands/msgview/open.go index d8a4de01..3d62fe22 100644 --- a/commands/msgview/open.go +++ b/commands/msgview/open.go @@ -8,6 +8,7 @@ import ( "os" "time" + "git.sr.ht/~rjarry/aerc/commands" "git.sr.ht/~rjarry/aerc/lib" "git.sr.ht/~rjarry/aerc/logging" "git.sr.ht/~rjarry/aerc/widgets" @@ -20,10 +21,16 @@ func init() { } func (Open) Aliases() []string { - return []string{"open"} + return []string{"open", "open-link"} } func (Open) Complete(aerc *widgets.Aerc, args []string) []string { + mv := aerc.SelectedTab().(*widgets.MessageViewer) + if mv != nil { + if p := mv.SelectedMessagePart(); p != nil { + return commands.CompletionFromList(aerc, p.Links, args) + } + } return nil } @@ -31,6 +38,17 @@ func (Open) Execute(aerc *widgets.Aerc, args []string) error { mv := aerc.SelectedTab().(*widgets.MessageViewer) p := mv.SelectedMessagePart() + if args[0] == "open-link" && len(args) > 1 { + if link := args[1]; link != "" { + go func() { + if err := lib.NewXDGOpen(link).Start(); err != nil { + aerc.PushError(fmt.Sprintf("%s: %s", args[0], err.Error())) + } + }() + } + return nil + } + store := mv.Store() store.FetchBodyPart(p.Msg.Uid, p.Index, func(reader io.Reader) { extension := "" |