Switch to windows with ascending unread counts on M-a

master
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 <err.h>
#include <errno.h>
#include <limits.h>
#include <signal.h>
#include <stdarg.h>
#include <stdbool.h>
@ -848,20 +849,30 @@ 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;
}
for (uint num = 0; num < windows.len; ++num) {
if (windows.ptrs[num]->heat < Warm) continue;
windowShow(num);
windows.swap = swap;
return;
if (windows.ptrs[num]->heat >= Warm) {
if (windows.ptrs[num]->unreadWarm >= minWarm) continue;
minWarm = windows.ptrs[num]->unreadWarm;
numWarm = num;
}
}
if (minHot < UINT_MAX) {
windowShow(numHot);
windows.swap = swap;
} else if (minWarm < UINT_MAX) {
windowShow(numWarm);
windows.swap = swap;
} else {
windowShow(windows.swap);
}
}
static void keyCode(int code) {
struct Window *window = windows.ptrs[windows.show];