mirror of
https://github.com/profanity-im/profanity.git
synced 2024-12-04 14:46:46 -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(
|
CMD_SYN(
|
||||||
"/occupants show|hide [jid]",
|
"/occupants show|hide [jid]",
|
||||||
"/occupants default show|hide [jid]",
|
"/occupants default show|hide [jid]",
|
||||||
"/occupants size [<percent>]")
|
"/occupants size [<percent>]",
|
||||||
|
"/occupants indent <indent>")
|
||||||
CMD_DESC(
|
CMD_DESC(
|
||||||
"Show or hide room occupants, and occupants panel display settings.")
|
"Show or hide room occupants, and occupants panel display settings.")
|
||||||
CMD_ARGS(
|
CMD_ARGS(
|
||||||
@ -763,7 +764,8 @@ static struct cmd_t command_defs[] =
|
|||||||
{ "hide jid", "Hide jid in the occupants panel in current room." },
|
{ "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", "Whether occupants are shown by default in new rooms." },
|
||||||
{ "default show|hide jid", "Whether occupants jids 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
|
CMD_NOEXAMPLES
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -4409,6 +4409,38 @@ cmd_occupants(ProfWin *window, const char *const command, gchar **args)
|
|||||||
ProfMucWin *mucwin = (ProfMucWin*)window;
|
ProfMucWin *mucwin = (ProfMucWin*)window;
|
||||||
assert(mucwin->memcheck == PROFMUCWIN_MEMCHECK);
|
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[0], "show") == 0) {
|
||||||
if (g_strcmp0(args[1], "jid") == 0) {
|
if (g_strcmp0(args[1], "jid") == 0) {
|
||||||
mucwin->showjid = TRUE;
|
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
|
void
|
||||||
prefs_set_roster_size(gint value)
|
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);
|
void prefs_set_roster_resource_indent(gint value);
|
||||||
gint prefs_get_roster_presence_indent(void);
|
gint prefs_get_roster_presence_indent(void);
|
||||||
void prefs_set_roster_presence_indent(gint value);
|
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);
|
void prefs_add_login(const char *jid);
|
||||||
|
|
||||||
|
@ -452,6 +452,11 @@ _load_preferences(void)
|
|||||||
prefs_set_occupants_size(occupants_size);
|
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)) {
|
if (g_key_file_has_key(theme, "ui", "roster.size", NULL)) {
|
||||||
gint roster_size = g_key_file_get_integer(theme, "ui", "roster.size", NULL);
|
gint roster_size = g_key_file_get_integer(theme, "ui", "roster.size", NULL);
|
||||||
prefs_set_roster_size(roster_size);
|
prefs_set_roster_size(roster_size);
|
||||||
|
@ -1232,6 +1232,9 @@ cons_occupants_setting(void)
|
|||||||
else
|
else
|
||||||
cons_show("Occupant jids (/occupants) : hide");
|
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();
|
int size = prefs_get_occupants_size();
|
||||||
cons_show("Occupants size (/occupants) : %d", 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);
|
theme_item_t presence_colour = theme_main_presence_attrs(presence_str);
|
||||||
wattron(layout->subwin, theme_attrs(presence_colour));
|
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);
|
g_string_append(msg, occupant->nick);
|
||||||
win_sub_print(layout->subwin, msg->str, TRUE, FALSE, 0);
|
win_sub_print(layout->subwin, msg->str, TRUE, FALSE, 0);
|
||||||
g_string_free(msg, TRUE);
|
g_string_free(msg, TRUE);
|
||||||
|
Loading…
Reference in New Issue
Block a user