mirror of
https://github.com/profanity-im/profanity.git
synced 2024-12-04 14:46:46 -05:00
Merge branch 'master' into plugins
This commit is contained in:
commit
cb4deb18bb
@ -346,13 +346,14 @@ static struct cmd_t command_defs[] =
|
|||||||
NULL } } },
|
NULL } } },
|
||||||
|
|
||||||
{ "/wins",
|
{ "/wins",
|
||||||
cmd_wins, parse_args, 0, 1, NULL,
|
cmd_wins, parse_args, 0, 3, NULL,
|
||||||
{ "/wins [tidy|prune]", "List or tidy active windows.",
|
{ "/wins [tidy|prune|swap] [source] [target]", "List or tidy active windows.",
|
||||||
{ "/wins [tidy|prune]",
|
{ "/wins [tidy|prune|swap] [source] [target]",
|
||||||
"------------------",
|
"-----------------------------------------",
|
||||||
"Passing no argument will list all currently active windows and information about their usage.",
|
"Passing no argument will list all currently active windows and information about their usage.",
|
||||||
"tidy : Shuffle windows so there are no gaps.",
|
"tidy : Shuffle windows so there are no gaps.",
|
||||||
"prune : Close all windows with no unread messages, and then tidy as above.",
|
"prune : Close all windows with no unread messages, and then tidy as above.",
|
||||||
|
"swap source target : Swap windows, target may be an empty position.",
|
||||||
NULL } } },
|
NULL } } },
|
||||||
|
|
||||||
{ "/sub",
|
{ "/sub",
|
||||||
@ -1033,6 +1034,7 @@ cmd_init(void)
|
|||||||
wins_ac = autocomplete_new();
|
wins_ac = autocomplete_new();
|
||||||
autocomplete_add(wins_ac, "prune");
|
autocomplete_add(wins_ac, "prune");
|
||||||
autocomplete_add(wins_ac, "tidy");
|
autocomplete_add(wins_ac, "tidy");
|
||||||
|
autocomplete_add(wins_ac, "swap");
|
||||||
|
|
||||||
roster_ac = autocomplete_new();
|
roster_ac = autocomplete_new();
|
||||||
autocomplete_add(roster_ac, "add");
|
autocomplete_add(roster_ac, "add");
|
||||||
|
@ -471,7 +471,29 @@ cmd_wins(gchar **args, struct cmd_help_t help)
|
|||||||
ui_tidy_wins();
|
ui_tidy_wins();
|
||||||
} else if (strcmp(args[0], "prune") == 0) {
|
} else if (strcmp(args[0], "prune") == 0) {
|
||||||
ui_prune_wins();
|
ui_prune_wins();
|
||||||
|
} else if (strcmp(args[0], "swap") == 0) {
|
||||||
|
if ((args[1] == NULL) || (args[2] == NULL)) {
|
||||||
|
cons_show("Usage: %s", help.usage);
|
||||||
|
} else {
|
||||||
|
int source_win = atoi(args[1]);
|
||||||
|
int target_win = atoi(args[2]);
|
||||||
|
if ((source_win == 1) || (target_win == 1)) {
|
||||||
|
cons_show("Cannot move console window.");
|
||||||
|
} else if (source_win == 10 || target_win == 10) {
|
||||||
|
cons_show("Window 10 does not exist");
|
||||||
|
} else if (source_win != target_win) {
|
||||||
|
gboolean swapped = ui_swap_wins(source_win, target_win);
|
||||||
|
if (swapped) {
|
||||||
|
cons_show("Swapped windows %d <-> %d", source_win, target_win);
|
||||||
|
} else {
|
||||||
|
cons_show("Window %d does not exist", source_win);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
cons_show("Same source and target window supplied.");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -694,7 +694,6 @@ static gboolean
|
|||||||
_ui_switch_win(const int i)
|
_ui_switch_win(const int i)
|
||||||
{
|
{
|
||||||
if (ui_win_exists(i)) {
|
if (ui_win_exists(i)) {
|
||||||
ui_current_page_off();
|
|
||||||
ProfWin *new_current = wins_get_by_num(i);
|
ProfWin *new_current = wins_get_by_num(i);
|
||||||
wins_set_current_by_num(i);
|
wins_set_current_by_num(i);
|
||||||
ui_current_page_off();
|
ui_current_page_off();
|
||||||
@ -953,6 +952,12 @@ _ui_prune_wins(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
_ui_swap_wins(int source_win, int target_win)
|
||||||
|
{
|
||||||
|
return wins_swap(source_win, target_win);
|
||||||
|
}
|
||||||
|
|
||||||
static win_type_t
|
static win_type_t
|
||||||
_ui_current_win_type(void)
|
_ui_current_win_type(void)
|
||||||
{
|
{
|
||||||
@ -1992,4 +1997,5 @@ ui_init_module(void)
|
|||||||
ui_create_xmlconsole_win = _ui_create_xmlconsole_win;
|
ui_create_xmlconsole_win = _ui_create_xmlconsole_win;
|
||||||
ui_xmlconsole_exists = _ui_xmlconsole_exists;
|
ui_xmlconsole_exists = _ui_xmlconsole_exists;
|
||||||
ui_handle_room_join_error = _ui_handle_room_join_error;
|
ui_handle_room_join_error = _ui_handle_room_join_error;
|
||||||
|
ui_swap_wins = _ui_swap_wins;
|
||||||
}
|
}
|
||||||
|
@ -147,6 +147,7 @@ gboolean (*ui_duck_exists)(void);
|
|||||||
|
|
||||||
void (*ui_tidy_wins)(void);
|
void (*ui_tidy_wins)(void);
|
||||||
void (*ui_prune_wins)(void);
|
void (*ui_prune_wins)(void);
|
||||||
|
gboolean (*ui_swap_wins)(int source_win, int target_win);
|
||||||
|
|
||||||
void (*ui_auto_away)(void);
|
void (*ui_auto_away)(void);
|
||||||
void (*ui_end_auto_away)(void);
|
void (*ui_end_auto_away)(void);
|
||||||
|
@ -386,6 +386,55 @@ wins_lost_connection(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
wins_swap(int source_win, int target_win)
|
||||||
|
{
|
||||||
|
ProfWin *source = g_hash_table_lookup(windows, GINT_TO_POINTER(source_win));
|
||||||
|
|
||||||
|
if (source != NULL) {
|
||||||
|
ProfWin *target = g_hash_table_lookup(windows, GINT_TO_POINTER(target_win));
|
||||||
|
|
||||||
|
// target window empty
|
||||||
|
if (target == NULL) {
|
||||||
|
g_hash_table_steal(windows, GINT_TO_POINTER(source_win));
|
||||||
|
status_bar_inactive(source_win);
|
||||||
|
g_hash_table_insert(windows, GINT_TO_POINTER(target_win), source);
|
||||||
|
if (source->unread > 0) {
|
||||||
|
status_bar_new(target_win);
|
||||||
|
} else {
|
||||||
|
status_bar_active(target_win);
|
||||||
|
}
|
||||||
|
if ((wins_get_current_num() == source_win) || (wins_get_current_num() == target_win)) {
|
||||||
|
ui_switch_win(1);
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
// target window occupied
|
||||||
|
} else {
|
||||||
|
g_hash_table_steal(windows, GINT_TO_POINTER(source_win));
|
||||||
|
g_hash_table_steal(windows, GINT_TO_POINTER(target_win));
|
||||||
|
g_hash_table_insert(windows, GINT_TO_POINTER(source_win), target);
|
||||||
|
g_hash_table_insert(windows, GINT_TO_POINTER(target_win), source);
|
||||||
|
if (source->unread > 0) {
|
||||||
|
status_bar_new(target_win);
|
||||||
|
} else {
|
||||||
|
status_bar_active(target_win);
|
||||||
|
}
|
||||||
|
if (target->unread > 0) {
|
||||||
|
status_bar_new(source_win);
|
||||||
|
} else {
|
||||||
|
status_bar_active(source_win);
|
||||||
|
}
|
||||||
|
if ((wins_get_current_num() == source_win) || (wins_get_current_num() == target_win)) {
|
||||||
|
ui_switch_win(1);
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
wins_tidy(void)
|
wins_tidy(void)
|
||||||
{
|
{
|
||||||
|
@ -52,5 +52,6 @@ void wins_destroy(void);
|
|||||||
GList * wins_get_nums(void);
|
GList * wins_get_nums(void);
|
||||||
gboolean wins_xmlconsole_exists(void);
|
gboolean wins_xmlconsole_exists(void);
|
||||||
ProfWin * wins_get_xmlconsole(void);
|
ProfWin * wins_get_xmlconsole(void);
|
||||||
|
gboolean wins_swap(int source_win, int target_win);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user