commit - 2051e6535ed850f2676a2ef1353b58943369eee8
commit + 9a25f829e319067e29c27e63e54be2ed86d8491d
blob - 1dc9501e5f5d65f38cb6543a81ff7be791058e24
blob + 1e2b21f9f2433b16dae018ed58cdcfe771ecfd74
--- telescope.h
+++ telescope.h
TAILQ_ENTRY(line) lines;
};
+struct vline {
+ const struct line *parent;
+ char *line;
+ int flags;
+ TAILQ_ENTRY(vline) vlines;
+};
+
struct parser;
struct page;
blob - 6ebc6bca2a03a899c1eec92c38cb34250c8e8cf7
blob + 61bb4b2e8b25cd4f5da39cbaa94eb2e26a22c764
--- ui.c
+++ ui.c
static void lu_self_insert(void);
static void lu_select(void);
-static struct line *nth_line(struct tab*, size_t);
+static struct vline *nth_line(struct tab*, size_t);
static struct tab *current_tab(void);
static void dispatch_stdio(int, short, void*);
static void handle_clear_minibuf(int, short, void*);
static void wrap_text(struct tab*, const char*, struct line*);
static int hardwrap_text(struct tab*, struct line*);
static int wrap_page(struct tab*);
-static void print_line(struct line*);
+static void print_vline(struct vline*);
static void redraw_tabline(void);
static void redraw_body(struct tab*);
static void redraw_modeline(struct tab*);
short loading_anim_step;
struct event loadingev;
- TAILQ_HEAD(, line) head;
+ TAILQ_HEAD(, vline) head;
};
static char keybuf[64];
static int
push_line(struct tab *tab, const struct line *l, const char *buf, size_t len, int cont)
{
- struct line *vl;
+ struct vline *vl;
tab->s->line_max++;
return 0;
}
- vl->type = l->type;
+ vl->parent = l;
if (len != 0)
memcpy(vl->line, buf, len);
- vl->alt = l->alt;
vl->flags = cont;
if (TAILQ_EMPTY(&tab->s->head))
- TAILQ_INSERT_HEAD(&tab->s->head, vl, lines);
+ TAILQ_INSERT_HEAD(&tab->s->head, vl, vlines);
else
- TAILQ_INSERT_TAIL(&tab->s->head, vl, lines);
+ TAILQ_INSERT_TAIL(&tab->s->head, vl, vlines);
return 1;
}
static void
empty_vlist(struct tab *tab)
{
- struct line *l, *t;
+ struct vline *vl, *t;
tab->s->line_max = 0;
- TAILQ_FOREACH_SAFE(l, &tab->s->head, lines, t) {
- TAILQ_REMOVE(&tab->s->head, l, lines);
- free(l->line);
- /* l->alt references the original line! */
- free(l);
+ TAILQ_FOREACH_SAFE(vl, &tab->s->head, vlines, t) {
+ TAILQ_REMOVE(&tab->s->head, vl, vlines);
+ free(vl->line);
+ free(vl);
}
}
static void
cmd_move_end_of_line(struct tab *tab)
{
- struct line *line;
+ struct vline *vl;
size_t off;
const char *prfx;
goto end;
}
- line = nth_line(tab, off);
- if (line->line != NULL)
- tab->s->curs_x = strlen(line->line);
+ vl = nth_line(tab, off);
+ if (vl->line != NULL)
+ tab->s->curs_x = strlen(vl->line);
else
tab->s->curs_x = 0;
- prfx = line_prefixes[line->type].prfx1;
+ prfx = line_prefixes[vl->parent->type].prfx1;
tab->s->curs_x += strlen(prfx);
end:
static void
cmd_scroll_line_up(struct tab *tab)
{
- struct line *l;
+ struct vline *vl;
if (tab->s->line_off == 0)
return;
- l = nth_line(tab, --tab->s->line_off);
+ vl = nth_line(tab, --tab->s->line_off);
wscrl(body, -1);
wmove(body, 0, 0);
- print_line(l);
+ print_vline(vl);
}
static void
cmd_scroll_line_down(struct tab *tab)
{
- struct line *l;
+ struct vline *vl;
size_t n;
if (tab->s->line_max == 0 || tab->s->line_off == tab->s->line_max-1)
if (tab->s->line_max - tab->s->line_off < body_lines)
return;
- l = nth_line(tab, tab->s->line_off + body_lines-1);
+ vl = nth_line(tab, tab->s->line_off + body_lines-1);
wmove(body, body_lines-1, 0);
- print_line(l);
+ print_vline(vl);
}
static void
static void
cmd_push_button(struct tab *tab)
{
- struct line *l;
+ struct vline *vl;
size_t nth;
nth = tab->s->line_off + tab->s->curs_y;
if (nth >= tab->s->line_max)
return;
- l = nth_line(tab, nth);
- if (l->type != LINE_LINK)
+ vl = nth_line(tab, nth);
+ if (vl->parent->type != LINE_LINK)
return;
- load_url_in_tab(tab, l->alt);
+ load_url_in_tab(tab, vl->parent->alt);
}
static void
cmd_push_button_new_tab(struct tab *tab)
{
struct tab *t;
- struct line *l;
+ struct vline *vl;
size_t nth;
nth = tab->s->line_off + tab->s->curs_y;
if (nth > tab->s->line_max)
return;
- l = nth_line(tab, nth);
- if (l->type != LINE_LINK)
+ vl = nth_line(tab, nth);
+ if (vl->parent->type != LINE_LINK)
return;
t = new_tab();
memcpy(&t->url, &tab->url, sizeof(tab->url));
- load_url_in_tab(t, l->alt);
+ load_url_in_tab(t, vl->parent->alt);
}
static void
load_url_in_tab(current_tab(), ministate.buf);
}
-static struct line *
+static struct vline *
nth_line(struct tab *tab, size_t n)
{
- struct line *l;
+ struct vline *vl;
size_t i;
i = 0;
- TAILQ_FOREACH(l, &tab->s->head, lines) {
+ TAILQ_FOREACH(vl, &tab->s->head, vlines) {
if (i == n)
- return l;
+ return vl;
i++;
}
}
static inline void
-print_line(struct line *l)
+print_vline(struct vline *vl)
{
- const char *text = l->line;
+ const char *text = vl->line;
const char *prfx;
- int face = line_faces[l->type].prop;
+ int face = line_faces[vl->parent->type].prop;
- if (!l->flags)
- prfx = line_prefixes[l->type].prfx1;
+ if (!vl->flags)
+ prfx = line_prefixes[vl->parent->type].prfx1;
else
- prfx = line_prefixes[l->type].prfx2;
+ prfx = line_prefixes[vl->parent->type].prfx2;
if (text == NULL)
text = "";
static void
redraw_body(struct tab *tab)
{
- struct line *l;
+ struct vline *vl;
int line;
werase(body);
return;
line = 0;
- l = nth_line(tab, tab->s->line_off);
- for (; l != NULL; l = TAILQ_NEXT(l, lines)) {
+ vl = nth_line(tab, tab->s->line_off);
+ for (; vl != NULL; vl = TAILQ_NEXT(vl, vlines)) {
wmove(body, line, 0);
- print_line(l);
+ print_vline(vl);
line++;
if (line == body_lines)
break;