version 1.195, 2019/05/25 16:51:10 |
version 1.196, 2019/05/26 12:02:42 |
|
|
} |
} |
} |
} |
|
|
|
/* Add item bits to tree. */ |
|
static void |
|
format_create_add_item(struct format_tree *ft, struct cmdq_item *item) |
|
{ |
|
if (item->cmd != NULL) |
|
format_add(ft, "command", "%s", item->cmd->entry->name); |
|
if (item->shared != NULL && item->shared->formats != NULL) |
|
format_merge(ft, item->shared->formats); |
|
} |
|
|
/* Create a new tree. */ |
/* Create a new tree. */ |
struct format_tree * |
struct format_tree * |
format_create(struct client *c, struct cmdq_item *item, int tag, int flags) |
format_create(struct client *c, struct cmdq_item *item, int tag, int flags) |
|
|
format_add(ft, "window_menu", "%s", DEFAULT_WINDOW_MENU); |
format_add(ft, "window_menu", "%s", DEFAULT_WINDOW_MENU); |
format_add(ft, "pane_menu", "%s", DEFAULT_PANE_MENU); |
format_add(ft, "pane_menu", "%s", DEFAULT_PANE_MENU); |
|
|
if (item != NULL) { |
if (item != NULL) |
if (item->cmd != NULL) |
format_create_add_item(ft, item); |
format_add(ft, "command", "%s", item->cmd->entry->name); |
|
if (item->shared != NULL && item->shared->formats != NULL) |
|
format_merge(ft, item->shared->formats); |
|
} |
|
|
|
return (ft); |
return (ft); |
} |
} |
|
|
char **buf, size_t *len, size_t *off) |
char **buf, size_t *len, size_t *off) |
{ |
{ |
struct window_pane *wp = ft->wp; |
struct window_pane *wp = ft->wp; |
const char *errptr, *copy, *cp; |
const char *errptr, *copy, *cp, *marker; |
char *copy0, *condition, *found, *new; |
char *copy0, *condition, *found, *new; |
char *value, *left, *right; |
char *value, *left, *right; |
size_t valuelen; |
size_t valuelen; |
|
|
sub = fm; |
sub = fm; |
break; |
break; |
case '=': |
case '=': |
if (fm->argc != 1) |
if (fm->argc != 1 && fm->argc != 2) |
break; |
break; |
limit = strtonum(fm->argv[0], INT_MIN, INT_MAX, |
limit = strtonum(fm->argv[0], INT_MIN, INT_MAX, |
&errptr); |
&errptr); |
if (errptr != NULL) |
if (errptr != NULL) |
limit = 0; |
limit = 0; |
|
if (fm->argc == 2 && fm->argv[1] != NULL) |
|
marker = fm->argv[1]; |
|
else |
|
marker = NULL; |
break; |
break; |
case 'l': |
case 'l': |
modifiers |= FORMAT_LITERAL; |
modifiers |= FORMAT_LITERAL; |
|
|
/* Truncate the value if needed. */ |
/* Truncate the value if needed. */ |
if (limit > 0) { |
if (limit > 0) { |
new = format_trim_left(value, limit); |
new = format_trim_left(value, limit); |
format_log(ft, "applied length limit %d: %s", limit, new); |
if (marker != NULL && strcmp(new, value) != 0) { |
free(value); |
free(value); |
value = new; |
xasprintf(&value, "%s%s", new, marker); |
|
} else { |
|
free(value); |
|
value = new; |
|
} |
|
format_log(ft, "applied length limit %d: %s", limit, value); |
} else if (limit < 0) { |
} else if (limit < 0) { |
new = format_trim_right(value, -limit); |
new = format_trim_right(value, -limit); |
format_log(ft, "applied length limit %d: %s", limit, new); |
if (marker != NULL && strcmp(new, value) != 0) { |
free(value); |
free(value); |
value = new; |
xasprintf(&value, "%s%s", marker, new); |
|
} else { |
|
free(value); |
|
value = new; |
|
} |
|
format_log(ft, "applied length limit %d: %s", limit, value); |
} |
} |
|
|
/* Expand the buffer and copy in the value. */ |
/* Expand the buffer and copy in the value. */ |