mirror of
https://github.com/tmux/tmux.git
synced 2025-01-12 03:08:46 +00:00
Merge branch 'obsd-master'
This commit is contained in:
commit
eb57cbcc29
@ -125,7 +125,7 @@ cmd_list_keys_exec(struct cmd *self, struct cmdq_item *item)
|
||||
|
||||
cp = utf8_padcstr(table->name, tablewidth);
|
||||
cplen = strlen(cp) + 1;
|
||||
while (tmpused + cplen + 1>= tmpsize) {
|
||||
while (tmpused + cplen + 1 >= tmpsize) {
|
||||
tmpsize *= 2;
|
||||
tmp = xrealloc(tmp, tmpsize);
|
||||
}
|
||||
|
@ -696,6 +696,7 @@ cmd_parse_build_commands(struct cmd_parse_commands *cmds,
|
||||
pr.status = CMD_PARSE_ERROR;
|
||||
pr.error = cmd_parse_get_error(pi->file, line, cause);
|
||||
free(cause);
|
||||
cmd_list_free(cmdlist);
|
||||
goto out;
|
||||
}
|
||||
cmd_list_append(cmdlist, add);
|
||||
|
2
format.c
2
format.c
@ -574,7 +574,7 @@ format_cb_current_command(struct format_tree *ft, struct format_entry *fe)
|
||||
struct window_pane *wp = ft->wp;
|
||||
char *cmd;
|
||||
|
||||
if (wp == NULL)
|
||||
if (wp == NULL || wp->shell == NULL)
|
||||
return;
|
||||
|
||||
cmd = osdep_get_name(wp->fd, wp->tty);
|
||||
|
10
input.c
10
input.c
@ -2279,6 +2279,9 @@ input_enter_rename(struct input_ctx *ictx)
|
||||
static void
|
||||
input_exit_rename(struct input_ctx *ictx)
|
||||
{
|
||||
struct window_pane *wp = ictx->wp;
|
||||
struct options_entry *oe;
|
||||
|
||||
if (ictx->flags & INPUT_DISCARD)
|
||||
return;
|
||||
if (!options_get_number(ictx->wp->options, "allow-rename"))
|
||||
@ -2287,6 +2290,13 @@ input_exit_rename(struct input_ctx *ictx)
|
||||
|
||||
if (!utf8_isvalid(ictx->input_buf))
|
||||
return;
|
||||
|
||||
if (ictx->input_len == 0) {
|
||||
oe = options_get(wp->window->options, "automatic-rename");
|
||||
if (oe != NULL)
|
||||
options_remove(oe);
|
||||
return;
|
||||
}
|
||||
window_set_name(ictx->wp->window, ictx->input_buf);
|
||||
options_set_number(ictx->wp->window->options, "automatic-rename", 0);
|
||||
server_status_window(ictx->wp->window);
|
||||
|
@ -116,13 +116,49 @@ layout_append(struct layout_cell *lc, char *buf, size_t len)
|
||||
return (0);
|
||||
}
|
||||
|
||||
/* Check layout sizes fit. */
|
||||
static int
|
||||
layout_check(struct layout_cell *lc)
|
||||
{
|
||||
struct layout_cell *lcchild;
|
||||
u_int n = 0;
|
||||
|
||||
switch (lc->type) {
|
||||
case LAYOUT_WINDOWPANE:
|
||||
break;
|
||||
case LAYOUT_LEFTRIGHT:
|
||||
TAILQ_FOREACH(lcchild, &lc->cells, entry) {
|
||||
if (lcchild->sy != lc->sy)
|
||||
return (0);
|
||||
if (!layout_check(lcchild))
|
||||
return (0);
|
||||
n += lcchild->sx + 1;
|
||||
}
|
||||
if (n - 1 != lc->sx)
|
||||
return (0);
|
||||
break;
|
||||
case LAYOUT_TOPBOTTOM:
|
||||
TAILQ_FOREACH(lcchild, &lc->cells, entry) {
|
||||
if (lcchild->sx != lc->sx)
|
||||
return (0);
|
||||
if (!layout_check(lcchild))
|
||||
return (0);
|
||||
n += lcchild->sy + 1;
|
||||
}
|
||||
if (n - 1 != lc->sy)
|
||||
return (0);
|
||||
break;
|
||||
}
|
||||
return (1);
|
||||
}
|
||||
|
||||
/* Parse a layout string and arrange window as layout. */
|
||||
int
|
||||
layout_parse(struct window *w, const char *layout)
|
||||
{
|
||||
struct layout_cell *lc, *lcchild;
|
||||
struct window_pane *wp;
|
||||
u_int npanes, ncells;
|
||||
u_int npanes, ncells, sx = 0, sy = 0;
|
||||
u_short csum;
|
||||
|
||||
/* Check validity. */
|
||||
@ -153,6 +189,37 @@ layout_parse(struct window *w, const char *layout)
|
||||
layout_destroy_cell(w, lcchild, &lc);
|
||||
}
|
||||
|
||||
/*
|
||||
* It appears older versions of tmux were able to generate layouts with
|
||||
* an incorrect top cell size - if it is larger than the top child then
|
||||
* correct that (if this is still wrong the check code will catch it).
|
||||
*/
|
||||
switch (lc->type) {
|
||||
case LAYOUT_WINDOWPANE:
|
||||
break;
|
||||
case LAYOUT_LEFTRIGHT:
|
||||
TAILQ_FOREACH(lcchild, &lc->cells, entry) {
|
||||
sy = lcchild->sy + 1;
|
||||
sx += lcchild->sx + 1;
|
||||
}
|
||||
break;
|
||||
case LAYOUT_TOPBOTTOM:
|
||||
TAILQ_FOREACH(lcchild, &lc->cells, entry) {
|
||||
sx = lcchild->sx + 1;
|
||||
sy += lcchild->sy + 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (lc->sx != sx || lc->sy != sy) {
|
||||
log_debug("fix layout %u,%u to %u,%u", lc->sx, lc->sy, sx,sy);
|
||||
layout_print_cell(lc, __func__, 0);
|
||||
lc->sx = sx - 1; lc->sy = sy - 1;
|
||||
}
|
||||
|
||||
/* Check the new layout. */
|
||||
if (!layout_check(lc))
|
||||
return (-1);
|
||||
|
||||
/* Resize to the layout size. */
|
||||
window_resize(w, lc->sx, lc->sy);
|
||||
|
||||
|
@ -296,6 +296,7 @@ options_remove(struct options_entry *o)
|
||||
else
|
||||
options_value_free(o, &o->value);
|
||||
RB_REMOVE(options_tree, &oo->tree, o);
|
||||
free((void *)o->name);
|
||||
free(o);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user