open: allow overriding default program
Instead of xdg-open (or open on MacOS), allow forcing a program to open a message part. The program is determined in that order of priority: 1) If :open has arguments, they will be used as command to open the attachment. If the arguments contain the {} placeholder, the temporary file will be substituted, otherwise the file path is added at the end of the arguments. 2) If a command is specified in the [openers] section of aerc.conf for the part MIME type, then it is used with the same rules of {} substitution. 3) Finally, fallback to xdg-open/open with the file path as argument. Update the docs and default config accordingly with examples. Fixes: https://todo.sr.ht/~rjarry/aerc/64 Co-authored-by: Jason Stewart <support@eggplantsd.com> Signed-off-by: Robin Jarry <robin@jarry.cc> Tested-by: Tim Culverhouse <tim@timculverhouse.com> Acked-by: Moritz Poldrack <moritz@poldrack.dev>
This commit is contained in:
parent
92ba132d70
commit
45bff88515
7 changed files with 104 additions and 9 deletions
commands/msgview
|
@ -48,10 +48,11 @@ func (Open) Execute(aerc *widgets.Aerc, args []string) error {
|
|||
|
||||
mv.MessageView().FetchBodyPart(p.Index, func(reader io.Reader) {
|
||||
extension := ""
|
||||
mimeType := ""
|
||||
|
||||
// try to determine the correct extension based on mimetype
|
||||
if part, err := mv.MessageView().BodyStructure().PartAtIndex(p.Index); err == nil {
|
||||
mimeType := fmt.Sprintf("%s/%s", part.MIMEType, part.MIMESubType)
|
||||
|
||||
mimeType = fmt.Sprintf("%s/%s", part.MIMEType, part.MIMESubType)
|
||||
if exts, _ := mime.ExtensionsByType(mimeType); len(exts) > 0 {
|
||||
extension = exts[0]
|
||||
}
|
||||
|
@ -71,7 +72,8 @@ func (Open) Execute(aerc *widgets.Aerc, args []string) error {
|
|||
}
|
||||
|
||||
go func() {
|
||||
err = lib.XDGOpen(tmpFile.Name())
|
||||
openers := aerc.Config().Openers
|
||||
err = lib.XDGOpenMime(tmpFile.Name(), mimeType, openers, args[1:])
|
||||
if err != nil {
|
||||
aerc.PushError("open: " + err.Error())
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue