aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/nvim/tui/tui.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/nvim/tui/tui.c b/src/nvim/tui/tui.c
index 0fc153e8ce..0b24a3ebf4 100644
--- a/src/nvim/tui/tui.c
+++ b/src/nvim/tui/tui.c
@@ -129,6 +129,7 @@ typedef struct {
} TUIData;
static bool volatile got_winch = false;
+static bool did_user_set_dimensions = false;
static bool cursor_style_enabled = false;
#ifdef INCLUDE_GENERATED_DECLARATIONS
@@ -338,7 +339,7 @@ static void tui_terminal_start(UI *ui)
data->print_attr_id = -1;
ugrid_init(&data->grid);
terminfo_start(ui);
- update_size(ui);
+ tui_guess_size(ui);
signal_watcher_start(&data->winch_handle, sigwinch_cb, SIGWINCH);
term_input_start(&data->input);
}
@@ -465,7 +466,7 @@ static void sigwinch_cb(SignalWatcher *watcher, int signum, void *data)
return;
}
- update_size(ui);
+ tui_guess_size(ui);
ui_schedule_refresh();
}
@@ -889,7 +890,8 @@ static void tui_grid_resize(UI *ui, Integer g, Integer width, Integer height)
r->right = MIN(r->right, grid->width);
}
- if (!got_winch) { // Try to resize the terminal window.
+ if (!got_winch && (!starting || did_user_set_dimensions)) {
+ // Resize the _host_ terminal.
UNIBI_SET_NUM_VAR(data->params[0], (int)height);
UNIBI_SET_NUM_VAR(data->params[1], (int)width);
unibi_out_ext(ui, data->unibi_ext.resize_screen);
@@ -1347,13 +1349,16 @@ static void invalidate(UI *ui, int top, int bot, int left, int right)
}
}
-static void update_size(UI *ui)
+/// Tries to get the user's wanted dimensions (columns and rows) for the entire
+/// application (i.e., the host terminal).
+static void tui_guess_size(UI *ui)
{
TUIData *data = ui->data;
int width = 0, height = 0;
// 1 - look for non-default 'columns' and 'lines' options during startup
- if (starting != 0 && (Columns != DFLT_COLS || Rows != DFLT_ROWS)) {
+ if (starting && (Columns != DFLT_COLS || Rows != DFLT_ROWS)) {
+ did_user_set_dimensions = true;
assert(Columns >= INT_MIN && Columns <= INT_MAX);
assert(Rows >= INT_MIN && Rows <= INT_MAX);
width = (int)Columns;