From c3f4e734f1b26fc1f243f1d283326018c6c378f5 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 11 Oct 2021 18:00:18 +0530 Subject: [PATCH] API to set screen window number --- kitty/fast_data_types.pyi | 3 +++ kitty/screen.c | 12 ++++++++++++ kitty/screen.h | 1 + kitty/shaders.c | 4 ++-- 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/kitty/fast_data_types.pyi b/kitty/fast_data_types.pyi index 41c384b5b..95b6909ed 100644 --- a/kitty/fast_data_types.pyi +++ b/kitty/fast_data_types.pyi @@ -973,6 +973,9 @@ class Screen: def ignore_bells_for(self, duration: float = 1) -> None: pass + def set_window_number(self, num: int = -1) -> None: + pass + def current_key_encoding_flags(self) -> int: pass diff --git a/kitty/screen.c b/kitty/screen.c index ebc8d4021..c641c7b4f 100644 --- a/kitty/screen.c +++ b/kitty/screen.c @@ -156,6 +156,7 @@ screen_reset(Screen *self) { if (self->overlay_line.is_active) deactivate_overlay_line(self); memset(self->main_key_encoding_flags, 0, sizeof(self->main_key_encoding_flags)); memset(self->alt_key_encoding_flags, 0, sizeof(self->alt_key_encoding_flags)); + self->display_window_number = 0; self->redraws_multiline_prompts = false; self->last_graphic_char = 0; self->main_savepoint.is_valid = false; @@ -2728,6 +2729,16 @@ reset_dirty(Screen *self, PyObject *a UNUSED) { Py_RETURN_NONE; } +static PyObject* +set_window_number(Screen *self, PyObject *a) { + int num = -1; + if (!PyArg_ParseTuple(a, "|i", &num)) return NULL; + self->display_window_number = MAX(0, num + 1); + self->is_dirty = true; + Py_RETURN_NONE; +} + + static PyObject* is_using_alternate_linebuf(Screen *self, PyObject *a UNUSED) { if (self->linebuf == self->alt_linebuf) Py_RETURN_TRUE; @@ -3536,6 +3547,7 @@ static PyMethodDef methods[] = { MND(draw, METH_O) MND(apply_sgr, METH_O) MND(cursor_position, METH_VARARGS) + MND(set_window_number, METH_VARARGS) MND(set_mode, METH_VARARGS) MND(reset_mode, METH_VARARGS) MND(reset, METH_NOARGS) diff --git a/kitty/screen.h b/kitty/screen.h index c9e3f3c8e..b184dcb4e 100644 --- a/kitty/screen.h +++ b/kitty/screen.h @@ -132,6 +132,7 @@ typedef struct { monotonic_t start, duration; } ignore_bells; bool redraws_multiline_prompts; + unsigned int display_window_number; } Screen; diff --git a/kitty/shaders.c b/kitty/shaders.c index 187d8664f..fc3562870 100644 --- a/kitty/shaders.c +++ b/kitty/shaders.c @@ -481,7 +481,7 @@ draw_window_number(OSWindow *os_window, Screen *screen, GLfloat xstart, GLfloat #define C(shift) ((((GLfloat)((digit_color >> shift) & 0xFF)) / 255.0f)) glUniform4f(seven_segment_program_layout.digit_color_location, C(16), C(8), C(0), 1.); #undef C - glUniform1i(seven_segment_program_layout.digit_location, 8); + glUniform1i(seven_segment_program_layout.digit_location, screen->display_window_number - 1); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); glDisable(GL_BLEND); } @@ -735,7 +735,7 @@ draw_cells(ssize_t vao_idx, ssize_t gvao_idx, GLfloat xstart, GLfloat ystart, GL if (intensity > 0.0f) draw_visual_bell_flash(intensity, xstart, ystart, w, h, screen); } - if (false) draw_window_number(os_window, screen, xstart, ystart, w, h); + if (screen->display_window_number) draw_window_number(os_window, screen, xstart, ystart, w, h); } // }}}