mirror of
https://github.com/tmux/tmux.git
synced 2026-05-30 22:26:18 +00:00
Add feature for progress bar and pass to outside terminal, GitHu issue
4972 from Eric Dorland.
This commit is contained in:
@@ -45,6 +45,7 @@ static void server_client_check_redraw(struct client *);
|
|||||||
static void server_client_check_modes(struct client *);
|
static void server_client_check_modes(struct client *);
|
||||||
static void server_client_set_title(struct client *);
|
static void server_client_set_title(struct client *);
|
||||||
static void server_client_set_path(struct client *);
|
static void server_client_set_path(struct client *);
|
||||||
|
static void server_client_set_progress_bar(struct client *);
|
||||||
static void server_client_reset_state(struct client *);
|
static void server_client_reset_state(struct client *);
|
||||||
static void server_client_update_latest(struct client *);
|
static void server_client_update_latest(struct client *);
|
||||||
static void server_client_dispatch(struct imsg *, void *);
|
static void server_client_dispatch(struct imsg *, void *);
|
||||||
@@ -2060,6 +2061,7 @@ server_client_check_redraw(struct client *c)
|
|||||||
server_client_set_title(c);
|
server_client_set_title(c);
|
||||||
server_client_set_path(c);
|
server_client_set_path(c);
|
||||||
}
|
}
|
||||||
|
server_client_set_progress_bar(c);
|
||||||
screen_redraw_screen(c);
|
screen_redraw_screen(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2126,6 +2128,23 @@ server_client_set_path(struct client *c)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Set client progress bar. */
|
||||||
|
static void
|
||||||
|
server_client_set_progress_bar(struct client *c)
|
||||||
|
{
|
||||||
|
struct session *s = c->session;
|
||||||
|
struct progress_bar *pane_pb;
|
||||||
|
|
||||||
|
if (s->curw == NULL)
|
||||||
|
return;
|
||||||
|
pane_pb = &s->curw->window->active->base.progress_bar;
|
||||||
|
if (pane_pb->state == c->progress_bar.state &&
|
||||||
|
pane_pb->progress == c->progress_bar.progress)
|
||||||
|
return;
|
||||||
|
memcpy(&c->progress_bar, pane_pb, sizeof c->progress_bar);
|
||||||
|
tty_set_progress_bar(&c->tty, &c->progress_bar);
|
||||||
|
}
|
||||||
|
|
||||||
/* Dispatch message from client. */
|
/* Dispatch message from client. */
|
||||||
static void
|
static void
|
||||||
server_client_dispatch(struct imsg *imsg, void *arg)
|
server_client_dispatch(struct imsg *imsg, void *arg)
|
||||||
|
|||||||
4
tmux.1
4
tmux.1
@@ -4487,6 +4487,8 @@ mouse sequences.
|
|||||||
Supports the OSC 7 working directory extension.
|
Supports the OSC 7 working directory extension.
|
||||||
.It overline
|
.It overline
|
||||||
Supports the overline SGR attribute.
|
Supports the overline SGR attribute.
|
||||||
|
.It progressbar
|
||||||
|
Supports the OSC 9;4 progress bar extension.
|
||||||
.It rectfill
|
.It rectfill
|
||||||
Supports the DECFRA rectangle fill escape sequence.
|
Supports the DECFRA rectangle fill escape sequence.
|
||||||
.It RGB
|
.It RGB
|
||||||
@@ -7852,6 +7854,8 @@ $ printf \[aq]\e033[4 q\[aq]
|
|||||||
If
|
If
|
||||||
.Em Se
|
.Em Se
|
||||||
is not set, \&Ss with argument 0 will be used to reset the cursor style instead.
|
is not set, \&Ss with argument 0 will be used to reset the cursor style instead.
|
||||||
|
.It Em \&Spb
|
||||||
|
Set the state and progress for the OSC9;4 progress bar.
|
||||||
.It Em \&Swd
|
.It Em \&Swd
|
||||||
Set the opening sequence for the working directory notification.
|
Set the opening sequence for the working directory notification.
|
||||||
The sequence is terminated using the standard
|
The sequence is terminated using the standard
|
||||||
|
|||||||
3
tmux.h
3
tmux.h
@@ -629,6 +629,7 @@ enum tty_code_code {
|
|||||||
TTYC_SMUL,
|
TTYC_SMUL,
|
||||||
TTYC_SMULX,
|
TTYC_SMULX,
|
||||||
TTYC_SMXX,
|
TTYC_SMXX,
|
||||||
|
TTYC_SPB,
|
||||||
TTYC_SXL,
|
TTYC_SXL,
|
||||||
TTYC_SS,
|
TTYC_SS,
|
||||||
TTYC_SWD,
|
TTYC_SWD,
|
||||||
@@ -1982,6 +1983,7 @@ struct client {
|
|||||||
char *title;
|
char *title;
|
||||||
char *path;
|
char *path;
|
||||||
const char *cwd;
|
const char *cwd;
|
||||||
|
struct progress_bar progress_bar;
|
||||||
|
|
||||||
char *term_name;
|
char *term_name;
|
||||||
int term_features;
|
int term_features;
|
||||||
@@ -2621,6 +2623,7 @@ void tty_repeat_requests(struct tty *, int);
|
|||||||
void tty_stop_tty(struct tty *);
|
void tty_stop_tty(struct tty *);
|
||||||
void tty_set_title(struct tty *, const char *);
|
void tty_set_title(struct tty *, const char *);
|
||||||
void tty_set_path(struct tty *, const char *);
|
void tty_set_path(struct tty *, const char *);
|
||||||
|
void tty_set_progress_bar(struct tty *, struct progress_bar *);
|
||||||
void tty_default_attributes(struct tty *, const struct grid_cell *,
|
void tty_default_attributes(struct tty *, const struct grid_cell *,
|
||||||
struct colour_palette *, u_int, struct hyperlinks *);
|
struct colour_palette *, u_int, struct hyperlinks *);
|
||||||
void tty_update_mode(struct tty *, int, struct screen *);
|
void tty_update_mode(struct tty *, int, struct screen *);
|
||||||
|
|||||||
@@ -347,6 +347,17 @@ static const struct tty_feature tty_feature_sixel = {
|
|||||||
TERM_SIXEL
|
TERM_SIXEL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Terminal supports the OSC 9;4 progress bar. */
|
||||||
|
static const char *const tty_feature_progressbar_capabilities[] = {
|
||||||
|
"Spb=\\E]9;4;%p1%d;%p2%d\\E\\\\",
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
static const struct tty_feature tty_feature_progressbar = {
|
||||||
|
"progressbar",
|
||||||
|
tty_feature_progressbar_capabilities,
|
||||||
|
0
|
||||||
|
};
|
||||||
|
|
||||||
/* Available terminal features. */
|
/* Available terminal features. */
|
||||||
static const struct tty_feature *const tty_features[] = {
|
static const struct tty_feature *const tty_features[] = {
|
||||||
&tty_feature_256,
|
&tty_feature_256,
|
||||||
@@ -362,6 +373,7 @@ static const struct tty_feature *const tty_features[] = {
|
|||||||
&tty_feature_mouse,
|
&tty_feature_mouse,
|
||||||
&tty_feature_osc7,
|
&tty_feature_osc7,
|
||||||
&tty_feature_overline,
|
&tty_feature_overline,
|
||||||
|
&tty_feature_progressbar,
|
||||||
&tty_feature_rectfill,
|
&tty_feature_rectfill,
|
||||||
&tty_feature_rgb,
|
&tty_feature_rgb,
|
||||||
&tty_feature_sixel,
|
&tty_feature_sixel,
|
||||||
@@ -480,7 +492,8 @@ tty_default_features(int *feat, const char *name, u_int version)
|
|||||||
"focus,"
|
"focus,"
|
||||||
"overline,"
|
"overline,"
|
||||||
"usstyle,"
|
"usstyle,"
|
||||||
"hyperlinks"
|
"hyperlinks,"
|
||||||
|
"progressbar"
|
||||||
},
|
},
|
||||||
{ .name = "rxvt-unicode",
|
{ .name = "rxvt-unicode",
|
||||||
.features = "256,"
|
.features = "256,"
|
||||||
@@ -499,7 +512,8 @@ tty_default_features(int *feat, const char *name, u_int version)
|
|||||||
"usstyle,"
|
"usstyle,"
|
||||||
"sync,"
|
"sync,"
|
||||||
"osc7,"
|
"osc7,"
|
||||||
"hyperlinks"
|
"hyperlinks,"
|
||||||
|
"progressbar"
|
||||||
},
|
},
|
||||||
{ .name = "foot",
|
{ .name = "foot",
|
||||||
.features = TTY_FEATURES_BASE_MODERN_XTERM ","
|
.features = TTY_FEATURES_BASE_MODERN_XTERM ","
|
||||||
|
|||||||
@@ -277,6 +277,7 @@ static const struct tty_term_code_entry tty_term_codes[] = {
|
|||||||
[TTYC_SMULX] = { TTYCODE_STRING, "Smulx" },
|
[TTYC_SMULX] = { TTYCODE_STRING, "Smulx" },
|
||||||
[TTYC_SMUL] = { TTYCODE_STRING, "smul" },
|
[TTYC_SMUL] = { TTYCODE_STRING, "smul" },
|
||||||
[TTYC_SMXX] = { TTYCODE_STRING, "smxx" },
|
[TTYC_SMXX] = { TTYCODE_STRING, "smxx" },
|
||||||
|
[TTYC_SPB] = { TTYCODE_STRING, "Spb" },
|
||||||
[TTYC_SS] = { TTYCODE_STRING, "Ss" },
|
[TTYC_SS] = { TTYCODE_STRING, "Ss" },
|
||||||
[TTYC_SWD] = { TTYCODE_STRING, "Swd" },
|
[TTYC_SWD] = { TTYCODE_STRING, "Swd" },
|
||||||
[TTYC_SYNC] = { TTYCODE_STRING, "Sync" },
|
[TTYC_SYNC] = { TTYCODE_STRING, "Sync" },
|
||||||
|
|||||||
7
tty.c
7
tty.c
@@ -2931,3 +2931,10 @@ tty_clipboard_query(struct tty *tty)
|
|||||||
evtimer_add(&tty->clipboard_timer, &tv);
|
evtimer_add(&tty->clipboard_timer, &tv);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
tty_set_progress_bar(struct tty *tty, struct progress_bar *pb)
|
||||||
|
{
|
||||||
|
if (tty_term_has(tty->term, TTYC_SPB))
|
||||||
|
tty_putcode_ii(tty, TTYC_SPB, pb->state, pb->progress);
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user