aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKoni Marti <koni.marti@gmail.com>2024-05-14 23:43:12 +0200
committerRobin Jarry <robin@jarry.cc>2024-05-28 23:52:40 +0200
commit2276a796f36cb6e213aca3b760b411202ed24e0e (patch)
treefb3f172cd733e1d768ff6099b4a6f3a6de439c98
parent9f97c698e3dd8bb98242f0db40946dee514e3ee8 (diff)
downloadaerc-2276a796f36cb6e213aca3b760b411202ed24e0e.tar.gz
ui: add select-last-message option
Add a [ui].select-last-message option to position the cursor at the bottom of the message list view. Fixes: https://todo.sr.ht/~rjarry/aerc/254 Changelog-added: Add `[ui].select-last-message` option to position cursor at the bottom of the view. Suggested-by: Bence Ferdinandy <bence@ferdinandy.com> Requested-by: Tomasz Kramkowski <tomasz@kramkow.ski> Signed-off-by: Koni Marti <koni.marti@gmail.com> Tested-by: Tomasz Kramkowski <tomasz@kramkow.ski> Acked-by: Robin Jarry <robin@jarry.cc>
-rw-r--r--app/account.go1
-rw-r--r--config/aerc.conf6
-rw-r--r--config/ui.go1
-rw-r--r--doc/aerc-config.5.scd6
-rw-r--r--lib/msgstore.go9
5 files changed, 22 insertions, 1 deletions
diff --git a/app/account.go b/app/account.go
index ab5793bc..07c6801d 100644
--- a/app/account.go
+++ b/app/account.go
@@ -247,6 +247,7 @@ func (acct *AccountView) newStore(name string) *lib.MessageStore {
uiConf.ThreadingEnabled,
uiConf.ForceClientThreads,
uiConf.ClientThreadsDelay,
+ uiConf.SelectLast,
uiConf.ReverseOrder,
uiConf.ReverseThreadOrder,
uiConf.SortThreadSiblings,
diff --git a/config/aerc.conf b/config/aerc.conf
index ccfbe748..a7d763d7 100644
--- a/config/aerc.conf
+++ b/config/aerc.conf
@@ -371,6 +371,12 @@
# Default: false
#reverse-thread-order=false
+# Positions the cursor on the last message in the message list (at the
+# bottom of the view) when opening a new folder.
+#
+# Default: false
+#select-last-message=false
+
# Sort the thread siblings according to the sort criteria for the messages. If
# sort-thread-siblings is false, the thread siblings will be sorted based on
# the message UID in ascending order. This option is only applicable for
diff --git a/config/ui.go b/config/ui.go
index 7da365d6..7c7f1869 100644
--- a/config/ui.go
+++ b/config/ui.go
@@ -80,6 +80,7 @@ type UIConfig struct {
BorderCharVertical rune `ini:"border-char-vertical" default:"│" type:"rune"`
BorderCharHorizontal rune `ini:"border-char-horizontal" default:"─" type:"rune"`
+ SelectLast bool `ini:"select-last-message" default:"false"`
ReverseOrder bool `ini:"reverse-msglist-order"`
ReverseThreadOrder bool `ini:"reverse-thread-order"`
SortThreadSiblings bool `ini:"sort-thread-siblings"`
diff --git a/doc/aerc-config.5.scd b/doc/aerc-config.5.scd
index c8c7604c..17cea5ff 100644
--- a/doc/aerc-config.5.scd
+++ b/doc/aerc-config.5.scd
@@ -469,6 +469,12 @@ These options are configured in the *[ui]* section of _aerc.conf_.
Default: _false_
+*select-last-message* = _true_|_false_
+ Positions the cursor on the last message in the message list (at the
+ bottom of the view) when opening a new folder.
+
+ Default: _false_
+
*sort-thread-siblings* = _true_|_false_
Sort the thread siblings according to the sort criteria for the messages. If
sort-thread-siblings is false, the thread siblings will be sorted based on
diff --git a/lib/msgstore.go b/lib/msgstore.go
index 8f626eb8..b4790735 100644
--- a/lib/msgstore.go
+++ b/lib/msgstore.go
@@ -48,6 +48,7 @@ type MessageStore struct {
sortDefault []*types.SortCriterion
threadedView bool
+ selectLast bool
reverseThreadOrder bool
threadContext bool
sortThreadSiblings bool
@@ -89,6 +90,7 @@ const MagicUid = 0xFFFFFFFF
func NewMessageStore(worker *types.Worker,
defaultSortCriteria []*types.SortCriterion,
thread bool, clientThreads bool, clientThreadsDelay time.Duration,
+ selectLast bool,
reverseOrder bool, reverseThreadOrder bool, sortThreadSiblings bool,
triggerNewEmail func(*models.MessageInfo),
triggerDirectoryChange func(), triggerMailDeleted func(),
@@ -116,6 +118,7 @@ func NewMessageStore(worker *types.Worker,
threadedView: thread,
buildThreads: clientThreads,
threadContext: threadContext,
+ selectLast: selectLast,
reverseThreadOrder: reverseThreadOrder,
sortThreadSiblings: sortThreadSiblings,
@@ -745,7 +748,11 @@ func (store *MessageStore) Selected() *models.MessageInfo {
func (store *MessageStore) SelectedUid() uint32 {
if store.selectedUid == MagicUid && len(store.Uids()) > 0 {
iter := store.UidsIterator()
- store.Select(store.Uids()[iter.StartIndex()])
+ idx := iter.StartIndex()
+ if store.selectLast {
+ idx = iter.EndIndex()
+ }
+ store.Select(store.Uids()[idx])
}
return store.selectedUid
}