degesch: print a marker for unread messages
This commit is contained in:
parent
d48adf4557
commit
ccc167d120
69
degesch.c
69
degesch.c
|
@ -20,17 +20,18 @@
|
||||||
// A table of all attributes we use for output
|
// A table of all attributes we use for output
|
||||||
// FIXME: awful naming, collides with ATTRIBUTE_*
|
// FIXME: awful naming, collides with ATTRIBUTE_*
|
||||||
#define ATTR_TABLE(XX) \
|
#define ATTR_TABLE(XX) \
|
||||||
XX( PROMPT, "prompt", "Terminal attributes for the prompt" ) \
|
XX( PROMPT, "prompt", "Terminal attrs for the prompt" ) \
|
||||||
XX( RESET, "reset", "String to reset terminal attributes" ) \
|
XX( RESET, "reset", "String to reset terminal attributes" ) \
|
||||||
XX( WARNING, "warning", "Terminal attributes for warnings" ) \
|
XX( READ_MARKER, "read_marker", "Terminal attrs for the read marker" ) \
|
||||||
XX( ERROR, "error", "Terminal attributes for errors" ) \
|
XX( WARNING, "warning", "Terminal attrs for warnings" ) \
|
||||||
XX( EXTERNAL, "external", "Terminal attributes for external lines" ) \
|
XX( ERROR, "error", "Terminal attrs for errors" ) \
|
||||||
XX( TIMESTAMP, "timestamp", "Terminal attributes for timestamps" ) \
|
XX( EXTERNAL, "external", "Terminal attrs for external lines" ) \
|
||||||
XX( HIGHLIGHT, "highlight", "Terminal attributes for highlights" ) \
|
XX( TIMESTAMP, "timestamp", "Terminal attrs for timestamps" ) \
|
||||||
XX( ACTION, "action", "Terminal attributes for user actions" ) \
|
XX( HIGHLIGHT, "highlight", "Terminal attrs for highlights" ) \
|
||||||
XX( USERHOST, "userhost", "Terminal attributes for user@host" ) \
|
XX( ACTION, "action", "Terminal attrs for user actions" ) \
|
||||||
XX( JOIN, "join", "Terminal attributes for joins" ) \
|
XX( USERHOST, "userhost", "Terminal attrs for user@host" ) \
|
||||||
XX( PART, "part", "Terminal attributes for parts" )
|
XX( JOIN, "join", "Terminal attrs for joins" ) \
|
||||||
|
XX( PART, "part", "Terminal attrs for parts" )
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
|
@ -1943,17 +1944,18 @@ init_colors (struct app_context *ctx)
|
||||||
|
|
||||||
#define INIT_ATTR(id, ti) defaults[ATTR_ ## id] = xstrdup (have_ti ? (ti) : "")
|
#define INIT_ATTR(id, ti) defaults[ATTR_ ## id] = xstrdup (have_ti ? (ti) : "")
|
||||||
|
|
||||||
INIT_ATTR (PROMPT, enter_bold_mode);
|
INIT_ATTR (PROMPT, enter_bold_mode);
|
||||||
INIT_ATTR (RESET, exit_attribute_mode);
|
INIT_ATTR (RESET, exit_attribute_mode);
|
||||||
INIT_ATTR (WARNING, g_terminal.color_set_fg[COLOR_YELLOW]);
|
INIT_ATTR (READ_MARKER, g_terminal.color_set_fg[COLOR_MAGENTA]);
|
||||||
INIT_ATTR (ERROR, g_terminal.color_set_fg[COLOR_RED]);
|
INIT_ATTR (WARNING, g_terminal.color_set_fg[COLOR_YELLOW]);
|
||||||
|
INIT_ATTR (ERROR, g_terminal.color_set_fg[COLOR_RED]);
|
||||||
|
|
||||||
INIT_ATTR (EXTERNAL, g_terminal.color_set_fg[COLOR_WHITE]);
|
INIT_ATTR (EXTERNAL, g_terminal.color_set_fg[COLOR_WHITE]);
|
||||||
INIT_ATTR (TIMESTAMP, g_terminal.color_set_fg[COLOR_WHITE]);
|
INIT_ATTR (TIMESTAMP, g_terminal.color_set_fg[COLOR_WHITE]);
|
||||||
INIT_ATTR (ACTION, g_terminal.color_set_fg[COLOR_RED]);
|
INIT_ATTR (ACTION, g_terminal.color_set_fg[COLOR_RED]);
|
||||||
INIT_ATTR (USERHOST, g_terminal.color_set_fg[COLOR_CYAN]);
|
INIT_ATTR (USERHOST, g_terminal.color_set_fg[COLOR_CYAN]);
|
||||||
INIT_ATTR (JOIN, g_terminal.color_set_fg[COLOR_GREEN]);
|
INIT_ATTR (JOIN, g_terminal.color_set_fg[COLOR_GREEN]);
|
||||||
INIT_ATTR (PART, g_terminal.color_set_fg[COLOR_RED]);
|
INIT_ATTR (PART, g_terminal.color_set_fg[COLOR_RED]);
|
||||||
|
|
||||||
char *highlight = xstrdup_printf ("%s%s%s",
|
char *highlight = xstrdup_printf ("%s%s%s",
|
||||||
g_terminal.color_set_fg[COLOR_YELLOW],
|
g_terminal.color_set_fg[COLOR_YELLOW],
|
||||||
|
@ -2927,6 +2929,16 @@ buffer_remove (struct app_context *ctx, struct buffer *buffer)
|
||||||
refresh_prompt (ctx);
|
refresh_prompt (ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
buffer_print_read_marker (struct app_context *ctx)
|
||||||
|
{
|
||||||
|
struct formatter f;
|
||||||
|
formatter_init (&f, ctx, NULL);
|
||||||
|
formatter_add (&f, "#a-- -- -- ---\n", ATTR_READ_MARKER);
|
||||||
|
formatter_flush (&f, stdout);
|
||||||
|
formatter_free (&f);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
buffer_print_backlog (struct app_context *ctx, struct buffer *buffer)
|
buffer_print_backlog (struct app_context *ctx, struct buffer *buffer)
|
||||||
{
|
{
|
||||||
|
@ -2935,14 +2947,23 @@ buffer_print_backlog (struct app_context *ctx, struct buffer *buffer)
|
||||||
print_status ("%s", buffer->name);
|
print_status ("%s", buffer->name);
|
||||||
|
|
||||||
// That is, minus the buffer switch line and the readline prompt
|
// That is, minus the buffer switch line and the readline prompt
|
||||||
int to_display = MAX (10, g_terminal.lines - 2);
|
int display_limit =
|
||||||
|
MAX (MAX (10, buffer->unseen_messages_count), g_terminal.lines - 2);
|
||||||
|
|
||||||
struct buffer_line *line = buffer->lines_tail;
|
struct buffer_line *line = buffer->lines_tail;
|
||||||
while (line && line->prev && --to_display > 0)
|
int to_display = line != NULL;
|
||||||
line = line->prev;
|
for (; line && line->prev && --display_limit > 0; line = line->prev)
|
||||||
|
to_display++;
|
||||||
|
|
||||||
// Once we've found where we want to start with the backlog, print it
|
// Once we've found where we want to start with the backlog, print it
|
||||||
|
int until_marker = to_display - (int) buffer->unseen_messages_count;
|
||||||
for (; line; line = line->next)
|
for (; line; line = line->next)
|
||||||
|
{
|
||||||
|
if (until_marker-- == 0)
|
||||||
|
buffer_print_read_marker (ctx);
|
||||||
buffer_line_display (ctx, line, false);
|
buffer_line_display (ctx, line, false);
|
||||||
|
}
|
||||||
|
|
||||||
buffer->unseen_messages_count = 0;
|
buffer->unseen_messages_count = 0;
|
||||||
buffer->highlighted = false;
|
buffer->highlighted = false;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue