- [X] notmuch addresses in From: list to have menu to add address to any
from-* query
-- [ ] Disable <hide> if cursor is in the hidden region.
+- [X] Disable <hide> if cursor is in the hidden region.
- [X] fill mode to handle all punctuation at start of this line
- [ ] Enable lib-menu to show short-cut keys
- [ ] Add menu-bar to lib-menu. Pop it up on F10 with simple commands
### lib-markup
-- [ ] Move <hide> handling to lib-renderline so we can disable <hide>
+- [X] Move <hide> handling to lib-renderline so we can disable <hide>
if cursor is in the hidden region.
### lib-macro
break;
}
chars++;
- if (ar.ast && strcmp(ar.ast->attr, "hide") == 0)
- continue;
if (ch == '\r' && noret) {
/* do nothing */
} else if (ch < ' ' && ch != '\t') {
/* strip one more ',' */
if (attr.len > 0)
attr.len -= 1;
- if (attr.len <= wrap_depth)
+ if (wrap && attr.len <= wrap_depth)
wrap = 0;
- if (attr.len <= hide_depth)
+ if (hide && attr.len <= hide_depth)
hide = 0;
break;
case ack:
int x, y;
int ret = 0;
bool seen_rtab = False;
+ unsigned int offset_hide = 0;
if (!rd->content)
return ret;
offset == rd->measure_offset) {
/* No change */
for (ri = rd->content ; ri ; ri = ri->next) {
+ if (ri->hidden)
+ continue;
if (ri->eol && rd->line[ri->start] == '\n')
ret |= 1;
if (ri->eol && rd->line[ri->start] == '\f')
/* 0 means right edge for right_margin, and left edge for all others */
right_margin = p->w - calc_pos(-rd->right_margin, p->w, rd->curs_width);
+ if (offset >= 0)
+ for (ri = rd->content ; ri ; ri = ri->next)
+ if (offset < ri->start + ri->len) {
+ offset_hide = ri->hide;
+ break;
+ }
+
for (ri = rd->content; ri; ri = ri->next) {
+ ri->hidden = (ri->hide && ri->hide != offset_hide);
+ if (ri->hidden) {
+ ri->width = 0;
+ continue;
+ }
if (ri->len == 0 ||
(unsigned char)rd->line[ri->start] >= ' ') {
cr = do_measure(p, ri, 0, -1, -1);
if (cr.i2 > rd->ascent)
rd->ascent = cr.i2;
ri->width = ri->eol ? 0 : cr.x;
- ri->hidden = False;
if (ri->start <= offset && offset <= ri->start + ri->len) {
cr = measure_str(p, "M", ri->attr);
int w, margin;
struct render_item *ri2;
ri->y = y;
+ if (ri->hidden) {
+ ri->x = x;
+ continue;
+ }
if (ri->tab != TAB_UNSET)
x = left_margin + calc_pos(ri->tab,
right_margin - left_margin,
wrap_margin = left_margin + rd->head_length;
for (ri = rd->content ; wrap && ri ; ri = ri->next) {
int splitpos;
+ if (ri->hidden)
+ continue;
if (ri->wrap && (wraprl == NULL || ri->wrap != wraprl->wrap))
wraprl = ri;
if (ri->wrap_margin)
for (r = rd->content; r ; r = r->next) {
int split;
+ if (r->hidden)
+ continue;
if (r->y <= y && r->x <= x) {
ri = r;
start = r->start;
struct render_item *r, *ri = NULL;
for (r = rd->content; r; r = r->next) {
+ if (r->hidden)
+ continue;
if (offset < r->start)
break;
ri = r;
while i < len:
doc.prev(st)
i += 1
- doc.call('doc:set-attr', 1, st, "render:hide", "10000")
+ doc.call('doc:set-attr', 1, st, "render:hide", "1")
sol = st.dup()
while sol < m:
if doc.following(sol) in [ '\n', '\v', '\f' ]:
doc.call('doc:set-attr', 1, sol, "markup:not_eol", "1")
doc.next(sol)
- doc.call('doc:set-attr', 1, m, "render:hide", "-1")
+ doc.call('doc:set-attr', 1, m, "render:hide", "0")
# We only parse entities between tags, not within them
parse_entities(doc, prev_end, st)
comm2("attr:callback", focus, 10000, mark, "word-wrap:0", 120)
return 1
if str == "render:hide":
- comm2("attr:callback", focus, 10000, mark, "hide", 100000)
+ comm2("attr:callback", focus, 100000 if str2 == "1" else -1,
+ mark, "hide", 100000)
if str == "render:bold":
comm2("attr:callback", focus, 100000 if str2 == "1" else -1,
mark, "bold", 120)