From 16fbdedceb66b5568f8d1d62ee845999f6d76457 Mon Sep 17 00:00:00 2001 From: James Booth Date: Fri, 20 Nov 2015 00:06:46 +0000 Subject: Added /roster char contact --- src/command/command.c | 8 ++++++++ src/command/commands.c | 12 ++++++++++++ src/config/preferences.c | 34 ++++++++++++++++++++++++++++++++++ src/config/preferences.h | 3 +++ src/config/theme.c | 7 +++++++ src/ui/console.c | 12 ++++++++++++ src/ui/rosterwin.c | 4 ++++ theme_template | 1 + themes/boothj5 | 1 + themes/complex | 1 + 10 files changed, 83 insertions(+) diff --git a/src/command/command.c b/src/command/command.c index 587fd241..7a87d828 100644 --- a/src/command/command.c +++ b/src/command/command.c @@ -279,6 +279,7 @@ static struct cmd_t command_defs[] = "/roster by group|presence|none", "/roster order name|presence", "/roster char header |none", + "/roster char contact |none", "/roster size ", "/roster add []", "/roster remove ", @@ -313,6 +314,8 @@ static struct cmd_t command_defs[] = { "order presence", "Order roster items by presence, and then by name." }, { "char header ", "Prefix roster headers with specificed character." }, { "char header none", "Remove roster header character prefix." }, + { "char contact ", "Prefix roster contacts with specificed character." }, + { "char contact none", "Remove roster contact character prefix." }, { "size ", "Percentage of the screen taken up by the roster (1-99)." }, { "add []", "Add a new item to the roster." }, { "remove ", "Removes an item from the roster." }, @@ -2033,6 +2036,7 @@ cmd_init(void) roster_char_ac = autocomplete_new(); autocomplete_add(roster_char_ac, "header"); + autocomplete_add(roster_char_ac, "contact"); roster_char_none_ac = autocomplete_new(); autocomplete_add(roster_char_none_ac, "none"); @@ -2890,6 +2894,10 @@ _roster_autocomplete(ProfWin *window, const char *const input) if (result) { return result; } + result = autocomplete_param_with_ac(input, "/roster char contact", 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 7f67e19d..ca6a1003 100644 --- a/src/command/commands.c +++ b/src/command/commands.c @@ -1764,6 +1764,18 @@ cmd_roster(ProfWin *window, const char *const command, gchar **args) cons_show("Roster header char set to %c.", args[2][0]); rosterwin_roster(); } + } else if (g_strcmp0(args[1], "contact") == 0) { + if (!args[2]) { + cons_bad_cmd_usage(command); + } else if (g_strcmp0(args[2], "none") == 0) { + prefs_clear_roster_contact_char(); + cons_show("Roster contact char removed."); + rosterwin_roster(); + } else { + prefs_set_roster_contact_char(args[2][0]); + cons_show("Roster contact 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 36f02a64..071b6646 100644 --- a/src/config/preferences.c +++ b/src/config/preferences.c @@ -478,6 +478,40 @@ prefs_clear_roster_header_char(void) _save_prefs(); } +char +prefs_get_roster_contact_char(void) +{ + char result = 0; + + char *resultstr = g_key_file_get_string(prefs, PREF_GROUP_UI, "roster.contact.char", NULL); + if (!resultstr) { + result = 0; + } else { + result = resultstr[0]; + } + free(resultstr); + + return result; +} + +void +prefs_set_roster_contact_char(char ch) +{ + char str[2]; + str[0] = ch; + str[1] = '\0'; + + g_key_file_set_string(prefs, PREF_GROUP_UI, "roster.contact.char", str); + _save_prefs(); +} + +void +prefs_clear_roster_contact_char(void) +{ + g_key_file_remove_key(prefs, PREF_GROUP_UI, "roster.contact.char", NULL); + _save_prefs(); +} + gboolean prefs_add_alias(const char *const name, const char *const value) { diff --git a/src/config/preferences.h b/src/config/preferences.h index e75e94eb..da4eef88 100644 --- a/src/config/preferences.h +++ b/src/config/preferences.h @@ -168,6 +168,9 @@ void prefs_set_pgp_char(char ch); char prefs_get_roster_header_char(void); void prefs_set_roster_header_char(char ch); 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); void prefs_add_login(const char *jid); diff --git a/src/config/theme.c b/src/config/theme.c index 73cdf0ad..b875f46f 100644 --- a/src/config/theme.c +++ b/src/config/theme.c @@ -476,6 +476,13 @@ _load_preferences(void) g_free(ch); } } + if (g_key_file_has_key(theme, "ui", "roster.contact.char", NULL)) { + gchar *ch = g_key_file_get_string(theme, "ui", "roster.contact.char", NULL); + if (ch && strlen(ch) > 0) { + prefs_set_roster_contact_char(ch[0]); + g_free(ch); + } + } _set_boolean_preference("privileges", PREF_MUC_PRIVILEGES); diff --git a/src/ui/console.c b/src/ui/console.c index 64eff932..1beaa48a 100644 --- a/src/ui/console.c +++ b/src/ui/console.c @@ -1242,6 +1242,18 @@ cons_roster_setting(void) int size = prefs_get_roster_size(); cons_show("Roster size (/roster) : %d", size); + + char header_ch = prefs_get_roster_header_char(); + if (header_ch) + cons_show("Roster header char (/roster) : %c", header_ch); + else + cons_show("Roster header char (/roster) : none"); + + char contact_ch = prefs_get_roster_contact_char(); + if (contact_ch) + cons_show("Roster contact char (/roster) : %c", contact_ch); + else + cons_show("Roster contact char (/roster) : none"); } void diff --git a/src/ui/rosterwin.c b/src/ui/rosterwin.c index 00f97522..64ce1f7f 100644 --- a/src/ui/rosterwin.c +++ b/src/ui/rosterwin.c @@ -139,6 +139,10 @@ _rosterwin_contact(ProfLayoutSplit *layout, PContact contact) wattron(layout->subwin, theme_attrs(presence_colour)); GString *msg = g_string_new(" "); + char ch = prefs_get_roster_contact_char(); + if (ch) { + g_string_append_printf(msg, "%c", ch); + } g_string_append(msg, name); win_printline_nowrap(layout->subwin, msg->str); g_string_free(msg, TRUE); diff --git a/theme_template b/theme_template index 86627d81..7eca6ff9 100644 --- a/theme_template +++ b/theme_template @@ -83,6 +83,7 @@ roster.count= roster.priority= roster.size= roster.header.char= +roster.contact.char= occupants= occupants.size= occupants.jid= diff --git a/themes/boothj5 b/themes/boothj5 index b6d99272..48ada774 100644 --- a/themes/boothj5 +++ b/themes/boothj5 @@ -83,6 +83,7 @@ roster.count=true roster.priority=true roster.size=25 roster.header.char=@ +roster.contact.char=- occupants=true occupants.size=15 occupants.jid=false diff --git a/themes/complex b/themes/complex index f76ac7b5..e2667944 100644 --- a/themes/complex +++ b/themes/complex @@ -30,6 +30,7 @@ roster.count=true roster.priority=true roster.size=25 roster.header.char=- +roster.contact.char=- privileges=true presence=true intype=true -- cgit 1.4.1-2-gfad0