aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--commands/account/view.go3
-rw-r--r--commands/msg/archive.go3
-rw-r--r--commands/msg/delete.go3
-rw-r--r--commands/msg/recall.go3
-rw-r--r--commands/msgview/next.go3
-rw-r--r--config/aerc.conf6
-rw-r--r--config/config.go2
-rw-r--r--doc/aerc-config.5.scd5
-rw-r--r--lib/messageview.go6
-rw-r--r--widgets/msglist.go4
-rw-r--r--worker/imap/fetch.go5
11 files changed, 33 insertions, 10 deletions
diff --git a/commands/account/view.go b/commands/account/view.go
index 8537d331..be8b45e4 100644
--- a/commands/account/view.go
+++ b/commands/account/view.go
@@ -45,7 +45,8 @@ func (ViewMessage) Execute(aerc *widgets.Aerc, args []string) error {
aerc.PushError(msg.Error.Error())
return nil
}
- lib.NewMessageStoreView(msg, store, aerc.Crypto, aerc.DecryptKeys,
+ lib.NewMessageStoreView(msg, acct.UiConfig().AutoMarkRead,
+ store, aerc.Crypto, aerc.DecryptKeys,
func(view lib.MessageView, err error) {
if err != nil {
aerc.PushError(err.Error())
diff --git a/commands/msg/archive.go b/commands/msg/archive.go
index f7baff01..2935991c 100644
--- a/commands/msg/archive.go
+++ b/commands/msg/archive.go
@@ -120,7 +120,8 @@ func (Archive) Execute(aerc *widgets.Aerc, args []string) error {
acct.Messages().Invalidate()
return
}
- lib.NewMessageStoreView(next, store, aerc.Crypto, aerc.DecryptKeys,
+ lib.NewMessageStoreView(next, acct.UiConfig().AutoMarkRead,
+ store, aerc.Crypto, aerc.DecryptKeys,
func(view lib.MessageView, err error) {
if err != nil {
aerc.PushError(err.Error())
diff --git a/commands/msg/delete.go b/commands/msg/delete.go
index ee682a47..57cef34d 100644
--- a/commands/msg/delete.go
+++ b/commands/msg/delete.go
@@ -63,7 +63,8 @@ func (Delete) Execute(aerc *widgets.Aerc, args []string) error {
acct.Messages().Invalidate()
return
}
- lib.NewMessageStoreView(next, store, aerc.Crypto, aerc.DecryptKeys,
+ lib.NewMessageStoreView(next, acct.UiConfig().AutoMarkRead,
+ store, aerc.Crypto, aerc.DecryptKeys,
func(view lib.MessageView, err error) {
if err != nil {
aerc.PushError(err.Error())
diff --git a/commands/msg/recall.go b/commands/msg/recall.go
index 5fc3a265..4ef505ef 100644
--- a/commands/msg/recall.go
+++ b/commands/msg/recall.go
@@ -137,7 +137,8 @@ func (Recall) Execute(aerc *widgets.Aerc, args []string) error {
})
}
- lib.NewMessageStoreView(msgInfo, store, aerc.Crypto, aerc.DecryptKeys,
+ lib.NewMessageStoreView(msgInfo, acct.UiConfig().AutoMarkRead,
+ store, aerc.Crypto, aerc.DecryptKeys,
func(msg lib.MessageView, err error) {
if err != nil {
aerc.PushError(err.Error())
diff --git a/commands/msgview/next.go b/commands/msgview/next.go
index c80e0ab6..b9e5dbda 100644
--- a/commands/msgview/next.go
+++ b/commands/msgview/next.go
@@ -42,7 +42,8 @@ func (NextPrevMsg) Execute(aerc *widgets.Aerc, args []string) error {
aerc.RemoveTab(mv)
return nil
}
- lib.NewMessageStoreView(nextMsg, store, aerc.Crypto, aerc.DecryptKeys,
+ lib.NewMessageStoreView(nextMsg, acct.UiConfig().AutoMarkRead,
+ store, aerc.Crypto, aerc.DecryptKeys,
func(view lib.MessageView, err error) {
if err != nil {
aerc.PushError(err.Error())
diff --git a/config/aerc.conf b/config/aerc.conf
index 0bd96fb5..1f9c8021 100644
--- a/config/aerc.conf
+++ b/config/aerc.conf
@@ -130,6 +130,12 @@ sort=
# Default: true
next-message-on-delete=true
+# Automatically set the "seen" flag when a message is opened in the message
+# viewer.
+#
+# Default: true
+auto-mark-read=true
+
# The directories where the stylesets are stored. It takes a colon-separated
# list of directories. If this is unset or if a styleset cannot be found, the
# following paths will be used as a fallback in that order:
diff --git a/config/config.go b/config/config.go
index e31d1a14..faaab610 100644
--- a/config/config.go
+++ b/config/config.go
@@ -33,6 +33,7 @@ type GeneralConfig struct {
}
type UIConfig struct {
+ AutoMarkRead bool `ini:"auto-mark-read"`
IndexFormat string `ini:"index-format"`
TimestampFormat string `ini:"timestamp-format"`
ThisDayTimeFormat string `ini:"this-day-time-format"`
@@ -746,6 +747,7 @@ func LoadConfigFromFile(root *string, accts []string) (*AercConfig, error) {
},
Ui: UIConfig{
+ AutoMarkRead: true,
IndexFormat: "%-20.20D %-17.17n %Z %s",
TimestampFormat: "2006-01-02 03:04 PM",
ThisDayTimeFormat: "",
diff --git a/doc/aerc-config.5.scd b/doc/aerc-config.5.scd
index 9eb87904..78a39e39 100644
--- a/doc/aerc-config.5.scd
+++ b/doc/aerc-config.5.scd
@@ -218,6 +218,11 @@ These options are configured in the *[ui]* section of aerc.conf.
Default: true
+*auto-mark-read*
+ Set the "seen" flag when a message is opened in the message viewer.
+
+ Default: true
+
*completion-popovers*
Shows potential auto-completions for text inputs in popovers.
diff --git a/lib/messageview.go b/lib/messageview.go
index ff754a43..d774f4f3 100644
--- a/lib/messageview.go
+++ b/lib/messageview.go
@@ -58,7 +58,7 @@ type MessageStoreView struct {
bodyStructure *models.BodyStructure
}
-func NewMessageStoreView(messageInfo *models.MessageInfo,
+func NewMessageStoreView(messageInfo *models.MessageInfo, setSeen bool,
store *MessageStore, pgp crypto.Provider, decryptKeys openpgp.PromptFunction,
cb func(MessageView, error),
) {
@@ -97,7 +97,9 @@ func NewMessageStoreView(messageInfo *models.MessageInfo,
} else {
cb(msv, nil)
}
- store.Flag([]uint32{messageInfo.Uid}, models.SeenFlag, true, nil)
+ if setSeen {
+ store.Flag([]uint32{messageInfo.Uid}, models.SeenFlag, true, nil)
+ }
}
func (msv *MessageStoreView) MessageInfo() *models.MessageInfo {
diff --git a/widgets/msglist.go b/widgets/msglist.go
index ba09a8ec..74308ccb 100644
--- a/widgets/msglist.go
+++ b/widgets/msglist.go
@@ -308,8 +308,8 @@ func (ml *MessageList) MouseEvent(localX int, localY int, event tcell.Event) {
if msg == nil {
return
}
- lib.NewMessageStoreView(msg, store, ml.aerc.Crypto,
- ml.aerc.DecryptKeys,
+ lib.NewMessageStoreView(msg, acct.UiConfig().AutoMarkRead,
+ store, ml.aerc.Crypto, ml.aerc.DecryptKeys,
func(view lib.MessageView, err error) {
if err != nil {
ml.aerc.PushError(err.Error())
diff --git a/worker/imap/fetch.go b/worker/imap/fetch.go
index 79c9148b..3b9c7862 100644
--- a/worker/imap/fetch.go
+++ b/worker/imap/fetch.go
@@ -94,6 +94,7 @@ func (imapw *IMAPWorker) handleFetchMessageBodyPart(
partBodySection.Specifier = imap.TextSpecifier
}
partBodySection.Path = msg.Part
+ partBodySection.Peek = true
items := []imap.FetchItem{
imap.FetchEnvelope,
@@ -150,7 +151,9 @@ func (imapw *IMAPWorker) handleFetchFullMessages(
msg *types.FetchFullMessages,
) {
logging.Infof("Fetching full messages: %v", msg.Uids)
- section := &imap.BodySectionName{}
+ section := &imap.BodySectionName{
+ Peek: true,
+ }
items := []imap.FetchItem{
imap.FetchEnvelope,
imap.FetchFlags,