diff --git a/xC-proto b/xC-proto index 31534d4..526cd0f 100644 --- a/xC-proto +++ b/xC-proto @@ -69,6 +69,7 @@ struct EventMessage { ERROR, JOIN, PART, + ACTION, } rendition; // Unix timestamp in seconds. u64 when; diff --git a/xC.c b/xC.c index 6f0a7ae..082b9fe 100644 --- a/xC.c +++ b/xC.c @@ -1536,6 +1536,7 @@ enum buffer_line_rendition BUFFER_LINE_ERROR, ///< Error message BUFFER_LINE_JOIN, ///< Join arrow BUFFER_LINE_PART, ///< Part arrow + BUFFER_LINE_ACTION, ///< Highlighted asterisk }; struct buffer_line @@ -4475,9 +4476,10 @@ buffer_line_flush (struct buffer_line *line, struct formatter *f, FILE *output, case BUFFER_LINE_BARE: break; case BUFFER_LINE_INDENT: formatter_add (f, " "); break; case BUFFER_LINE_STATUS: formatter_add (f, " - "); break; - case BUFFER_LINE_ERROR: formatter_add (f, "#a=!=#r ", ATTR_ERROR); break; - case BUFFER_LINE_JOIN: formatter_add (f, "#a-->#r ", ATTR_JOIN); break; - case BUFFER_LINE_PART: formatter_add (f, "#a<--#r ", ATTR_PART); break; + case BUFFER_LINE_ERROR: formatter_add (f, "#a=!=#r ", ATTR_ERROR); break; + case BUFFER_LINE_JOIN: formatter_add (f, "#a-->#r ", ATTR_JOIN); break; + case BUFFER_LINE_PART: formatter_add (f, "#a<--#r ", ATTR_PART); break; + case BUFFER_LINE_ACTION: formatter_add (f, " #a*#r ", ATTR_ACTION); break; } for (struct formatter_item *iter = line->items; iter->type; iter++) @@ -4694,16 +4696,16 @@ log_full (struct app_context *ctx, struct server *s, struct buffer *buffer, #define log_outcoming_privmsg(s, buffer, prefixes, who, text) \ log_server ((s), (buffer), 0, 0, "<#s#n> #m", (prefixes), (who), (text)) #define log_outcoming_action(s, buffer, who, text) \ - log_server ((s), (buffer), 0, 0, " #a*#r #n #m", \ - ATTR_ACTION, (who), (text)) + log_server ((s), (buffer), 0, BUFFER_LINE_ACTION, "#n #m", (who), (text)) #define log_outcoming_orphan_notice(s, target, text) \ log_server_status ((s), (s)->buffer, "Notice -> #n: #m", (target), (text)) #define log_outcoming_orphan_privmsg(s, target, text) \ - log_server_status ((s), (s)->buffer, "MSG(#n): #m", (target), (text)) + log_server ((s), (s)->buffer, 0, BUFFER_LINE_STATUS, \ + "MSG(#n): #m", (target), (text)) #define log_outcoming_orphan_action(s, target, text) \ - log_server_status ((s), (s)->buffer, "MSG(#n): #a*#r #m", (target), \ - ATTR_ACTION, (text)) + log_server ((s), (s)->buffer, 0, BUFFER_LINE_ACTION, \ + "MSG(#n): #m", (target), (text)) #define log_ctcp_query(s, target, tag) \ log_server_status ((s), (s)->buffer, "CTCP query to #S: #S", target, tag) diff --git a/xP/public/xP.css b/xP/public/xP.css index 9a98c13..3aaff10 100644 --- a/xP/public/xP.css +++ b/xP/public/xP.css @@ -79,6 +79,9 @@ body { .mark.part { color: red; } +.mark.action { + color: darkred; +} .content { padding: .1rem .3rem; white-space: pre-wrap; diff --git a/xP/public/xP.js b/xP/public/xP.js index 7517ef8..13507d6 100644 --- a/xP/public/xP.js +++ b/xP/public/xP.js @@ -120,11 +120,12 @@ let Content = { let line = vnode.children[0] let content = [] switch (line.rendition) { - case 'Indent': content.push(m('span.mark', {}, '')); break - case 'Status': content.push(m('span.mark', {}, '–')); break - case 'Error': content.push(m('span.mark.error', {}, '⚠')); break - case 'Join': content.push(m('span.mark.join', {}, '→')); break - case 'Part': content.push(m('span.mark.part', {}, '←')); break + case 'Indent': content.push(m('span.mark', {}, '')); break + case 'Status': content.push(m('span.mark', {}, '–')); break + case 'Error': content.push(m('span.mark.error', {}, '⚠')); break + case 'Join': content.push(m('span.mark.join', {}, '→')); break + case 'Part': content.push(m('span.mark.part', {}, '←')); break + case 'Action': content.push(m('span.mark.action', {}, '✶')); break } let classes = new Set()