diff options
author | C. McEnroe | 2020-04-02 10:47:17 -0400 |
---|---|---|
committer | C. McEnroe | 2020-04-02 10:47:17 -0400 |
commit | 6333b632240cddaa9d59bfc0722d68b045e827d0 (patch) | |
tree | d6fb68c10763142da0696fb2baf8167237347d6a | |
parent | 6e7613c1cef691a41f8ec8a823416241a8efd442 (diff) |
Switch to windows with ascending unread counts on M-a
-rw-r--r-- | ui.c | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/ui.c b/ui.c index 3e9b95d..023de21 100644 --- a/ui.c +++ b/ui.c @@ -21,6 +21,7 @@ #include <curses.h> #include <err.h> #include <errno.h> +#include <limits.h> #include <signal.h> #include <stdarg.h> #include <stdbool.h> @@ -848,19 +849,29 @@ static void showAuto(void) { if (windows.swap != swap) { swap = windows.show; } + uint minHot = UINT_MAX, numHot; + uint minWarm = UINT_MAX, numWarm; for (uint num = 0; num < windows.len; ++num) { - if (windows.ptrs[num]->heat < Hot) continue; - windowShow(num); - windows.swap = swap; - return; + if (windows.ptrs[num]->heat >= Hot) { + if (windows.ptrs[num]->unreadWarm >= minHot) continue; + minHot = windows.ptrs[num]->unreadWarm; + numHot = num; + } + if (windows.ptrs[num]->heat >= Warm) { + if (windows.ptrs[num]->unreadWarm >= minWarm) continue; + minWarm = windows.ptrs[num]->unreadWarm; + numWarm = num; + } } - for (uint num = 0; num < windows.len; ++num) { - if (windows.ptrs[num]->heat < Warm) continue; - windowShow(num); + if (minHot < UINT_MAX) { + windowShow(numHot); windows.swap = swap; - return; + } else if (minWarm < UINT_MAX) { + windowShow(numWarm); + windows.swap = swap; + } else { + windowShow(windows.swap); } - windowShow(windows.swap); } static void keyCode(int code) { |