mirror of
https://github.com/profanity-im/profanity.git
synced 2024-11-03 19:37:16 -05:00
Add /occupants indent command
Roster has a `/roster contact indent` option. Now we have the same for occupants. So contacts in roster and in MUC can have configurable indentation. Regards https://github.com/boothj5/profanity/issues/690
This commit is contained in:
parent
7e4e9e6688
commit
0c248a0b16
@ -753,7 +753,8 @@ static struct cmd_t command_defs[] =
|
||||
CMD_SYN(
|
||||
"/occupants show|hide [jid]",
|
||||
"/occupants default show|hide [jid]",
|
||||
"/occupants size [<percent>]")
|
||||
"/occupants size [<percent>]",
|
||||
"/occupants indent <indent>")
|
||||
CMD_DESC(
|
||||
"Show or hide room occupants, and occupants panel display settings.")
|
||||
CMD_ARGS(
|
||||
@ -763,7 +764,8 @@ static struct cmd_t command_defs[] =
|
||||
{ "hide jid", "Hide jid in the occupants panel in current room." },
|
||||
{ "default show|hide", "Whether occupants are shown by default in new rooms." },
|
||||
{ "default show|hide jid", "Whether occupants jids are shown by default in new rooms." },
|
||||
{ "size <percent>", "Percentage of the screen taken by the occupants list in rooms (1-99)." })
|
||||
{ "size <percent>", "Percentage of the screen taken by the occupants list in rooms (1-99)." },
|
||||
{ "indent <indent>", "Indent contact line by <indent> spaces (0 to 10)." })
|
||||
CMD_NOEXAMPLES
|
||||
},
|
||||
|
||||
|
@ -4409,6 +4409,38 @@ cmd_occupants(ProfWin *window, const char *const command, gchar **args)
|
||||
ProfMucWin *mucwin = (ProfMucWin*)window;
|
||||
assert(mucwin->memcheck == PROFMUCWIN_MEMCHECK);
|
||||
|
||||
if (g_strcmp0(args[0], "indent") == 0) {
|
||||
if (!args[1]) {
|
||||
cons_bad_cmd_usage(command);
|
||||
return TRUE;
|
||||
} else {
|
||||
int intval = 0;
|
||||
char *err_msg = NULL;
|
||||
gboolean res = strtoi_range(args[1], &intval, 0, 10, &err_msg);
|
||||
if (res) {
|
||||
prefs_set_occupants_indent(intval);
|
||||
cons_show("Occupants indent set to: %d", intval);
|
||||
|
||||
// get the list of joined rooms
|
||||
GList *rooms = muc_rooms();
|
||||
GList *curr = rooms;
|
||||
while (curr) {
|
||||
char* roomjid = curr->data;
|
||||
ProfMucWin *mw = wins_get_muc(roomjid);
|
||||
if (mw != NULL)
|
||||
mucwin_update_occupants(mw);
|
||||
|
||||
curr = g_list_next(curr);
|
||||
}
|
||||
} else {
|
||||
cons_show(err_msg);
|
||||
free(err_msg);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (g_strcmp0(args[0], "show") == 0) {
|
||||
if (g_strcmp0(args[1], "jid") == 0) {
|
||||
mucwin->showjid = TRUE;
|
||||
|
@ -750,6 +750,28 @@ prefs_get_occupants_size(void)
|
||||
}
|
||||
}
|
||||
|
||||
gint
|
||||
prefs_get_occupants_indent(void)
|
||||
{
|
||||
if (!g_key_file_has_key(prefs, PREF_GROUP_UI, "occupants.indent", NULL)) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
gint result = g_key_file_get_integer(prefs, PREF_GROUP_UI, "occupants.indent", NULL);
|
||||
if (result < 0) {
|
||||
result = 0;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void
|
||||
prefs_set_occupants_indent(gint value)
|
||||
{
|
||||
g_key_file_set_integer(prefs, PREF_GROUP_UI, "occupants.indent", value);
|
||||
_save_prefs();
|
||||
}
|
||||
|
||||
void
|
||||
prefs_set_roster_size(gint value)
|
||||
{
|
||||
|
@ -246,6 +246,8 @@ gint prefs_get_roster_resource_indent(void);
|
||||
void prefs_set_roster_resource_indent(gint value);
|
||||
gint prefs_get_roster_presence_indent(void);
|
||||
void prefs_set_roster_presence_indent(gint value);
|
||||
gint prefs_get_occupants_indent(void);
|
||||
void prefs_set_occupants_indent(gint value);
|
||||
|
||||
void prefs_add_login(const char *jid);
|
||||
|
||||
|
@ -452,6 +452,11 @@ _load_preferences(void)
|
||||
prefs_set_occupants_size(occupants_size);
|
||||
}
|
||||
|
||||
if (g_key_file_has_key(theme, "ui", "occupants.indent", NULL)) {
|
||||
gint occupants_indent = g_key_file_get_integer(theme, "ui", "occupants.indent", NULL);
|
||||
prefs_set_occupants_indent(occupants_indent);
|
||||
}
|
||||
|
||||
if (g_key_file_has_key(theme, "ui", "roster.size", NULL)) {
|
||||
gint roster_size = g_key_file_get_integer(theme, "ui", "roster.size", NULL);
|
||||
prefs_set_roster_size(roster_size);
|
||||
|
@ -1232,6 +1232,9 @@ cons_occupants_setting(void)
|
||||
else
|
||||
cons_show("Occupant jids (/occupants) : hide");
|
||||
|
||||
gint occupant_indent = prefs_get_occupants_indent();
|
||||
cons_show("Occupant indent (/occupants) : %d", occupant_indent);
|
||||
|
||||
int size = prefs_get_occupants_size();
|
||||
cons_show("Occupants size (/occupants) : %d", size);
|
||||
}
|
||||
|
@ -46,7 +46,18 @@ _occuptantswin_occupant(ProfLayoutSplit *layout, Occupant *occupant, gboolean sh
|
||||
theme_item_t presence_colour = theme_main_presence_attrs(presence_str);
|
||||
wattron(layout->subwin, theme_attrs(presence_colour));
|
||||
|
||||
GString *msg = g_string_new(" ");
|
||||
GString *msg = g_string_new(" ");
|
||||
|
||||
int indent = prefs_get_occupants_indent();
|
||||
int current_indent = 0;
|
||||
if (indent > 0) {
|
||||
current_indent += indent;
|
||||
while (indent > 0) {
|
||||
g_string_append(msg, " ");
|
||||
indent--;
|
||||
}
|
||||
}
|
||||
|
||||
g_string_append(msg, occupant->nick);
|
||||
win_sub_print(layout->subwin, msg->str, TRUE, FALSE, 0);
|
||||
g_string_free(msg, TRUE);
|
||||
|
Loading…
Reference in New Issue
Block a user