if (strcmp(attr, "heading") == 0)
return " Mtime Owner File Name";
if (strcmp(attr, "line-format") == 0)
- return " <fg:red>%c</> %mtime:11 %owner:-8 <fg:blue>%+name</>\n";
+ return " <fg:red>%c</> %mtime:11 %owner:-8 <fg:blue>%+name</>";
if (strcmp(attr, "filename") == 0)
return dr->fname;
return NULL;
int home;
int field = 0;
- ch = mark_next(d, m);
+ if (RPT_NUM(ci) < 0 &&
+ !mark_same(d, mark_of_point(*ci->pointp), m))
+ ci->numeric = NO_NUMERIC;
+ ch = doc_following(d, m);
if (ch == WEOF) {
ci->str = NULL;
return 1;
if (!body)
body = "%+name";
n = body;
+ m->rpos = field - rf->home_field;
while (*n) {
char buf[40], *b, *val;
int w, adjust, l;
+ if (RPT_NUM(ci) < 0 &&
+ mark_of_point(*ci->pointp)->rpos == m->rpos)
+ break;
+
if (*n != '%' || n[1] == '%') {
buf_append(&ret, *n);
if (*n == '%')
n += 1;
continue;
}
+ field += 1;
+ m->rpos = field - rf->home_field;
+
+ if (ci->numeric != NO_NUMERIC && ci->numeric >= 0 &&
+ ret.len >= ci->numeric)
+ break;
if (RPT_NUM(ci) < 0 &&
- mark_of_point(*ci->pointp)->rpos == field - rf->home_field)
+ mark_of_point(*ci->pointp)->rpos == m->rpos)
break;
- field += 1;
n += 1;
if (*n == '+') {
/* Home field */
buf_append(&ret, ch);
continue;
}
- val = doc_attr(d, m, 0, buf);
+ val = doc_attr(d, m, 1, buf);
if (!val)
val = "-";
if (*n != ':') {
if (!*n) {
rf->fields = field;
rf->home_field = home;
+ m->rpos = field + 1 - rf->home_field;
+ if (RPT_NUM(ci) < 0 &&
+ mark_of_point(*ci->pointp)->rpos == m->rpos)
+ ;
+ else if (ci->numeric >= 0 && ci->numeric != NO_NUMERIC)
+ ;
+ else {
+ buf_append(&ret, '\n');
+ mark_next(d, m);
+ }
}
ci->str = buf_final(&ret);
return 1;
{
struct point *pt = *ci->pointp;
int rpt = RPT_NUM(ci);
+ struct rf_data *rf = ci->home->data;
while (rpt > 1) {
if (mark_next(pt->doc, ci->mark) == WEOF)
break;
rpt -= 1;
}
- while (rpt < 0) {
+ while (rpt < -1) {
if (mark_prev(pt->doc, ci->mark) == WEOF)
break;
rpt += 1;
}
+ if (rpt < 0)
+ ci->mark->rpos = -rf->home_field;
+ if (rpt > 0)
+ ci->mark->rpos = rf->fields + 1 - rf->home_field;
+
return 1;
}
if (rf->fields < 2)
return 1;
while (rpt > 0 && doc_following(pt->doc, ci->mark) != WEOF) {
- if (ci->mark->rpos < rf->fields - rf->home_field)
+ if (ci->mark->rpos < rf->fields - rf->home_field + 1)
ci->mark->rpos += 1;
else {
if (mark_next(pt->doc, ci->mark) == WEOF)
rpt -= 1;
}
while (rpt < 0) {
- if (ci->mark->rpos > - rf->home_field)
+ if (ci->mark->rpos > -rf->home_field)
ci->mark->rpos -= 1;
else {
if (mark_prev(pt->doc, ci->mark) == WEOF)
break;
- ci->mark->rpos = rf->fields - rf->home_field;
+ ci->mark->rpos = rf->fields - rf->home_field + 1;
}
rpt += 1;
}