Make underline cursor thickness configurable

This commit is contained in:
Eyal Chojnowski
2020-02-06 16:15:12 +01:00
parent e33f882abc
commit edba63d0d9
6 changed files with 14 additions and 5 deletions

View File

@@ -19,6 +19,9 @@ To update |kitty|, :doc:`follow the instructions <binary>`.
- A new :opt:`cursor_beam_thickness` option to control the thickness of the - A new :opt:`cursor_beam_thickness` option to control the thickness of the
beam cursor (:iss:`2337`) beam cursor (:iss:`2337`)
- A new :opt:`cursor_underline_thickness` option to control the thickness of the
underline cursor
0.16.0 [2020-01-28] 0.16.0 [2020-01-28]

View File

@@ -396,6 +396,8 @@ o('cursor_shape', 'block', option_type=to_cursor_shape, long_text=_(
'The cursor shape can be one of (block, beam, underline)')) 'The cursor shape can be one of (block, beam, underline)'))
o('cursor_beam_thickness', 1.5, option_type=positive_float, long_text=_( o('cursor_beam_thickness', 1.5, option_type=positive_float, long_text=_(
'Defines the thickness of the beam cursor (in pts)')) 'Defines the thickness of the beam cursor (in pts)'))
o('cursor_underline_thickness', 2.0, option_type=positive_float, long_text=_(
'Defines the thickness of the underline cursor (in pts)'))
o('cursor_blink_interval', -1, option_type=float, long_text=_(''' o('cursor_blink_interval', -1, option_type=float, long_text=_('''
The interval (in seconds) at which to blink the cursor. Set to zero to disable The interval (in seconds) at which to blink the cursor. Set to zero to disable
blinking. Negative values mean use system default. Note that numbers smaller blinking. Negative values mean use system default. Note that numbers smaller

View File

@@ -1232,7 +1232,7 @@ send_prerendered_sprites(FontGroup *fg) {
current_send_sprite_to_gpu((FONTS_DATA_HANDLE)fg, x, y, z, fg->canvas); current_send_sprite_to_gpu((FONTS_DATA_HANDLE)fg, x, y, z, fg->canvas);
do_increment(fg, &error); do_increment(fg, &error);
if (error != 0) { sprite_map_set_error(error); PyErr_Print(); fatal("Failed"); } if (error != 0) { sprite_map_set_error(error); PyErr_Print(); fatal("Failed"); }
PyObject *args = PyObject_CallFunction(prerender_function, "IIIIIfdd", fg->cell_width, fg->cell_height, fg->baseline, fg->underline_position, fg->underline_thickness, OPT(cursor_beam_thickness), fg->logical_dpi_x, fg->logical_dpi_y); PyObject *args = PyObject_CallFunction(prerender_function, "IIIIIffdd", fg->cell_width, fg->cell_height, fg->baseline, fg->underline_position, fg->underline_thickness, OPT(cursor_beam_thickness), fg->logical_dpi_x, fg->logical_dpi_y);
if (args == NULL) { PyErr_Print(); fatal("Failed to pre-render cells"); } if (args == NULL) { PyErr_Print(); fatal("Failed to pre-render cells"); }
for (ssize_t i = 0; i < PyTuple_GET_SIZE(args) - 1; i++) { for (ssize_t i = 0; i < PyTuple_GET_SIZE(args) - 1; i++) {
x = fg->sprite_tracker.x; y = fg->sprite_tracker.y; z = fg->sprite_tracker.z; x = fg->sprite_tracker.x; y = fg->sprite_tracker.y; z = fg->sprite_tracker.z;

View File

@@ -192,7 +192,7 @@ def render_special(
return ans return ans
def render_cursor(which, cursor_beam_thickness, cell_width=0, cell_height=0, dpi_x=0, dpi_y=0): def render_cursor(which, cursor_beam_thickness, cursor_underline_thickness, cell_width=0, cell_height=0, dpi_x=0, dpi_y=0):
CharTexture = ctypes.c_ubyte * (cell_width * cell_height) CharTexture = ctypes.c_ubyte * (cell_width * cell_height)
ans = CharTexture() ans = CharTexture()
@@ -215,19 +215,21 @@ def render_cursor(which, cursor_beam_thickness, cell_width=0, cell_height=0, dpi
if which == 1: # beam if which == 1: # beam
vert('left', cursor_beam_thickness) vert('left', cursor_beam_thickness)
elif which == 2: # underline elif which == 2: # underline
horz('bottom', 2.0) horz('bottom', cursor_underline_thickness)
elif which == 3: # hollow elif which == 3: # hollow
vert('left'), vert('right'), horz('top'), horz('bottom') vert('left'), vert('right'), horz('top'), horz('bottom')
return ans return ans
def prerender_function(cell_width, cell_height, baseline, underline_position, underline_thickness, cursor_beam_thickness, dpi_x, dpi_y): def prerender_function(cell_width, cell_height, baseline, underline_position, underline_thickness, cursor_beam_thickness, cursor_underline_thickness, dpi_x, dpi_y):
# Pre-render the special underline, strikethrough and missing and cursor cells # Pre-render the special underline, strikethrough and missing and cursor cells
f = partial( f = partial(
render_special, cell_width=cell_width, cell_height=cell_height, baseline=baseline, render_special, cell_width=cell_width, cell_height=cell_height, baseline=baseline,
underline_position=underline_position, underline_thickness=underline_thickness) underline_position=underline_position, underline_thickness=underline_thickness)
c = partial( c = partial(
render_cursor, cursor_beam_thickness=cursor_beam_thickness, cell_width=cell_width, cell_height=cell_height, dpi_x=dpi_x, dpi_y=dpi_y) render_cursor, cursor_beam_thickness=cursor_beam_thickness,
cursor_underline_thickness=cursor_underline_thickness, cell_width=cell_width,
cell_height=cell_height, dpi_x=dpi_x, dpi_y=dpi_y)
cells = f(1), f(2), f(3), f(0, True), f(missing=True), c(1), c(2), c(3) cells = f(1), f(2), f(3), f(0, True), f(missing=True), c(1), c(2), c(3)
return tuple(map(ctypes.addressof, cells)) + (cells,) return tuple(map(ctypes.addressof, cells)) + (cells,)

View File

@@ -569,6 +569,7 @@ PYWRAP1(set_options) {
S(scrollback_pager_history_size, PyLong_AsUnsignedLong); S(scrollback_pager_history_size, PyLong_AsUnsignedLong);
S(cursor_shape, PyLong_AsLong); S(cursor_shape, PyLong_AsLong);
S(cursor_beam_thickness, PyFloat_AsFloat); S(cursor_beam_thickness, PyFloat_AsFloat);
S(cursor_underline_thickness, PyFloat_AsFloat);
S(url_style, PyLong_AsUnsignedLong); S(url_style, PyLong_AsUnsignedLong);
S(tab_bar_edge, PyLong_AsLong); S(tab_bar_edge, PyLong_AsLong);
S(mouse_hide_wait, parse_s_double_to_monotonic_t); S(mouse_hide_wait, parse_s_double_to_monotonic_t);

View File

@@ -21,6 +21,7 @@ typedef struct {
bool enable_audio_bell; bool enable_audio_bell;
CursorShape cursor_shape; CursorShape cursor_shape;
float cursor_beam_thickness; float cursor_beam_thickness;
float cursor_underline_thickness;
unsigned int open_url_modifiers; unsigned int open_url_modifiers;
unsigned int rectangle_select_modifiers; unsigned int rectangle_select_modifiers;
unsigned int terminal_select_modifiers; unsigned int terminal_select_modifiers;