aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md1
-rw-r--r--commands/msgview/open.go12
2 files changed, 10 insertions, 3 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 479296be..a9db8acd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -23,6 +23,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- `:archive` now works on servers using a different delimiter
- `:save -a` now works with multiple attachments with the same filename
+- `:open` uses the attachment extension for temporary files, if possible
### Changed
diff --git a/commands/msgview/open.go b/commands/msgview/open.go
index 0380b51a..9ceccb5a 100644
--- a/commands/msgview/open.go
+++ b/commands/msgview/open.go
@@ -5,6 +5,7 @@ import (
"io"
"mime"
"os"
+ "path/filepath"
"git.sr.ht/~rjarry/aerc/lib"
"git.sr.ht/~rjarry/aerc/log"
@@ -36,11 +37,16 @@ func (Open) Execute(aerc *widgets.Aerc, args []string) error {
extension := ""
mimeType := ""
- // try to determine the correct extension based on mimetype
+ // try to determine the correct extension
if part, err := mv.MessageView().BodyStructure().PartAtIndex(p.Index); err == nil {
mimeType = part.FullMIMEType()
- if exts, _ := mime.ExtensionsByType(mimeType); len(exts) > 0 {
- extension = exts[0]
+ // see if we can get extension directly from the attachment name
+ extension = filepath.Ext(part.FileName())
+ // if there is no extension, try using the attachment mime type instead
+ if extension == "" {
+ if exts, _ := mime.ExtensionsByType(mimeType); len(exts) > 0 {
+ extension = exts[0]
+ }
}
}