commit - 770de0789dd17560929a4844ff26c0bc83bf51d3
commit + 74a2587f4c4a35c064c63e8434ec02b805caa63c
blob - b4ebfe7a8d6975644cdd3dae99905bcae3f81dff
blob + 4cc3d76a1df4f2ac16293f6ceee899224b20170e
--- defaults.c
+++ defaults.c
int olivetti_mode = 0;
int enable_colors = 1;
+static struct lineface_descr {
+ int prfx_used, used;
+ int prfx_pair, pair;
+ int prfx_bg, bg;
+ int prfx_fg, fg;
+} linefaces_descr[] = {
+ [LINE_TEXT] = { 0, 0, PAIR_TEXT_PRFX, PAIR_TEXT, 0, 0, 0, 0 },
+ [LINE_LINK] = { 0, 0, PAIR_LINK_PRFX, PAIR_LINK, 0, 0, 0, 0 },
+ [LINE_TITLE_1] = { 0, 0, PAIR_TITLE_1_PRFX, PAIR_TITLE_1, 0, 0, 0, 0 },
+ [LINE_TITLE_2] = { 0, 0, PAIR_TITLE_2_PRFX, PAIR_TITLE_1, 0, 0, 0, 0 },
+ [LINE_TITLE_3] = { 0, 0, PAIR_TITLE_3_PRFX, PAIR_TITLE_3, 0, 0, 0, 0 },
+ [LINE_ITEM] = { 0, 0, PAIR_ITEM_PRFX, PAIR_ITEM, 0, 0, 0, 0 },
+ [LINE_QUOTE] = { 0, 0, PAIR_QUOTE_PRFX, PAIR_QUOTE, 0, 0, 0, 0 },
+ [LINE_PRE_START] = { 0, 0, PAIR_PRE_START_PRFX, PAIR_TEXT, 0, 0, 0, 0 },
+ [LINE_PRE_CONTENT] = { 0, 0, PAIR_PRE_PRFX, PAIR_PRE, 0, 0, 0, 0 },
+ [LINE_PRE_END] = { 0, 0, PAIR_PRE_END_PRFX, PAIR_PRE_END, 0, 0, 0, 0 },
+};
+
struct lineprefix line_prefixes[] = {
[LINE_TEXT] = { "", "" },
[LINE_LINK] = { "=> ", " " },
.background = A_NORMAL,
};
+struct mapping {
+ const char *label;
+ int linetype;
+ int facetype;
+ int facetype_prfx;
+} mappings[] = {
+ {"text", LINE_TEXT, PAIR_TEXT, PAIR_TEXT_PRFX},
+ {"link", LINE_LINK, PAIR_LINK, PAIR_LINK_PRFX},
+ {"title1", LINE_TITLE_1, PAIR_TITLE_1, PAIR_TITLE_1_PRFX},
+ {"title2", LINE_TITLE_2, PAIR_TITLE_2, PAIR_TITLE_2_PRFX},
+ {"title3", LINE_TITLE_3, PAIR_TITLE_3, PAIR_TITLE_3_PRFX},
+ {"item", LINE_ITEM, PAIR_ITEM, PAIR_ITEM_PRFX},
+ {"quote", LINE_QUOTE, PAIR_QUOTE, PAIR_QUOTE_PRFX},
+ {"pre.start", LINE_PRE_START, PAIR_PRE_START, PAIR_PRE_START_PRFX},
+ {"pre", LINE_PRE_CONTENT, PAIR_PRE, PAIR_PRE_PRFX},
+ {"pre.end", LINE_PRE_END, PAIR_PRE_END, PAIR_PRE_END_PRFX},
+};
+
+static struct mapping *
+mapping_by_name(const char *name)
+{
+ size_t i;
+
+ for (i = 0; i < sizeof(mappings)/sizeof(mappings[0]); ++i) {
+ if (!strcmp(name, mappings[i].label))
+ return &mappings[i];
+ }
+
+ return NULL;
+}
+
int
config_setprfx(const char *name, int cont, const char *str)
{
- size_t i;
struct lineprefix *p;
- struct mapping {
- const char *label;
- int id;
- } mappings[] = {
- {"text", LINE_TEXT},
- {"link", LINE_LINK},
- {"title1", LINE_TITLE_1},
- {"title2", LINE_TITLE_2},
- {"title3", LINE_TITLE_3},
- {"item", LINE_ITEM},
- {"quote", LINE_QUOTE},
- {"pre.start", LINE_PRE_START},
- {"pre", LINE_PRE_CONTENT},
- {"pre.end", LINE_PRE_END},
- };
+ struct mapping *m;
if (!has_prefix(name, "line."))
return 0;
name += 5;
- for (i = 0; i < sizeof(mappings)/sizeof(mappings[0]); ++i) {
- if (!strcmp(name, mappings[i].label)) {
- name += strlen(mappings[i].label);
- p = &line_prefixes[mappings[i].id];
+ if ((m = mapping_by_name(name)) == NULL)
+ return 0;
- if (cont)
- p->prfx2 = str;
- else
- p->prfx1 = str;
+ p = &line_prefixes[m->linetype];
- return 1;
- }
- }
+ if (cont)
+ p->prfx2 = str;
+ else
+ p->prfx1 = str;
- return 0;
+ return 1;
}
int
return 0;
return 1;
}
+
+int
+config_setcolor(const char *name, int prfx, int bg, int color)
+{
+ struct mapping *m;
+ struct lineface_descr *d;
+
+ if (!has_prefix(name, "line."))
+ return 0;
+ name += 5;
+
+ if ((m = mapping_by_name(name)) == NULL)
+ return 0;
+
+ d = &linefaces_descr[m->linetype];
+
+ if (prfx) {
+ d->prfx_used = 1;
+ if (bg)
+ d->prfx_bg = color;
+ else
+ d->prfx_fg = color;
+ } else {
+ d->used = 1;
+ if (bg)
+ d->bg = color;
+ else
+ d->fg = color;
+ }
+
+ return 1;
+}
+
+void
+config_apply_colors(void)
+{
+ size_t i, len;
+ struct lineface_descr *d;
+ struct line_face *f;
+
+ len = sizeof(linefaces_descr)/sizeof(linefaces_descr[0]);
+ for (i = 0; i < len; ++i) {
+ d = &linefaces_descr[i];
+ f = &line_faces[i];
+
+ if (d->prfx_used) {
+ init_pair(d->prfx_pair, d->prfx_fg, d->prfx_bg);
+ f->prefix_prop = COLOR_PAIR(d->prfx_pair);
+ }
+
+ if (d->used) {
+ init_pair(d->pair, d->fg, d->bg);
+ f->text_prop = COLOR_PAIR(d->pair);
+ }
+ }
+}
blob - e4ffbe003932bced6230759deadea7ce6a293965
blob + fdf77d8b09ba20ee67de5e5c8f2fc2325a7ab835
--- parse.y
+++ parse.y
#include "telescope.h"
+#include <assert.h>
#include <ctype.h>
#include <limits.h>
+#include <ncurses.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#define YYSTYPE yystype
static char *current_style;
+static int current_bg, current_fg;
+
static const char *path;
FILE *yyfp;
static void setprfx(int, const char *);
static void setvari(char *, int);
static void setvars(char *, char *);
+static int colorname(const char *);
+static void setcolor(int, int, const char *);
%}
;
rule : set
- | style { free(current_style); current_style = NULL; }
+ | style {
+ free(current_style);
+ current_style = NULL;
+ }
| bind
| unbind
;
| TSET TSTRING '=' TNUMBER { setvari($2, $4); }
;
-style : TSTYLE TSTRING { current_style = $2; } styleopt
- | TSTYLE TSTRING { current_style = $2; } '{' styleopts '}'
- ;
+style : TSTYLE TSTRING { current_style = $2; } stylespec ;
+stylespec : styleopt | '{' styleopts '}' ;
styleopts : /* empty */
| styleopts '\n'
| styleopts styleopt '\n'
;
-styleopt : TPRFX TSTRING { setprfx(0, $2); }
- | TCONT TSTRING { setprfx(1, $2); }
- | TBG TSTRING { printf("style background setted to \"%s\"\n", $2); }
- | TFG TSTRING { printf("style foreground setted to \"%s\"\n", $2); }
+styleopt : TPRFX TSTRING { setprfx(0, $2); }
+ | TCONT TSTRING { setprfx(1, $2); }
+ | TBG TSTRING {
+ setcolor(0, 1, $2);
+ setcolor(1, 1, $2);
+ free($2);
+ }
+ | TFG TSTRING {
+ setcolor(0, 0, $2);
+ setcolor(1, 0, $2);
+ free($2);
+ }
| TATTR TBOLD { printf("style attr setted to bold\n"); }
| TATTR TUNDERLINE { printf("style attr setted to underline\n"); }
;
{ "style", TSTYLE },
{ "prefix", TPRFX },
{ "cont", TCONT },
- { "background", TBG },
- { "foreground", TFG },
+ { "bg", TBG },
+ { "fg", TFG },
{ "attr", TATTR },
{ "bold", TBOLD },
{ "underline", TUNDERLINE },
static void
setprfx(int cont, const char *name)
{
- if (current_style == NULL) {
- warnx("current_style = NULL!");
- abort();
- }
+ assert(current_style != NULL);
if (!config_setprfx(current_style, cont, name))
yyerror("invalid style %s", name);
var, val);
free(var);
+}
+
+static int
+colorname(const char *name)
+{
+ struct {
+ const char *name;
+ short val;
+ } *i, colors[] = {
+ { "default", 0 },
+ { "black", COLOR_BLACK },
+ { "red", COLOR_RED },
+ { "green", COLOR_GREEN },
+ { "yellow", COLOR_YELLOW },
+ { "blue", COLOR_BLUE },
+ { "magenta", COLOR_MAGENTA },
+ { "cyan", COLOR_CYAN },
+ { "white", COLOR_WHITE },
+ { NULL, 0 },
+ };
+
+ for (i = colors; i->name != NULL; ++i) {
+ if (!strcmp(i->name, name))
+ return i->val;
+ }
+
+ yyerror("unknown color name \"%s\"", name);
+ return -1;
}
void
+setcolor(int prfx, int bg, const char *color)
+{
+ int c;
+
+ assert(current_style != NULL);
+
+ if ((c = colorname(color)) == -1)
+ return;
+
+ if (!config_setcolor(current_style, prfx, bg, c))
+ yyerror("can't set color \"%s\" for %s", color,
+ current_style);
+}
+
+void
parseconfig(const char *filename, int fonf)
{
+ /*
+ char c;
+ printf("proceed?\n");
+ read(0, &c, 1);
+ */
+
if ((yyfp = fopen(filename, "r")) == NULL) {
if (fonf)
err(1, "%s", filename);
blob - 68e9606c8f93065480a4908e4b14d30d00257f34
blob + 90f4104950dd1220eefcc8e57d8720f7ee1c9212
--- telescope.h
+++ telescope.h
int config_setprfx(const char *, int, const char *);
int config_setvari(const char *, int);
int config_setvars(const char *, char *);
+int config_setcolor(const char *, int, int, int);
+void config_apply_colors(void);
/* fs.c */
int fs_init(void);
extern int body_cols;
extern int in_minibuffer;
+enum {
+ PAIR_TEXT = 1,
+ PAIR_TEXT_PRFX,
+ PAIR_LINK,
+ PAIR_LINK_PRFX,
+ PAIR_TITLE_1,
+ PAIR_TITLE_1_PRFX,
+ PAIR_TITLE_2,
+ PAIR_TITLE_2_PRFX,
+ PAIR_TITLE_3,
+ PAIR_TITLE_3_PRFX,
+ PAIR_ITEM,
+ PAIR_ITEM_PRFX,
+ PAIR_QUOTE,
+ PAIR_QUOTE_PRFX,
+ PAIR_PRE_START,
+ PAIR_PRE_START_PRFX,
+ PAIR_PRE,
+ PAIR_PRE_PRFX,
+ PAIR_PRE_END,
+ PAIR_PRE_END_PRFX,
+};
+
struct thiskey {
short meta;
int key;
blob - d0a37bd5a5cfc08f94752fec9eee724684788010
blob + cb176f8ca7286abb387c26d88054040ccb26bcba
--- ui.c
+++ ui.c
const char *url = NEW_TAB_URL;
int ch, configtest = 0, fonf = 0;
+ if (getenv("NO_COLOR") != NULL)
+ enable_colors = 0;
+
strlcpy(path, getenv("HOME"), sizeof(path));
strlcat(path, "/.telescope/config", sizeof(path));
current_map = &global_map;
load_default_keys();
+ /* { */
+ /* char c; */
+ /* printf("proceed?"); */
+ /* read(0, &c, 1); */
+ /* } */
+
initscr();
+
+ if (enable_colors) {
+ if (has_colors()) {
+ start_color();
+ config_apply_colors();
+ } else {
+ printf("has_color failed\n");
+ enable_colors = 0;
+ }
+ } else
+ printf("color disabled\n");
+
raw();
noecho();
-
nonl();
intrflush(stdscr, FALSE);