xF: close buffers on middle click

This commit is contained in:
2026-08-07 09:04:37 +02:00
parent 41be32692c
commit 1704f90934
+32 -13
View File
@@ -1945,6 +1945,7 @@ tui_make_editor (chtype attrs)
widget->attrs = attrs;
widget->width = -1;
widget->height = 1;
widget->text = "";
return widget;
}
@@ -2001,6 +2002,7 @@ x11_make_editor (chtype attrs)
widget->attrs = attrs;
widget->width = -1;
widget->height = g_xui.vunit;
widget->text = "";
return widget;
}
@@ -2987,15 +2989,29 @@ app_layout (void)
// ~~~ Buffer input and history ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
static void
app_send_buffer_activate (struct buffer *b)
app_send_buffer_activate (const struct buffer *b)
{
if (!b)
return;
struct relay_command_message m = {};
m.data.buffer_activate.command = RELAY_COMMAND_BUFFER_ACTIVATE;
m.data.buffer_activate.buffer_name = str_make ();
str_append (&m.data.buffer_activate.buffer_name, b->buffer_name);
m.data.buffer_activate.buffer_name = str_from_cstr (b->buffer_name);
relay_send (&m, NULL);
}
static void
app_send_buffer_close (const struct buffer *b)
{
if (!b)
return;
struct relay_command_message m = {};
m.data.buffer_input.command = RELAY_COMMAND_BUFFER_INPUT;
m.data.buffer_input.buffer_name = str_from_cstr (b->buffer_name);
m.data.buffer_input.text = str_make ();
str_append_printf (&m.data.buffer_input.text,
"/buffer close %s", b->buffer_name);
relay_send (&m, NULL);
}
@@ -3009,11 +3025,9 @@ app_submit_input (void)
struct relay_command_message m = {};
m.data.buffer_input.command = RELAY_COMMAND_BUFFER_INPUT;
m.data.buffer_input.buffer_name = str_make ();
m.data.buffer_input.text = str_make ();
str_append (&m.data.buffer_input.buffer_name,
g.buffer_current->buffer_name);
str_append (&m.data.buffer_input.text, text);
m.data.buffer_input.buffer_name =
str_from_cstr (g.buffer_current->buffer_name);
m.data.buffer_input.text = str_from_cstr (text);
if (!relay_send (&m, NULL))
{
@@ -3174,9 +3188,8 @@ app_toggle_unimportant (void)
struct relay_command_message m = {};
m.data.buffer_toggle_unimportant.command =
RELAY_COMMAND_BUFFER_TOGGLE_UNIMPORTANT;
m.data.buffer_toggle_unimportant.buffer_name = str_make ();
str_append (&m.data.buffer_toggle_unimportant.buffer_name,
g.buffer_current->buffer_name);
m.data.buffer_toggle_unimportant.buffer_name =
str_from_cstr (g.buffer_current->buffer_name);
relay_send (&m, NULL);
}
@@ -3731,13 +3744,19 @@ app_process_mouse (termo_mouse_event_t type, int x, int y, int button,
return transcript && app_widget_contains (transcript, x, y)
&& app_scroll (WIDGET_TRANSCRIPT_SCROLLBAR, amount);
}
if (button != 1)
return false;
struct widget *target = app_interactive_widget_at (g_xui.widgets, x, y);
if (!target)
return false;
if (button == 2 && target->widget_id == WIDGET_BUFFER)
{
app_send_buffer_close (app_buffer_by_index (target->userdata));
return true;
}
if (button != 1)
return false;
if (target->widget_id == WIDGET_BUFFER_LIST_SCROLLBAR
|| target->widget_id == WIDGET_TRANSCRIPT_SCROLLBAR)
{