mirror of
https://github.com/kovidgoyal/kitty
synced 2026-06-08 22:28:24 +02:00
Make the tab bar colors configurable
This commit is contained in:
@@ -9,7 +9,7 @@ from threading import Lock
|
||||
|
||||
from .config import build_ansi_color_table
|
||||
from .constants import get_boss, viewport_size, cell_size, ScreenGeometry, GLuint
|
||||
from .utils import get_logical_dpi, to_color, set_primary_selection, open_url
|
||||
from .utils import get_logical_dpi, to_color, set_primary_selection, open_url, color_as_int
|
||||
from .fast_data_types import (
|
||||
glUniform2ui, glUniform4f, glUniform1i, glUniform2f, glDrawArraysInstanced,
|
||||
GL_TRIANGLE_FAN, glEnable, glDisable, GL_BLEND, glDrawArrays, ColorProfile,
|
||||
@@ -22,10 +22,6 @@ if DATA_CELL_SIZE % 3:
|
||||
raise ValueError('Incorrect data cell size, must be a multiple of 3')
|
||||
|
||||
|
||||
def color_as_int(val):
|
||||
return val[0] << 16 | val[1] << 8 | val[2]
|
||||
|
||||
|
||||
# cell shader {{{
|
||||
|
||||
cell_shader = (
|
||||
@@ -216,6 +212,17 @@ def calculate_gl_geometry(window_geometry):
|
||||
return ScreenGeometry(xstart, ystart, window_geometry.xnum, window_geometry.ynum, dx, dy)
|
||||
|
||||
|
||||
def render_cells(buffer_id, sg, cell_program, sprites):
|
||||
sprites.bind_sprite_map(buffer_id)
|
||||
ul = cell_program.uniform_location
|
||||
glUniform2ui(ul('dimensions'), sg.xnum, sg.ynum)
|
||||
glUniform4f(ul('steps'), sg.xstart, sg.ystart, sg.dx, sg.dy)
|
||||
glUniform1i(ul('sprites'), sprites.sampler_num)
|
||||
glUniform1i(ul('sprite_map'), sprites.buffer_sampler_num)
|
||||
glUniform2f(ul('sprite_layout'), *(sprites.layout))
|
||||
glDrawArraysInstanced(GL_TRIANGLE_FAN, 0, 4, sg.xnum * sg.ynum)
|
||||
|
||||
|
||||
class CharGrid:
|
||||
|
||||
url_pat = re.compile('(?:http|https|file|ftp)://\S+', re.IGNORECASE)
|
||||
@@ -430,14 +437,7 @@ class CharGrid:
|
||||
return sg
|
||||
|
||||
def render_cells(self, sg, cell_program, sprites):
|
||||
sprites.bind_sprite_map(self.buffer_id)
|
||||
ul = cell_program.uniform_location
|
||||
glUniform2ui(ul('dimensions'), sg.xnum, sg.ynum)
|
||||
glUniform4f(ul('steps'), sg.xstart, sg.ystart, sg.dx, sg.dy)
|
||||
glUniform1i(ul('sprites'), sprites.sampler_num)
|
||||
glUniform1i(ul('sprite_map'), sprites.buffer_sampler_num)
|
||||
glUniform2f(ul('sprite_layout'), *(sprites.layout))
|
||||
glDrawArraysInstanced(GL_TRIANGLE_FAN, 0, 4, sg.xnum * sg.ynum)
|
||||
render_cells(self.buffer_id, sg, cell_program, sprites)
|
||||
|
||||
def render_cursor(self, sg, cursor_program):
|
||||
cursor = self.current_cursor
|
||||
|
||||
@@ -109,6 +109,9 @@ for name in 'foreground background cursor active_border_color inactive_border_co
|
||||
type_map[name] = lambda x: to_color(x, validate=True)
|
||||
for i in range(16):
|
||||
type_map['color%d' % i] = lambda x: to_color(x, validate=True)
|
||||
for a in ('active', 'inactive'):
|
||||
for b in ('foreground', 'background'):
|
||||
type_map['%s_tab_%s' % (a, b)] = lambda x: to_color(x, validate=True)
|
||||
|
||||
|
||||
def parse_config(lines):
|
||||
|
||||
@@ -77,6 +77,13 @@ active_border_color #00ff00
|
||||
# The color for the border of inactive windows
|
||||
inactive_border_color #cccccc
|
||||
|
||||
# Tab-bar colors
|
||||
active_tab_foreground #000
|
||||
active_tab_background #eee
|
||||
inactive_tab_foreground #000
|
||||
inactive_tab_background #aaa
|
||||
|
||||
|
||||
# The 16 terminal colors. There are 8 basic colors, each color has a dull and
|
||||
# bright version.
|
||||
|
||||
|
||||
@@ -9,13 +9,10 @@ from ctypes import addressof
|
||||
from .child import Child
|
||||
from .config import build_ansi_color_table
|
||||
from .constants import get_boss, appname, shell_path, cell_size, queue_action, viewport_size, WindowGeometry, GLuint
|
||||
from .fast_data_types import (
|
||||
glfw_post_empty_event, Screen, DECAWM, DATA_CELL_SIZE,
|
||||
ColorProfile, glUniform2ui, glUniform4f, glUniform1i, glUniform2f,
|
||||
glDrawArraysInstanced, GL_TRIANGLE_FAN
|
||||
)
|
||||
from .char_grid import calculate_gl_geometry
|
||||
from .fast_data_types import glfw_post_empty_event, Screen, DECAWM, DATA_CELL_SIZE, ColorProfile
|
||||
from .char_grid import calculate_gl_geometry, render_cells
|
||||
from .layout import all_layouts
|
||||
from .utils import color_as_int
|
||||
from .borders import Borders
|
||||
from .window import Window
|
||||
|
||||
@@ -154,12 +151,15 @@ class TabManager:
|
||||
|
||||
def __init__(self, opts, args, startup_session):
|
||||
self.opts, self.args = opts, args
|
||||
self.buffer_id = None
|
||||
self.tabs = [Tab(opts, args, self.title_changed, t) for t in startup_session.tabs]
|
||||
self.active_tab_idx = startup_session.active_tab_idx
|
||||
self.tabbar_lock = Lock()
|
||||
self.tabbar_dirty = True
|
||||
self.color_profile = ColorProfile()
|
||||
self.color_profile.update_ansi_color_table(build_ansi_color_table(opts))
|
||||
self.default_fg = color_as_int(opts.inactive_tab_foreground)
|
||||
self.default_bg = color_as_int(opts.inactive_tab_background)
|
||||
|
||||
def resize(self):
|
||||
for tab in self.tabs:
|
||||
@@ -225,12 +225,4 @@ class TabManager:
|
||||
with self.tabbar_lock:
|
||||
if self.tabbar_dirty:
|
||||
self.update_tab_bar_data(sprites)
|
||||
sprites.bind_sprite_map(self.buffer_id)
|
||||
ul, sg = cell_program.uniform_location, self.screen_geometry
|
||||
ul = cell_program.uniform_location
|
||||
glUniform2ui(ul('dimensions'), sg.xnum, sg.ynum)
|
||||
glUniform4f(ul('steps'), sg.xstart, sg.ystart, sg.dx, sg.dy)
|
||||
glUniform1i(ul('sprites'), sprites.sampler_num)
|
||||
glUniform1i(ul('sprite_map'), sprites.buffer_sampler_num)
|
||||
glUniform2f(ul('sprite_layout'), *(sprites.layout))
|
||||
glDrawArraysInstanced(GL_TRIANGLE_FAN, 0, 4, sg.xnum * sg.ynum)
|
||||
render_cells(self.buffer_id, self.screen_geometry, cell_program, sprites)
|
||||
|
||||
@@ -237,6 +237,10 @@ def to_color(raw, validate=False):
|
||||
return Color(int(val[:2], 16), int(val[2:4], 16), int(val[4:], 16))
|
||||
|
||||
|
||||
def color_as_int(val):
|
||||
return val[0] << 16 | val[1] << 8 | val[2]
|
||||
|
||||
|
||||
def parse_color_set(raw):
|
||||
parts = raw.split(';')
|
||||
for c, spec in [parts[i:i + 2] for i in range(0, len(parts), 2)]:
|
||||
|
||||
Reference in New Issue
Block a user