width = len ? bytes2width(s, len) : strwidth(s);
x_start = *x_pos + ((e->d.field.len < 0) ? len - width : 0);
if(width + x_start >= COLS)
- width = COLS - x_start;
+ width = bytes2width(s, COLS - x_start);
if(width)
mvwaddnstr(list, line, x_start, s, width);
*x_pos += len ? len : width;
}
+static void
+highlight_line(WINDOW *win, int line)
+{
+ wstandout(win);
+
+ /*
+ * this is a tricky one
+ */
+#if 0
+/*#ifdef mvwchgat*/
+ mvwchgat(win, line, 0, -1, A_STANDOUT, 0, NULL);
+#else
+ /*
+ * buggy function: FIXME
+ */
+ scrollok(win, FALSE);
+ {
+ int i;
+ wmove(win, line, 0);
+ for(i = 0; i < COLS; i++)
+ waddch(win, ' ');
+ /*wattrset(win, 0);*/
+ }
+ scrollok(win, TRUE);
+#endif
+}
+
static void
print_list_line(int item, int line, int highlight)
{
x_pos += strwidth(e->d.text);
else if(e->type == INDEX_FIELD) {
get_field_info(e->d.field.id, NULL, &str, NULL);
- width = e->d.field.len ? abs(e->d.field.len) : strwidth(str);
+ width = e->d.field.len ?
+ abs(e->d.field.len) : strwidth(str);
+ if(width + x_pos > COLS)
+ width = bytes2width(str, COLS - x_pos);
mvaddnstr(2, x_pos, str, width);
x_pos += width;
} else
refresh_list();
}
-static void
-highlight_line(WINDOW *win, int line)
-{
- wstandout(win);
-
- /*
- * this is a tricky one
- */
-#if 0
-/*#ifdef mvwchgat*/
- mvwchgat(win, line, 0, -1, A_STANDOUT, 0, NULL);
-#else
- /*
- * buggy function: FIXME
- */
- scrollok(win, FALSE);
- {
- int i;
- wmove(win, line, 0);
- for(i = 0; i < COLS; i++)
- waddch(win, ' ');
- /*wattrset(win, 0);*/
- }
- scrollok(win, TRUE);
-#endif
-}
-
int
selected_items()
{