if (!*pos)
*pos = grub_zalloc ((linep->len + 1) * sizeof (**pos));
- if (i == region_start || linep == screen->lines + screen->line)
+ if (i == region_start || linep == screen->lines + screen->line
+ || (i > region_start && mode == ALL_LINES))
{
- int sp;
- grub_term_gotoxy (term_screen->term, GRUB_TERM_LEFT_BORDER_X
- + GRUB_TERM_MARGIN + 1, (y < 0 ? 0 : y)
- + GRUB_TERM_FIRST_ENTRY_Y);
- grub_print_ucs4_menu (linep->buf,
- linep->buf + linep->len,
- GRUB_TERM_LEFT_BORDER_X + GRUB_TERM_MARGIN
- + 1,
- GRUB_TERM_MARGIN
- + GRUB_TERM_SCROLL_WIDTH + 2,
- term_screen->term,
- (y < 0) ? -y : 0,
- term_screen->num_entries
- - ((y > 0) ? y : 0), '\\',
- *pos);
- sp = grub_term_entry_width (term_screen->term)
- - (*pos)[linep->len].x;
- if (sp > 0)
- grub_print_spaces (term_screen->term, sp);
- }
- else if (i > region_start && mode == ALL_LINES)
- {
- int sp;
grub_term_gotoxy (term_screen->term, GRUB_TERM_LEFT_BORDER_X
+ GRUB_TERM_MARGIN + 1, (y < 0 ? 0 : y)
+ GRUB_TERM_FIRST_ENTRY_Y);
+
grub_print_ucs4_menu (linep->buf,
linep->buf + linep->len,
GRUB_TERM_LEFT_BORDER_X
- + GRUB_TERM_MARGIN + 1,
+ + GRUB_TERM_MARGIN + 1,
GRUB_TERM_MARGIN
- + GRUB_TERM_SCROLL_WIDTH + 2,
+ + GRUB_TERM_SCROLL_WIDTH,
term_screen->term,
(y < 0) ? -y : 0,
term_screen->num_entries
- ((y > 0) ? y : 0), '\\',
*pos);
- sp = grub_term_entry_width (term_screen->term)
- - (*pos)[linep->len].x;
- if (sp > 0)
- grub_print_spaces (term_screen->term, sp);
}
y += get_logical_num_lines (linep, term_screen);
if (y >= term_screen->num_entries)
line_width -= lastspacewidth;
if (ptr == last_space || *ptr == '\n')
ptr++;
+ else if (pos)
+ {
+ pos[ptr - str].x = line_width - last_width;
+ pos[ptr - str].y = lines;
+ pos[ptr - str].valid = 1;
+ }
+
line_start = ptr;
if (skip_lines)
if (!dry_run && !skip_lines && max_lines)
{
const grub_uint32_t *ptr2;
+ int sp;
+
for (ptr2 = line_start; ptr2 < last_position; ptr2++)
{
/* Skip combining characters on non-UTF8 terminals. */
continue;
putcode_real (*ptr2, term, fixed_tab);
}
+
+ sp = max_width - pos[last_position - str].x + 1;
+ if (sp > 0)
+ grub_print_spaces (term, sp);
}
return dry_run ? lines : 0;
}
{
for (vptr = visual_show;
max_lines && vptr < visual + visual_len; vptr++)
- if (visual_show->base == '\n')
+ if (vptr->base == '\n')
max_lines--;
visual_len_show = vptr - visual_show;