Skip to content

Commit

Permalink
Merge branch 'obsd-master'
Browse files Browse the repository at this point in the history
  • Loading branch information
ThomasAdam committed Sep 15, 2023
2 parents c57a092 + d394293 commit 9f9156c
Show file tree
Hide file tree
Showing 6 changed files with 58 additions and 28 deletions.
23 changes: 11 additions & 12 deletions cfg.c
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ start_cfg(void)
{
struct client *c;
u_int i;
int flags = 0;

/*
* Configuration files are loaded without a client, so commands are run
Expand All @@ -83,19 +84,17 @@ start_cfg(void)
cmdq_append(c, cfg_item);
}

for (i = 0; i < cfg_nfiles; i++) {
if (cfg_quiet)
load_cfg(cfg_files[i], c, NULL, CMD_PARSE_QUIET, NULL);
else
load_cfg(cfg_files[i], c, NULL, 0, NULL);
}
if (cfg_quiet)
flags = CMD_PARSE_QUIET;
for (i = 0; i < cfg_nfiles; i++)
load_cfg(cfg_files[i], c, NULL, NULL, flags, NULL);

cmdq_append(NULL, cmdq_get_callback(cfg_done, NULL));
}

int
load_cfg(const char *path, struct client *c, struct cmdq_item *item, int flags,
struct cmdq_item **new_item)
load_cfg(const char *path, struct client *c, struct cmdq_item *item,
struct cmd_find_state *current, int flags, struct cmdq_item **new_item)
{
FILE *f;
struct cmd_parse_input pi;
Expand Down Expand Up @@ -134,7 +133,7 @@ load_cfg(const char *path, struct client *c, struct cmdq_item *item, int flags,
}

if (item != NULL)
state = cmdq_copy_state(cmdq_get_state(item));
state = cmdq_copy_state(cmdq_get_state(item), current);
else
state = cmdq_new_state(NULL, NULL, 0);
cmdq_add_format(state, "current_file", "%s", pi.file);
Expand All @@ -154,8 +153,8 @@ load_cfg(const char *path, struct client *c, struct cmdq_item *item, int flags,

int
load_cfg_from_buffer(const void *buf, size_t len, const char *path,
struct client *c, struct cmdq_item *item, int flags,
struct cmdq_item **new_item)
struct client *c, struct cmdq_item *item, struct cmd_find_state *current,
int flags, struct cmdq_item **new_item)
{
struct cmd_parse_input pi;
struct cmd_parse_result *pr;
Expand Down Expand Up @@ -186,7 +185,7 @@ load_cfg_from_buffer(const void *buf, size_t len, const char *path,
}

if (item != NULL)
state = cmdq_copy_state(cmdq_get_state(item));
state = cmdq_copy_state(cmdq_get_state(item), current);
else
state = cmdq_new_state(NULL, NULL, 0);
cmdq_add_format(state, "current_file", "%s", pi.file);
Expand Down
4 changes: 3 additions & 1 deletion cmd-queue.c
Original file line number Diff line number Diff line change
Expand Up @@ -236,8 +236,10 @@ cmdq_link_state(struct cmdq_state *state)

/* Make a copy of a state. */
struct cmdq_state *
cmdq_copy_state(struct cmdq_state *state)
cmdq_copy_state(struct cmdq_state *state, struct cmd_find_state *current)
{
if (current != NULL)
return (cmdq_new_state(current, &state->event, state->flags));
return (cmdq_new_state(&state->current, &state->event, state->flags));
}

Expand Down
9 changes: 6 additions & 3 deletions cmd-source-file.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,10 @@ const struct cmd_entry cmd_source_file_entry = {
.name = "source-file",
.alias = "source",

.args = { "Fnqv", 1, -1, NULL },
.usage = "[-Fnqv] path ...",
.args = { "t:Fnqv", 1, -1, NULL },
.usage = "[-Fnqv] " CMD_TARGET_PANE_USAGE " path ...",

.target = { 't', CMD_FIND_PANE, CMD_FIND_CANFAIL },

.flags = 0,
.exec = cmd_source_file_exec
Expand Down Expand Up @@ -92,6 +94,7 @@ cmd_source_file_done(struct client *c, const char *path, int error,
size_t bsize = EVBUFFER_LENGTH(buffer);
u_int n;
struct cmdq_item *new_item;
struct cmd_find_state *target = cmdq_get_target(item);

if (!closed)
return;
Expand All @@ -100,7 +103,7 @@ cmd_source_file_done(struct client *c, const char *path, int error,
cmdq_error(item, "%s: %s", path, strerror(error));
else if (bsize != 0) {
if (load_cfg_from_buffer(bdata, bsize, path, c, cdata->after,
cdata->flags, &new_item) < 0)
target, cdata->flags, &new_item) < 0)
cdata->retval = CMD_RETURN_ERROR;
else if (new_item != NULL)
cdata->after = new_item;
Expand Down
39 changes: 31 additions & 8 deletions input.c
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,7 @@ static void input_csi_dispatch_rm(struct input_ctx *);
static void input_csi_dispatch_rm_private(struct input_ctx *);
static void input_csi_dispatch_sm(struct input_ctx *);
static void input_csi_dispatch_sm_private(struct input_ctx *);
static void input_csi_dispatch_sm_graphics(struct input_ctx *);
static void input_csi_dispatch_winops(struct input_ctx *);
static void input_csi_dispatch_sgr_256(struct input_ctx *, int, u_int *);
static void input_csi_dispatch_sgr_rgb(struct input_ctx *, int, u_int *);
Expand Down Expand Up @@ -203,7 +204,7 @@ enum input_esc_type {
INPUT_ESC_SCSG0_ON,
INPUT_ESC_SCSG1_OFF,
INPUT_ESC_SCSG1_ON,
INPUT_ESC_ST,
INPUT_ESC_ST
};

/* Escape command table. */
Expand Down Expand Up @@ -259,11 +260,12 @@ enum input_csi_type {
INPUT_CSI_SGR,
INPUT_CSI_SM,
INPUT_CSI_SM_PRIVATE,
INPUT_CSI_SM_GRAPHICS,
INPUT_CSI_SU,
INPUT_CSI_TBC,
INPUT_CSI_VPA,
INPUT_CSI_WINOPS,
INPUT_CSI_XDA,
INPUT_CSI_XDA
};

/* Control (CSI) command table. */
Expand All @@ -283,6 +285,7 @@ static const struct input_table_entry input_csi_table[] = {
{ 'M', "", INPUT_CSI_DL },
{ 'P', "", INPUT_CSI_DCH },
{ 'S', "", INPUT_CSI_SU },
{ 'S', "?", INPUT_CSI_SM_GRAPHICS },
{ 'T', "", INPUT_CSI_SD },
{ 'X', "", INPUT_CSI_ECH },
{ 'Z', "", INPUT_CSI_CBT },
Expand All @@ -306,7 +309,7 @@ static const struct input_table_entry input_csi_table[] = {
{ 'r', "", INPUT_CSI_DECSTBM },
{ 's', "", INPUT_CSI_SCP },
{ 't', "", INPUT_CSI_WINOPS },
{ 'u', "", INPUT_CSI_RCP },
{ 'u', "", INPUT_CSI_RCP }
};

/* Input transition. */
Expand Down Expand Up @@ -1599,6 +1602,9 @@ input_csi_dispatch(struct input_ctx *ictx)
case INPUT_CSI_SM_PRIVATE:
input_csi_dispatch_sm_private(ictx);
break;
case INPUT_CSI_SM_GRAPHICS:
input_csi_dispatch_sm_graphics(ictx);
break;
case INPUT_CSI_SU:
n = input_get(ictx, 0, 1, 1);
if (n != -1)
Expand Down Expand Up @@ -1831,13 +1837,20 @@ input_csi_dispatch_sm_private(struct input_ctx *ictx)
}
}

/* Handle CSI graphics SM. */
static void
input_csi_dispatch_sm_graphics(__unused struct input_ctx *ictx)
{
}

/* Handle CSI window operations. */
static void
input_csi_dispatch_winops(struct input_ctx *ictx)
{
struct screen_write_ctx *sctx = &ictx->ctx;
struct screen *s = sctx->s;
struct window_pane *wp = ictx->wp;
struct window *w = wp->window;
u_int x = screen_size_x(s), y = screen_size_y(s);
int n, m;

Expand All @@ -1851,8 +1864,6 @@ input_csi_dispatch_winops(struct input_ctx *ictx)
case 7:
case 11:
case 13:
case 14:
case 19:
case 20:
case 21:
case 24:
Expand All @@ -1870,6 +1881,21 @@ input_csi_dispatch_winops(struct input_ctx *ictx)
if (input_get(ictx, m, 0, -1) == -1)
return;
break;
case 14:
input_reply(ictx, "\033[4;%u;%ut", y * w->ypixel, x * w->xpixel);
break;
case 15:
input_reply(ictx, "\033[5;%u;%ut", y * w->ypixel, x * w->xpixel);
break;
case 16:
input_reply(ictx, "\033[6;%u;%ut", w->ypixel, w->xpixel);
break;
case 18:
input_reply(ictx, "\033[8;%u;%ut", y, x);
break;
case 19:
input_reply(ictx, "\033[9;%u;%ut", y, x);
break;
case 22:
m++;
switch (input_get(ictx, m, 0, -1)) {
Expand Down Expand Up @@ -1897,9 +1923,6 @@ input_csi_dispatch_winops(struct input_ctx *ictx)
break;
}
break;
case 18:
input_reply(ictx, "\033[8;%u;%ut", y, x);
break;
default:
log_debug("%s: unknown '%c'", __func__, ictx->ch);
break;
Expand Down
1 change: 1 addition & 0 deletions tmux.1
Original file line number Diff line number Diff line change
Expand Up @@ -1549,6 +1549,7 @@ show debugging information about jobs and terminals.
.Tg source
.It Xo Ic source-file
.Op Fl Fnqv
.Op Fl t Ar target-pane
.Ar path ...
.Xc
.D1 Pq alias: Ic source
Expand Down
10 changes: 6 additions & 4 deletions tmux.h
Original file line number Diff line number Diff line change
Expand Up @@ -2136,10 +2136,11 @@ extern char **cfg_files;
extern u_int cfg_nfiles;
extern int cfg_quiet;
void start_cfg(void);
int load_cfg(const char *, struct client *, struct cmdq_item *, int,
struct cmdq_item **);
int load_cfg(const char *, struct client *, struct cmdq_item *,
struct cmd_find_state *, int, struct cmdq_item **);
int load_cfg_from_buffer(const void *, size_t, const char *,
struct client *, struct cmdq_item *, int, struct cmdq_item **);
struct client *, struct cmdq_item *, struct cmd_find_state *,
int, struct cmdq_item **);
void printflike(1, 2) cfg_add_cause(const char *, ...);
void cfg_print_causes(struct cmdq_item *);
void cfg_show_causes(struct session *);
Expand Down Expand Up @@ -2595,7 +2596,8 @@ struct cmd_parse_result *cmd_parse_from_arguments(struct args_value *, u_int,
struct cmdq_state *cmdq_new_state(struct cmd_find_state *, struct key_event *,
int);
struct cmdq_state *cmdq_link_state(struct cmdq_state *);
struct cmdq_state *cmdq_copy_state(struct cmdq_state *);
struct cmdq_state *cmdq_copy_state(struct cmdq_state *,
struct cmd_find_state *);
void cmdq_free_state(struct cmdq_state *);
void printflike(3, 4) cmdq_add_format(struct cmdq_state *, const char *,
const char *, ...);
Expand Down

0 comments on commit 9f9156c

Please sign in to comment.