commit f350bc73eb44b726d2cfdfe499c168fb83c91bc4 from: Thomas Adam date: Mon May 27 11:14:52 2024 UTC cmd: introduce toggle-styling This adds a new command `toggle-styling` which toggles the formatting between the defaults (or anything specified in a configuration file), and the "raw" prefixes as defined in the gemini file. commit - 1666374cfe63987ed24167a032d2d99a05da317b commit + f350bc73eb44b726d2cfdfe499c168fb83c91bc4 blob - 99b46defa92628536ea7bd98665fe2b7cbd877e0 blob + 06b75e8bd05fd57d642da37367663c2817bf4c2e --- cmd.c +++ cmd.c @@ -911,6 +911,20 @@ cmd_toggle_pre_wrap(struct buffer *buffer) message("Wrap preformatted blocks"); ui_schedule_redraw(); +} + +void +cmd_toggle_styling(struct buffer *buffer) +{ + dont_apply_styling = !dont_apply_styling; + + config_apply_style(); + + /* Force a reload here, rather than calling ui_schedule_redraw() so + * that any lines which are set as L_HIDDEN are redrawn appropriately. + */ + load_url_in_tab(current_tab, hist_cur(current_tab->hist), NULL, + LU_MODE_NOHIST); } void blob - d87f17e9ab329739684235c9be32f2c8f12db25b blob + bb81e7198c325db75faf09ebfbca2e3a5f86d316 --- cmd.h +++ cmd.h @@ -90,6 +90,7 @@ CMD(cmd_toc, "Jump to a heading using the minibuffer CMD(cmd_toggle_downloads, "Toggle the downloads side window."); CMD(cmd_toggle_help, "Toggle side window with help."); CMD(cmd_toggle_pre_wrap, "Toggle the wrapping of preformatted blocks."); +CMD(cmd_toggle_styling, "Toggle the page styling."); CMD(cmd_unload_certificate, "Forget the certificate on this page."); CMD(cmd_up, "Go up one level."); CMD(cmd_use_certificate, "Use a certificate for the current page."); blob - d7cdaf8f9c6194b852216e440cdf6d93d99d7fcc blob + a38bc8415b1dc64af1c6a14e701604bae142a54e --- defaults.c +++ defaults.c @@ -36,6 +36,7 @@ char *default_search_engine = NULL; int autosave = 20; int dont_wrap_pre = 0; +int dont_apply_styling = 0; int emojify_link = 1; int enable_colors = 1; int fill_column = 120; @@ -67,6 +68,36 @@ struct lineprefix line_prefixes[] = { [LINE_PRE_START] = { "─── ", " " }, [LINE_PRE_CONTENT] = { "", "" }, [LINE_PRE_END] = { "─── ", "" }, + + [LINE_PATCH] = {"", ""}, + [LINE_PATCH_HDR] = {"", ""}, + [LINE_PATCH_HUNK_HDR] = {"", ""}, + [LINE_PATCH_ADD] = {"", ""}, + [LINE_PATCH_DEL] = {"", ""}, + + [LINE_COMPL] = {"", ""}, + [LINE_COMPL_CURRENT] = {"", ""}, + + [LINE_HELP] = {"", ""}, + + [LINE_DOWNLOAD] = {" Fetching ", " "}, + [LINE_DOWNLOAD_DONE] = {" Done ", " "}, + [LINE_DOWNLOAD_INFO] = {" ", " "}, + + [LINE_FRINGE] = {"~", ""}, +}; + +struct lineprefix raw_prefixes[] = { + [LINE_TEXT] = { "", "" }, + [LINE_LINK] = { "=> ", "" }, + [LINE_TITLE_1] = { "# ", "" }, + [LINE_TITLE_2] = { "## ", "" }, + [LINE_TITLE_3] = { "### ", "" }, + [LINE_ITEM] = { "* ", "" }, + [LINE_QUOTE] = { "> ", "" }, + [LINE_PRE_START] = { "``` ", "" }, + [LINE_PRE_CONTENT] = { "", "" }, + [LINE_PRE_END] = { "``` ", "" }, [LINE_PATCH] = {"", ""}, [LINE_PATCH_HDR] = {"", ""}, @@ -814,9 +845,13 @@ config_apply_style(void) { size_t i, colors, len; struct line_face *f; + int old_ec = enable_colors; colors = COLORS; + if (dont_apply_styling) + enable_colors = 0; + len = sizeof(line_faces)/sizeof(line_faces[0]); for (i = 0; i < len; ++i) { f = &line_faces[i]; @@ -831,6 +866,15 @@ config_apply_style(void) f->trail = COLOR_PAIR(f->trail_pair) | f->trail_attr; } + /* body */ + tl_init_pair(colors, PBODY, body_face.fg, body_face.bg); + body_face.body = COLOR_PAIR(PBODY); + + /* Restore color setting here -- it's only potentially disabled for + * the body. + */ + enable_colors = old_ec; + /* tab line */ tl_init_pair(colors, PTL_BG, tab_face.bg_fg, tab_face.bg_bg); tab_face.background = COLOR_PAIR(PTL_BG) | tab_face.bg_attr; @@ -841,10 +885,6 @@ config_apply_style(void) tl_init_pair(colors, PTL_CURR, tab_face.c_fg, tab_face.c_bg); tab_face.current = COLOR_PAIR(PTL_CURR) | tab_face.c_attr; - /* body */ - tl_init_pair(colors, PBODY, body_face.fg, body_face.bg); - body_face.body = COLOR_PAIR(PBODY); - tl_init_pair(colors, PBLEFT, body_face.lfg, body_face.lbg); body_face.left = COLOR_PAIR(PBLEFT); blob - 4b9955c4393483c90c51626f32ed09eb2d1a34ad blob + b860d8acb7d1d179cdbbb5ca9afaee909897795b --- defaults.h +++ defaults.h @@ -24,6 +24,7 @@ extern char *new_tab_url; extern int autosave; extern int dont_wrap_pre; +extern int dont_apply_styling; extern int emojify_link; extern int enable_colors; extern int fill_column; @@ -43,6 +44,8 @@ struct lineprefix { const char *prfx1; const char *prfx2; }; + +extern struct lineprefix raw_prefixes[]; extern struct lineprefix line_prefixes[]; struct line_face { blob - 8166566d9575d140ce1a8e2279a105a10b57d0dd blob + b0d9ca3a298cb4d901692cd4e411de3f15072874 --- parser_gemtext.c +++ parser_gemtext.c @@ -109,6 +109,9 @@ emit_line(struct parser *p, enum line_type type, char break; } + if (dont_apply_styling) + l->flags &= ~L_HIDDEN; + TAILQ_INSERT_TAIL(&p->head, l, lines); return 1; blob - 0ab6bdcd5603e3fd5e515711da30ba7edfbac905 blob + 1ce4ef4cf05b1bf82365486a0498dde7fe74240d --- telescope.1 +++ telescope.1 @@ -942,6 +942,9 @@ Toggle side window with help about available keys and interactive command. .It Ic toggle-pre-wrap Toggle the wrapping of preformatted blocks. +.It Ic toggle-styling +Toggle the styling of the page. +This remains in effect until toggled again. .It Ic up Go up one level in the path hierarchy. .It Ic write-buffer blob - d7c77490d1fef81b810f1a8aec2d0729c548baf8 blob + 48370bf48558b0666a827c6e7a7a0fda37ce158e --- ui.c +++ ui.c @@ -215,7 +215,11 @@ static void restore_curs_x(struct buffer *buffer) { struct vline *vl; + struct lineprefix *lp = line_prefixes; const char *prfx, *text; + + if (dont_apply_styling) + lp = raw_prefixes; vl = buffer->current_line; if (vl == NULL || vl->len == 0) @@ -239,7 +243,7 @@ restore_curs_x(struct buffer *buffer) buffer->curs_x += utf8_swidth_between(vl->parent->line, vl->parent->data); else { - prfx = line_prefixes[vl->parent->type].prfx1; + prfx = lp[vl->parent->type].prfx1; buffer->curs_x += utf8_swidth(prfx); } } @@ -461,9 +465,13 @@ static void line_prefix_and_text(struct vline *vl, char *buf, size_t len, const char **prfx_ret, const char **text_ret, int *text_len) { + struct lineprefix *lp = line_prefixes; int type, cont; size_t i, width; char *space, *t; + + if (dont_apply_styling) + lp = raw_prefixes; if (vl->len == 0) { *text_ret = ""; @@ -473,9 +481,9 @@ line_prefix_and_text(struct vline *vl, char *buf, size cont = vl->flags & L_CONTINUATION; type = vl->parent->type; if (!cont) - *prfx_ret = line_prefixes[type].prfx1; + *prfx_ret = lp[type].prfx1; else - *prfx_ret = line_prefixes[type].prfx2; + *prfx_ret = lp[type].prfx2; space = vl->parent->data; *text_ret = vl->parent->line + vl->from;