Hide filtered messages

master
C. McEnroe 2020-03-31 14:31:10 -04:00
parent 25f419465f
commit ca751a1cdc
2 changed files with 8 additions and 0 deletions

View File

@ -445,6 +445,8 @@ Switch to previously selected window.
Switch to previous window. Switch to previous window.
.It Ic C-v .It Ic C-v
Scroll down a page. Scroll down a page.
.It Ic M--
Toggle visibility of filtered messages.
.It Ic M-/ .It Ic M-/
Switch to previously selected window. Switch to previously selected window.
.It Ic M-a .It Ic M-a

6
ui.c
View File

@ -87,6 +87,7 @@ struct Window {
WINDOW *pad; WINDOW *pad;
int scroll; int scroll;
bool mark; bool mark;
bool ignore;
enum Heat heat; enum Heat heat;
uint unread; uint unread;
uint unreadWarm; uint unreadWarm;
@ -146,6 +147,7 @@ static uint windowFor(uint id) {
scrollok(window->pad, true); scrollok(window->pad, true);
wmove(window->pad, WindowLines - 1, 0); wmove(window->pad, WindowLines - 1, 0);
window->mark = true; window->mark = true;
window->ignore = true;
return windowPush(window); return windowPush(window);
} }
@ -211,6 +213,7 @@ static short colorPair(short fg, short bg) {
X(KeyMetaU, "\33u", NULL) \ X(KeyMetaU, "\33u", NULL) \
X(KeyMetaV, "\33v", NULL) \ X(KeyMetaV, "\33v", NULL) \
X(KeyMetaEnter, "\33\r", "\33\n") \ X(KeyMetaEnter, "\33\r", "\33\n") \
X(KeyMetaMinus, "\33-", "\33_") \
X(KeyMetaSlash, "\33/", NULL) \ X(KeyMetaSlash, "\33/", NULL) \
X(KeyFocusIn, "\33[I", NULL) \ X(KeyFocusIn, "\33[I", NULL) \
X(KeyFocusOut, "\33[O", NULL) \ X(KeyFocusOut, "\33[O", NULL) \
@ -587,6 +590,7 @@ void uiWrite(uint id, enum Heat heat, const time_t *src, const char *str) {
struct Window *window = windows.ptrs[windowFor(id)]; struct Window *window = windows.ptrs[windowFor(id)];
time_t ts = (src ? *src : time(NULL)); time_t ts = (src ? *src : time(NULL));
bufferPush(&window->buffer, heat, ts, str); bufferPush(&window->buffer, heat, ts, str);
if (heat < Cold && window->ignore) return;
int lines = 0; int lines = 0;
window->unread++; window->unread++;
@ -630,6 +634,7 @@ static void reflow(struct Window *window) {
for (size_t i = 0; i < BufferCap; ++i) { for (size_t i = 0; i < BufferCap; ++i) {
struct Line line = bufferLine(&window->buffer, i); struct Line line = bufferLine(&window->buffer, i);
if (!line.str) continue; if (!line.str) continue;
if (line.heat < Cold && window->ignore) continue;
int lines = wordWrap(window->pad, line.str); int lines = wordWrap(window->pad, line.str);
if (i >= (size_t)(BufferCap - window->unread)) { if (i >= (size_t)(BufferCap - window->unread)) {
window->unreadLines += lines; window->unreadLines += lines;
@ -867,6 +872,7 @@ static void keyCode(int code) {
break; case KeyFocusOut: mark(window); break; case KeyFocusOut: mark(window);
break; case KeyMetaEnter: edit(id, EditInsert, L'\n'); break; case KeyMetaEnter: edit(id, EditInsert, L'\n');
break; case KeyMetaMinus: window->ignore ^= true; reflow(window);
break; case KeyMetaSlash: windowShow(windows.swap); break; case KeyMetaSlash: windowShow(windows.swap);
break; case KeyMetaA: showAuto(); break; case KeyMetaA: showAuto();