Switch to windows with ascending unread counts on M-a

weechat-hashes
C. McEnroe 2020-04-02 10:47:17 -04:00
parent 6e7613c1ce
commit 6333b63224
1 changed files with 20 additions and 9 deletions

29
ui.c
View File

@ -21,6 +21,7 @@
#include <curses.h> #include <curses.h>
#include <err.h> #include <err.h>
#include <errno.h> #include <errno.h>
#include <limits.h>
#include <signal.h> #include <signal.h>
#include <stdarg.h> #include <stdarg.h>
#include <stdbool.h> #include <stdbool.h>
@ -848,19 +849,29 @@ static void showAuto(void) {
if (windows.swap != swap) { if (windows.swap != swap) {
swap = windows.show; swap = windows.show;
} }
uint minHot = UINT_MAX, numHot;
uint minWarm = UINT_MAX, numWarm;
for (uint num = 0; num < windows.len; ++num) { for (uint num = 0; num < windows.len; ++num) {
if (windows.ptrs[num]->heat < Hot) continue; if (windows.ptrs[num]->heat >= Hot) {
windowShow(num); if (windows.ptrs[num]->unreadWarm >= minHot) continue;
windows.swap = swap; minHot = windows.ptrs[num]->unreadWarm;
return; 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 (minHot < UINT_MAX) {
if (windows.ptrs[num]->heat < Warm) continue; windowShow(numHot);
windowShow(num);
windows.swap = swap; 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) { static void keyCode(int code) {