about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--src/command/command.c8
-rw-r--r--src/command/commands.c12
-rw-r--r--src/config/preferences.c34
-rw-r--r--src/config/preferences.h3
-rw-r--r--src/config/theme.c7
-rw-r--r--src/ui/console.c6
-rw-r--r--src/ui/rosterwin.c4
-rw-r--r--theme_template1
-rw-r--r--themes/complex1
9 files changed, 76 insertions, 0 deletions
diff --git a/src/command/command.c b/src/command/command.c
index d3895247..c80ce2b4 100644
--- a/src/command/command.c
+++ b/src/command/command.c
@@ -280,6 +280,7 @@ static struct cmd_t command_defs[] =
             "/roster order name|presence",
             "/roster char header <char>|none",
             "/roster char contact <char>|none",
+            "/roster char resource <char>|none",
             "/roster indent contact <indent>",
             "/roster indent resource <indent>",
             "/roster indent presence <indent>",
@@ -320,6 +321,8 @@ static struct cmd_t command_defs[] =
             { "char header none",           "Remove roster header character prefix." },
             { "char contact <char>",        "Prefix roster contacts with specificed character." },
             { "char contact none",          "Remove roster contact character prefix." },
+            { "char resource <char>",       "Prefix roster resources with specificed character." },
+            { "char resource none",         "Remove roster resource character prefix." },
             { "indent contact <indent>",    "Indent contact line by <indent> spaces (0 to 10)." },
             { "indent resource <indent>",   "Indent resource line by <indent> spaces (0 to 10)." },
             { "indent presence <indent>",   "Indent presence line by <indent> spaces (-1 to 10), a value of -1 will show presence on the previous line." },
@@ -2048,6 +2051,7 @@ cmd_init(void)
     roster_char_ac = autocomplete_new();
     autocomplete_add(roster_char_ac, "header");
     autocomplete_add(roster_char_ac, "contact");
+    autocomplete_add(roster_char_ac, "resource");
 
     roster_char_none_ac = autocomplete_new();
     autocomplete_add(roster_char_none_ac, "none");
@@ -2916,6 +2920,10 @@ _roster_autocomplete(ProfWin *window, const char *const input)
     if (result) {
         return result;
     }
+    result = autocomplete_param_with_ac(input, "/roster char resource", roster_char_none_ac, TRUE);
+    if (result) {
+        return result;
+    }
     result = autocomplete_param_with_func(input, "/roster nick", roster_barejid_autocomplete);
     if (result) {
         return result;
diff --git a/src/command/commands.c b/src/command/commands.c
index e1710ae1..4bc1f880 100644
--- a/src/command/commands.c
+++ b/src/command/commands.c
@@ -1787,6 +1787,18 @@ cmd_roster(ProfWin *window, const char *const command, gchar **args)
                 cons_show("Roster contact char set to %c.", args[2][0]);
                 rosterwin_roster();
             }
+        } else if (g_strcmp0(args[1], "resource") == 0) {
+            if (!args[2]) {
+                cons_bad_cmd_usage(command);
+            } else if (g_strcmp0(args[2], "none") == 0) {
+                prefs_clear_roster_resource_char();
+                cons_show("Roster resource char removed.");
+                rosterwin_roster();
+            } else {
+                prefs_set_roster_resource_char(args[2][0]);
+                cons_show("Roster resource char set to %c.", args[2][0]);
+                rosterwin_roster();
+            }
         } else {
             cons_bad_cmd_usage(command);
         }
diff --git a/src/config/preferences.c b/src/config/preferences.c
index 958ed97c..3a261897 100644
--- a/src/config/preferences.c
+++ b/src/config/preferences.c
@@ -506,6 +506,40 @@ prefs_clear_roster_contact_char(void)
     _save_prefs();
 }
 
+char
+prefs_get_roster_resource_char(void)
+{
+    char result = 0;
+
+    char *resultstr = g_key_file_get_string(prefs, PREF_GROUP_UI, "roster.resource.char", NULL);
+    if (!resultstr) {
+        result =  0;
+    } else {
+        result = resultstr[0];
+    }
+    free(resultstr);
+
+    return result;
+}
+
+void
+prefs_set_roster_resource_char(char ch)
+{
+    char str[2];
+    str[0] = ch;
+    str[1] = '\0';
+
+    g_key_file_set_string(prefs, PREF_GROUP_UI, "roster.resource.char", str);
+    _save_prefs();
+}
+
+void
+prefs_clear_roster_resource_char(void)
+{
+    g_key_file_remove_key(prefs, PREF_GROUP_UI, "roster.resource.char", NULL);
+    _save_prefs();
+}
+
 gint
 prefs_get_roster_contact_indent(void)
 {
diff --git a/src/config/preferences.h b/src/config/preferences.h
index b187cb0b..9139e3b4 100644
--- a/src/config/preferences.h
+++ b/src/config/preferences.h
@@ -172,6 +172,9 @@ void prefs_clear_roster_header_char(void);
 char prefs_get_roster_contact_char(void);
 void prefs_set_roster_contact_char(char ch);
 void prefs_clear_roster_contact_char(void);
+char prefs_get_roster_resource_char(void);
+void prefs_set_roster_resource_char(char ch);
+void prefs_clear_roster_resource_char(void);
 
 gint prefs_get_roster_contact_indent(void);
 void prefs_set_roster_contact_indent(gint value);
diff --git a/src/config/theme.c b/src/config/theme.c
index 6175bd7a..d87acbc2 100644
--- a/src/config/theme.c
+++ b/src/config/theme.c
@@ -484,6 +484,13 @@ _load_preferences(void)
             g_free(ch);
         }
     }
+    if (g_key_file_has_key(theme, "ui", "roster.resource.char", NULL)) {
+        gchar *ch = g_key_file_get_string(theme, "ui", "roster.resource.char", NULL);
+        if (ch && strlen(ch) > 0) {
+            prefs_set_roster_resource_char(ch[0]);
+            g_free(ch);
+        }
+    }
     if (g_key_file_has_key(theme, "ui", "roster.contact.indent", NULL)) {
         gint contact_indent = g_key_file_get_integer(theme, "ui", "roster.contact.indent", NULL);
         prefs_set_roster_contact_indent(contact_indent);
diff --git a/src/ui/console.c b/src/ui/console.c
index bcf2de7e..f3cbb739 100644
--- a/src/ui/console.c
+++ b/src/ui/console.c
@@ -1255,6 +1255,12 @@ cons_roster_setting(void)
     else
         cons_show("Roster contact char (/roster)    : none");
 
+    char resource_ch = prefs_get_roster_resource_char();
+    if (resource_ch)
+        cons_show("Roster resource char (/roster)   : %c", resource_ch);
+    else
+        cons_show("Roster resource char (/roster)   : none");
+
     gint contact_indent = prefs_get_roster_contact_indent();
     cons_show("Roster contact indent (/roster)  : %d", contact_indent);
 
diff --git a/src/ui/rosterwin.c b/src/ui/rosterwin.c
index 1e43ed8d..ac5a642e 100644
--- a/src/ui/rosterwin.c
+++ b/src/ui/rosterwin.c
@@ -148,6 +148,10 @@ _rosterwin_resources(ProfLayoutSplit *layout, PContact contact, int current_inde
                 g_string_append(msg, " ");
                 this_indent--;
             }
+            char ch = prefs_get_roster_resource_char();
+            if (ch) {
+                g_string_append_printf(msg, "%c", ch);
+            }
             g_string_append(msg, resource->name);
             if (prefs_get_boolean(PREF_ROSTER_PRIORITY)) {
                 g_string_append_printf(msg, " %d", resource->priority);
diff --git a/theme_template b/theme_template
index ddd41c81..2b22558f 100644
--- a/theme_template
+++ b/theme_template
@@ -84,6 +84,7 @@ roster.priority=
 roster.size=
 roster.header.char=
 roster.contact.char=
+roster.resource.char=
 roster.contact.indent=
 roster.resource.indent=
 roster.presence.indent=
diff --git a/themes/complex b/themes/complex
index a8456dcd..a1540278 100644
--- a/themes/complex
+++ b/themes/complex
@@ -31,6 +31,7 @@ roster.priority=true
 roster.size=25
 roster.header.char=-
 roster.contact.char=-
+roster.resource.char=-
 roster.contact.indent=2
 roster.resource.indent=2
 roster.presence.indent=2