about summary refs log tree commit diff stats
path: root/src/ui
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2016-02-10 23:03:23 +0000
committerJames Booth <boothj5@gmail.com>2016-02-10 23:03:23 +0000
commit2f82f50a352ebdbe34c1712156766e0476e19e6c (patch)
tree33da0ccfd1e4e9abbec5fd5274fae686e9ab8329 /src/ui
parent71679a3159037c353656b19e3b36ab303714bc15 (diff)
downloadprofani-tty-2f82f50a352ebdbe34c1712156766e0476e19e6c.tar.gz
Added roommention.term theme option
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/console.c1
-rw-r--r--src/ui/mucwin.c33
2 files changed, 33 insertions, 1 deletions
diff --git a/src/ui/console.c b/src/ui/console.c
index 8d8542a4..00957aae 100644
--- a/src/ui/console.c
+++ b/src/ui/console.c
@@ -2215,6 +2215,7 @@ cons_theme_properties(void)
 
     _cons_theme_prop(THEME_ROOMINFO, "roominfo");
     _cons_theme_prop(THEME_ROOMMENTION, "roommention");
+    _cons_theme_prop(THEME_ROOMMENTION_TERM, "roommention.term");
     _cons_theme_prop(THEME_ROOMTRIGGER, "roomtrigger");
 
     _cons_theme_prop(THEME_ROSTER_HEADER, "roster.header");
diff --git a/src/ui/mucwin.c b/src/ui/mucwin.c
index a24daa59..3d7263f3 100644
--- a/src/ui/mucwin.c
+++ b/src/ui/mucwin.c
@@ -355,6 +355,36 @@ mucwin_history(ProfMucWin *mucwin, const char *const nick, GDateTime *timestamp,
     g_string_free(line, TRUE);
 }
 
+static void
+_mucwin_print_mention(ProfWin *window, const char *const message, const char *const my_nick)
+{
+    char *mynick_lower = g_utf8_strdown(my_nick, -1);
+    char *message_lower = g_utf8_strdown(message, -1);
+    char message_section[strlen(message) + 1];
+
+    int i = 0;
+    while(!g_str_has_prefix(&message_lower[i], mynick_lower) && i < strlen(message)) {
+        message_section[i] = message[i];
+        i++;
+    }
+    message_section[i] = '\0';
+
+    char *mention_section = strndup(&message[i], strlen(my_nick));
+    int used = strlen(message_section) + strlen(mention_section);
+
+    win_print(window, '-', 0, NULL, NO_DATE | NO_ME | NO_EOL, THEME_ROOMMENTION, "", message_section);
+    if (strlen(message) > used) {
+        win_print(window, '-', 0, NULL, NO_DATE | NO_ME | NO_EOL, THEME_ROOMMENTION_TERM, "", mention_section);
+        _mucwin_print_mention(window, &message[used], my_nick);
+    } else {
+        win_print(window, '-', 0, NULL, NO_DATE | NO_ME, THEME_ROOMMENTION_TERM, "", mention_section);
+    }
+
+    free(mention_section);
+    g_free(mynick_lower);
+    g_free(message_lower);
+}
+
 void
 mucwin_message(ProfMucWin *mucwin, const char *const nick, const char *const message, gboolean mention,
     gboolean trigger_found)
@@ -366,7 +396,8 @@ mucwin_message(ProfMucWin *mucwin, const char *const nick, const char *const mes
 
     if (g_strcmp0(nick, my_nick) != 0) {
         if (mention) {
-            win_print(window, '-', 0, NULL, NO_ME, THEME_ROOMMENTION, nick, message);
+            win_print(window, '-', 0, NULL, NO_ME | NO_EOL, THEME_ROOMMENTION, nick, "");
+            _mucwin_print_mention(window, message, my_nick);
         } else if (trigger_found) {
             win_print(window, '-', 0, NULL, NO_ME, THEME_ROOMTRIGGER, nick, message);
         } else {