Merge branch 'configurable-padding'

This commit is contained in:
Daniel Eklöf 2020-02-15 19:02:21 +01:00
commit 26a8d4b8a1
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
5 changed files with 42 additions and 3 deletions

View file

@ -172,6 +172,19 @@ parse_section_main(const char *key, const char *value, struct config *conf,
conf->height = height;
}
else if (strcmp(key, "pad") == 0) {
unsigned x, y;
if (sscanf(value, "%ux%u", &x, &y) != 2) {
LOG_ERR(
"%s: %d: expected PAD_XxPAD_Y, where both are positive integers: %s",
path, lineno, value);
return false;
}
conf->pad_x = x;
conf->pad_y = y;
}
else if (strcmp(key, "font") == 0) {
char *copy = strdup(value);
for (const char *font = strtok(copy, ","); font != NULL; font = strtok(NULL, ",")) {
@ -472,6 +485,8 @@ config_load(struct config *conf, const char *conf_path)
.shell = get_shell(),
.width = -1,
.height = -1,
.pad_x = 2,
.pad_y = 2,
.fonts = tll_init(),
.scrollback_lines = 1000,

View file

@ -12,6 +12,8 @@ struct config {
char *shell;
unsigned width;
unsigned height;
unsigned pad_x;
unsigned pad_y;
tll(char *) fonts;

View file

@ -33,7 +33,12 @@ in this order:
Default: _monospace_.
*geometry*
Initial window width and height, on the form _WIDTHxHEIGHT_.
Initial window width and height in pixels, on the form
_WIDTHxHEIGHT_.
*pad*
Padding between border and glyphs, in pixels, on the form
_X-PADxY-PAD_.
*shell*
Executable to launch. Typically a shell. Default: the user's

3
footrc
View file

@ -1,6 +1,9 @@
# -*- conf -*-
# font=monospace
# scrollback=1000
# geometry=500x300
# pad=2x2
# shell=<user's default shell (from /etc/passwd)> (you may need to override if you need a login shell)
# term=foot
# workers=<number of logical CPUs>

View file

@ -1122,16 +1122,30 @@ maybe_resize(struct terminal *term, int width, int height, bool force)
const int scrollback_lines = term->render.scrollback_lines;
/* Screen rows/cols before resize */
const int old_cols = term->cols;
const int old_rows = term->rows;
/* Grid rows/cols before resize */
const int old_normal_grid_rows = term->normal.num_rows;
const int old_alt_grid_rows = term->alt.num_rows;
const int new_cols = term->width / term->cell_width;
const int new_rows = term->height / term->cell_height;
/* Padding */
const int pad_x = term->width > 2 * scale * term->conf->pad_x ? scale * term->conf->pad_x : 0;
const int pad_y = term->height > 2 * scale * term->conf->pad_y ? scale * term->conf->pad_y : 0;
/* Screen rows/cols after resize */
const int new_cols = max((term->width - 2 * pad_x) / term->cell_width, 1);
const int new_rows = max((term->height - 2 * pad_y) / term->cell_height, 1);
/* Grid rows/cols after resize */
const int new_normal_grid_rows = 1 << (32 - __builtin_clz(new_rows + scrollback_lines - 1));
const int new_alt_grid_rows = 1 << (32 - __builtin_clz(new_rows));
assert(new_cols >= 1);
assert(new_rows >= 1);
/* Margins */
term->x_margin = (term->width - new_cols * term->cell_width) / 2;
term->y_margin = (term->height - new_rows * term->cell_height) / 2;