mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-07 04:06:07 -05:00
Merge branch 'configurable-padding'
This commit is contained in:
commit
26a8d4b8a1
5 changed files with 42 additions and 3 deletions
15
config.c
15
config.c
|
|
@ -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,
|
||||
|
||||
|
|
|
|||
2
config.h
2
config.h
|
|
@ -12,6 +12,8 @@ struct config {
|
|||
char *shell;
|
||||
unsigned width;
|
||||
unsigned height;
|
||||
unsigned pad_x;
|
||||
unsigned pad_y;
|
||||
|
||||
tll(char *) fonts;
|
||||
|
||||
|
|
|
|||
|
|
@ -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
3
footrc
|
|
@ -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>
|
||||
|
|
|
|||
18
render.c
18
render.c
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue