Tmux: Add overlay for color customization.
This commit is contained in:
parent
aeed92a349
commit
5cfbb60b83
22
overlay/Tmux.nix
Normal file
22
overlay/Tmux.nix
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
{
|
||||||
|
__findFile,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
} @args: {
|
||||||
|
# SEE: https://github.com/tmux/tmux/issues/4264
|
||||||
|
# FIXME: Later.
|
||||||
|
nixpkgs.overlays = [(final: prev: {
|
||||||
|
tmux = prev.tmux.overrideAttrs (old: {
|
||||||
|
src = prev.fetchFromGitHub {
|
||||||
|
hash = "sha256-EuTEN+B+rE76nLQRIljy2PL2gp+rVGk+ygEhQA2nZww=";
|
||||||
|
owner = "tmux";
|
||||||
|
repo = "tmux";
|
||||||
|
rev = "db978db27161f57b01f22407d2dda2bce203c2cf";
|
||||||
|
};
|
||||||
|
patches = (old.patches or [ ]) ++ [
|
||||||
|
<patch/tmux/SelectionStyle.patch>
|
||||||
|
];
|
||||||
|
});
|
||||||
|
})];
|
||||||
|
}
|
124
patch/tmux/SelectionStyle.patch
Normal file
124
patch/tmux/SelectionStyle.patch
Normal file
|
@ -0,0 +1,124 @@
|
||||||
|
diff --git a/options-table.c b/options-table.c
|
||||||
|
index 515714f..92b127e 100644
|
||||||
|
--- a/options-table.c
|
||||||
|
+++ b/options-table.c
|
||||||
|
@@ -1025,6 +1025,24 @@ const struct options_table_entry options_table[] = {
|
||||||
|
.text = "Format of the position indicator in copy mode."
|
||||||
|
},
|
||||||
|
|
||||||
|
+ { .name = "copy-mode-position-style",
|
||||||
|
+ .type = OPTIONS_TABLE_STRING,
|
||||||
|
+ .scope = OPTIONS_TABLE_WINDOW,
|
||||||
|
+ .default_str = "#{mode-style}",
|
||||||
|
+ .flags = OPTIONS_TABLE_IS_STYLE,
|
||||||
|
+ .separator = ",",
|
||||||
|
+ .text = "Style of position indicator in copy mode."
|
||||||
|
+ },
|
||||||
|
+
|
||||||
|
+ { .name = "copy-mode-selection-style",
|
||||||
|
+ .type = OPTIONS_TABLE_STRING,
|
||||||
|
+ .scope = OPTIONS_TABLE_WINDOW,
|
||||||
|
+ .default_str = "#{mode-style}",
|
||||||
|
+ .flags = OPTIONS_TABLE_IS_STYLE,
|
||||||
|
+ .separator = ",",
|
||||||
|
+ .text = "Style of selection in copy mode."
|
||||||
|
+ },
|
||||||
|
+
|
||||||
|
{ .name = "fill-character",
|
||||||
|
.type = OPTIONS_TABLE_STRING,
|
||||||
|
.scope = OPTIONS_TABLE_WINDOW,
|
||||||
|
diff --git a/tmux.1 b/tmux.1
|
||||||
|
index 98cf871..38552cf 100644
|
||||||
|
--- a/tmux.1
|
||||||
|
+++ b/tmux.1
|
||||||
|
@@ -4890,6 +4890,22 @@ or
|
||||||
|
contains
|
||||||
|
.Ql vi .
|
||||||
|
.Pp
|
||||||
|
+.It Ic copy-mode-position-style Ar style
|
||||||
|
+Set the style of the position indicator in copy mode.
|
||||||
|
+For how to specify
|
||||||
|
+.Ar style ,
|
||||||
|
+see the
|
||||||
|
+.Sx STYLES
|
||||||
|
+section.
|
||||||
|
+.Pp
|
||||||
|
+.It Ic copy-mode-selection-style Ar style
|
||||||
|
+Set the style of the selection in copy mode.
|
||||||
|
+For how to specify
|
||||||
|
+.Ar style ,
|
||||||
|
+see the
|
||||||
|
+.Sx STYLES
|
||||||
|
+section.
|
||||||
|
+.Pp
|
||||||
|
.It Ic mode-style Ar style
|
||||||
|
Set window modes style.
|
||||||
|
For how to specify
|
||||||
|
diff --git a/window-copy.c b/window-copy.c
|
||||||
|
index 36b9f89..1cda6d3 100644
|
||||||
|
--- a/window-copy.c
|
||||||
|
+++ b/window-copy.c
|
||||||
|
@@ -4391,13 +4391,15 @@ window_copy_write_line(struct window_mode_entry *wme,
|
||||||
|
char *expanded;
|
||||||
|
struct format_tree *ft;
|
||||||
|
|
||||||
|
- style_apply(&gc, oo, "mode-style", NULL);
|
||||||
|
+ ft = format_create_defaults(NULL, NULL, NULL, NULL, wp);
|
||||||
|
+
|
||||||
|
+ style_apply(&gc, oo, "copy-mode-position-style", ft);
|
||||||
|
gc.flags |= GRID_FLAG_NOPALETTE;
|
||||||
|
- style_apply(&mgc, oo, "copy-mode-match-style", NULL);
|
||||||
|
+ style_apply(&mgc, oo, "copy-mode-match-style", ft);
|
||||||
|
mgc.flags |= GRID_FLAG_NOPALETTE;
|
||||||
|
- style_apply(&cgc, oo, "copy-mode-current-match-style", NULL);
|
||||||
|
+ style_apply(&cgc, oo, "copy-mode-current-match-style", ft);
|
||||||
|
cgc.flags |= GRID_FLAG_NOPALETTE;
|
||||||
|
- style_apply(&mkgc, oo, "copy-mode-mark-style", NULL);
|
||||||
|
+ style_apply(&mkgc, oo, "copy-mode-mark-style", ft);
|
||||||
|
mkgc.flags |= GRID_FLAG_NOPALETTE;
|
||||||
|
|
||||||
|
window_copy_write_one(wme, ctx, py, hsize - data->oy + py,
|
||||||
|
@@ -4406,14 +4408,12 @@ window_copy_write_line(struct window_mode_entry *wme,
|
||||||
|
if (py == 0 && s->rupper < s->rlower && !data->hide_position) {
|
||||||
|
value = options_get_string(oo, "copy-mode-position-format");
|
||||||
|
if (*value != '\0') {
|
||||||
|
- ft = format_create_defaults(NULL, NULL, NULL, NULL, wp);
|
||||||
|
expanded = format_expand(ft, value);
|
||||||
|
if (*expanded != '\0') {
|
||||||
|
screen_write_cursormove(ctx, 0, 0, 0);
|
||||||
|
format_draw(ctx, &gc, sx, expanded, NULL, 0);
|
||||||
|
}
|
||||||
|
free(expanded);
|
||||||
|
- format_free(ft);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -4421,6 +4421,8 @@ window_copy_write_line(struct window_mode_entry *wme,
|
||||||
|
screen_write_cursormove(ctx, screen_size_x(s) - 1, py, 0);
|
||||||
|
screen_write_putc(ctx, &grid_default_cell, '$');
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ format_free(ft);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
@@ -4668,6 +4670,7 @@ window_copy_set_selection(struct window_mode_entry *wme, int may_redraw,
|
||||||
|
struct grid_cell gc;
|
||||||
|
u_int sx, sy, cy, endsx, endsy;
|
||||||
|
int startrelpos, endrelpos;
|
||||||
|
+ struct format_tree *ft;
|
||||||
|
|
||||||
|
window_copy_synchronize_cursor(wme, no_reset);
|
||||||
|
|
||||||
|
@@ -4689,8 +4692,10 @@ window_copy_set_selection(struct window_mode_entry *wme, int may_redraw,
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set colours and selection. */
|
||||||
|
- style_apply(&gc, oo, "mode-style", NULL);
|
||||||
|
+ ft = format_create_defaults(NULL, NULL, NULL, NULL, wp);
|
||||||
|
+ style_apply(&gc, oo, "copy-mode-selection-style", ft);
|
||||||
|
gc.flags |= GRID_FLAG_NOPALETTE;
|
||||||
|
+ format_free(ft);
|
||||||
|
screen_set_selection(s, sx, sy, endsx, endsy, data->rectflag,
|
||||||
|
data->modekeys, &gc);
|
||||||
|
|
Loading…
Reference in a new issue