#include <lib-lib/lib-lib.h>
-#include <lib-ui/curses.h>
+#include <lib-ui/lib-ui.h>
#include <lib-ui/enter.h>
#include <lib-ui/menu.h>
-#include <lib-ui/sidebar.h>
+#include <lib-ui/madtty.h>
#include <lib-mx/mx.h>
#include "mutt.h"
#define IsSendAttach(x) (x && (x)->bdy && !(x)->fp)
#define IsMsgAttach(x) (x && (x)->fp && (x)->bdy && (x)->bdy->hdr)
#define IsHeader(x) (x && (x)->hdr && !(x)->bdy)
-#define SW (option(OPTMBOXPANE)?SidebarWidth:0)
/* hack to return to position when returning from index to same message */
static int TopLine = 0;
int search = 0, i, m;
if (!cnt)
- last_color = -1; /* force wattrset(stdscr) */
+ last_color = -1; /* force wattrset(main_w) */
if (lineInfo[n].continuation) {
if (!cnt && option (OPTMARKERS)) {
- SETCOLOR (MT_COLOR_MARKERS);
- waddch (stdscr, '+');
+ SETCOLOR(main_w, MT_COLOR_MARKERS);
+ waddch(main_w, '+');
last_color = ColorDefs[MT_COLOR_MARKERS];
}
m = (lineInfo[n].syntax)[0].first;
if (special || a->attr) {
if ((a->attr & ANSI_COLOR)) {
if (a->pair == -1)
- a->pair = mutt_alloc_color (a->fg, a->bg);
+ a->pair = madtty_color_pair(a->fg, a->bg);
color = a->pair;
if (a->attr & ANSI_BOLD)
color |= A_BOLD;
}
if (color != last_color) {
- wattrset (stdscr, color);
+ wattrset(main_w, color);
last_color = color;
}
}
return class;
}
-static int brailleLine = -1;
-static int brailleCol = -1;
-
static int check_attachment_marker (char *);
static void
if (n == 0 || ISHEADER (lineInfo[n - 1].type)) {
if (buf[0] == '\n') {
lineInfo[n].type = MT_COLOR_NORMAL;
- getyx(stdscr, brailleLine, brailleCol);
}
else if (n > 0 && (buf[0] == ' ' || buf[0] == '\t')) {
lineInfo[n].type = lineInfo[n - 1].type; /* wrapped line */
return (int)(*p - *q);
}
-static int grok_ansi (unsigned char *buf, int pos, ansi_attr * a)
-{
- int x = pos;
-
- while (isdigit (buf[x]) || buf[x] == ';')
- x++;
-
- /* Character Attributes */
- if (option (OPTALLOWANSI) && a != NULL && buf[x] == 'm') {
- if (pos == x) {
- if (a->pair != -1)
- mutt_free_color (a->fg, a->bg);
- a->attr = ANSI_OFF;
- a->pair = -1;
- }
- a->bg = -2;
- a->fg = -2;
- while (pos < x) {
- if (buf[pos] == '1' && (pos + 1 == x || buf[pos + 1] == ';')) {
- a->attr |= ANSI_BOLD;
- pos += 2;
- }
- else if (buf[pos] == '4' && (pos + 1 == x || buf[pos + 1] == ';')) {
- a->attr |= ANSI_UNDERLINE;
- pos += 2;
- }
- else if (buf[pos] == '5' && (pos + 1 == x || buf[pos + 1] == ';')) {
- a->attr |= ANSI_BLINK;
- pos += 2;
- }
- else if (buf[pos] == '7' && (pos + 1 == x || buf[pos + 1] == ';')) {
- a->attr |= ANSI_REVERSE;
- pos += 2;
- }
- else if (buf[pos] == '0' && (pos + 1 == x || buf[pos + 1] == ';')) {
- a->bg = -2;
- a->fg = -2;
- pos += 2;
- }
- else if (buf[pos] == '3' && isdigit (buf[pos + 1])) {
- if (a->pair != -1)
- mutt_free_color (a->fg, a->bg);
- a->pair = -1;
- a->attr |= ANSI_COLOR;
- if (buf[pos + 1] != '9')
- a->fg = buf[pos + 1] - '0';
- pos += 3;
- }
- else if (buf[pos] == '4' && isdigit (buf[pos + 1])) {
- if (a->pair != -1)
- mutt_free_color (a->fg, a->bg);
- a->pair = -1;
- a->attr |= ANSI_COLOR;
- if (buf[pos + 1] != '9')
- a->bg = buf[pos + 1] - '0';
- pos += 3;
- } else {
- while (pos < x && buf[pos] != ';')
- pos++;
- pos++;
- }
- }
- }
- pos = x;
- return pos;
-}
-
/* trim tail of buf so that it contains complete multibyte characters */
static int trim_incomplete_mbyte(unsigned char *buf, size_t len) {
mbstate_t mbstate;
return b_read;
}
-#ifdef USE_NNTP
-#include "nntp.h"
-#endif
-
static int format_line (struct line_t **lineInfo, int n, unsigned char *buf,
int flags, ansi_attr * pa, int cnt,
int *pspace, int *pvch, int *pcol, int *pspecial)
wchar_t wc;
mbstate_t mbstate;
- int wrap_cols = COLS;
+ int wrap_cols = getmaxx(main_w);
if (!(flags & (M_SHOWFLAT)))
wrap_cols -= WrapMargin;
- wrap_cols -= SW;
if (wrap_cols <= 0)
- wrap_cols = COLS;
+ wrap_cols = getmaxx(main_w);
/* FIXME: this should come from lineInfo */
p_clear(&mbstate, 1);
for (ch = 0, vch = 0; ch < cnt; ch += k, vch += k) {
/* Handle ANSI sequences */
while (cnt - ch >= 2 && buf[ch] == '\033' && buf[ch + 1] == '[' &&
- is_ansi (buf + ch + 2))
- ch = grok_ansi (buf, ch + 2, pa) + 1;
+ is_ansi (buf + ch + 2)) {
+ while (isdigit(buf[ch]) || buf[ch] == ';')
+ ch++;
+ }
while (cnt - ch >= 2 && buf[ch] == '\033' && buf[ch + 1] == ']' &&
check_attachment_marker ((char *) buf + ch) == 0) {
break;
col += 4;
if (pa)
- wprintw (stdscr, "\\%03o", buf[ch]);
+ wprintw(main_w, "\\%03o", buf[ch]);
k = 1;
continue;
}
break;
col += t;
if (pa)
- mutt_addwch (wc);
+ waddwch(main_w, wc);
}
else if (wc == '\n')
break;
break;
if (pa)
for (; col < t; col++)
- waddch (stdscr, ' ');
+ waddch(main_w, ' ');
else
col = t;
}
break;
col += 2;
if (pa)
- wprintw (stdscr, "^%c", ('@' + wc) & 0x7f);
+ wprintw(main_w, "^%c", ('@' + wc) & 0x7f);
}
else if (wc < 0x100) {
if (col + 4 > wrap_cols)
break;
col += 4;
if (pa)
- wprintw (stdscr, "\\%03o", wc);
+ wprintw(main_w, "\\%03o", wc);
} else {
if (col + 1 > wrap_cols)
break;
++col;
if (pa)
- waddch (stdscr, CharsetReplacement);
+ waddch(main_w, CharsetReplacement);
}
}
*pspace = space;
format_line (lineInfo, n, buf, flags, &a, cnt, &ch, &vch, &col, &special);
/* end the last color pattern (needed by S-Lang) */
- if (special || (col != COLS && (flags & (M_SHOWCOLOR | M_SEARCH))))
- resolve_color (*lineInfo, n, vch, flags, 0, &a);
+ if (special || (col != getmaxx(main_w) && (flags & (M_SHOWCOLOR | M_SEARCH))))
+ resolve_color(*lineInfo, n, vch, flags, 0, &a);
/*
* Fill the blank space at the end of the line with the prevailing color.
- * ncurses does an implicit wclrtoeol(stdscr) when you do waddch(stdscr,
+ * ncurses does an implicit wclrtoeol(main_w) when you do waddch(main_w,
* '\n') so we have to make sure to reset the color *after* that
*/
if (flags & M_SHOWCOLOR) {
else
def_color = ColorDefs[(*lineInfo)[m].type];
- wattrset (stdscr, def_color);
- wbkgdset (stdscr, def_color | ' ');
+ wattrset(main_w, def_color);
+ wbkgdset(main_w, def_color | ' ');
}
- waddch (stdscr, '\n');
+ waddch(main_w, '\n');
/*
* reset the color back to normal. This *must* come after the
- * waddch(stdscr, '\n'), otherwise the color for this line will not be
+ * waddch(main_w, '\n'), otherwise the color for this line will not be
* filled to the right margin.
*/
if (flags & M_SHOWCOLOR) {
- SETCOLOR (MT_COLOR_NORMAL);
- BKGDSET (MT_COLOR_NORMAL);
+ SETCOLOR(main_w, MT_COLOR_NORMAL);
+ BKGDSET(main_w, MT_COLOR_NORMAL);
}
/* build a return code */
int bodyoffset = 1; /* offset of first line of real text */
int statusoffset = 0; /* offset for the status bar */
- int helpoffset = LINES - 2; /* offset for the help bar. */
int bodylen = LINES - 2 - bodyoffset; /* length of displayable area */
MUTTMENU *pager_index = NULL; /* the Pager Index (PI) */
- int indexoffset = 0; /* offset for the PI */
- int indexlen = PagerIndexLines; /* indexlen not always == PIL */
+ int indexlen = PagerIndexLines; /* indexlen not always == PIL */
int indicator = indexlen / 3; /* the indicator line of the PI */
int old_PagerIndexLines; /* some people want to resize it
* while inside the pager... */
-#ifdef USE_NNTP
- char *followup_to;
-#endif
-
if (!(flags & M_SHOWCOLOR))
flags |= M_SHOWFLAT;
imap_keepalive ();
if (redraw & REDRAW_FULL) {
- SETCOLOR (MT_COLOR_NORMAL);
- /* wclear(stdscr) doesn't optimize screen redraws */
- wmove (stdscr, 0, 0);
- wclrtobot (stdscr);
+ SETCOLOR(main_w, MT_COLOR_NORMAL);
+ werase(main_w);
if (IsHeader (extra) && Context->vcount + 1 < PagerIndexLines)
indexlen = Context->vcount + 1;
indicator = indexlen / 3;
- if (option (OPTSTATUSONTOP)) {
- indexoffset = 0;
- statusoffset = IsHeader (extra) ? indexlen : 0;
- bodyoffset = statusoffset + 1;
- helpoffset = LINES - 2;
- bodylen = helpoffset - bodyoffset;
- if (!option (OPTHELP))
- bodylen++;
- } else {
- helpoffset = 0;
- indexoffset = 1;
- statusoffset = LINES - 2;
- if (!option (OPTHELP))
- indexoffset = 0;
- bodyoffset = indexoffset + (IsHeader (extra) ? indexlen : 0);
- bodylen = statusoffset - bodyoffset;
- }
+ statusoffset = IsHeader (extra) ? indexlen : 0;
+ bodyoffset = statusoffset + 1;
+ bodylen = LINES - 2 - bodyoffset;
- if (option (OPTHELP)) {
- SETCOLOR (MT_COLOR_STATUS);
- wmove (stdscr, helpoffset, SW);
- mutt_paddstr (COLS-SW, "");
- SETCOLOR (MT_COLOR_NORMAL);
- }
+ SETCOLOR(main_w, MT_COLOR_SIDEBAR);
+ mvwhline(main_w, LINES - 2, 0, ACS_HLINE, getmaxx(main_w));
+ SETCOLOR(main_w, MT_COLOR_NORMAL);
if (Resize != NULL) {
if ((SearchCompiled = Resize->SearchCompiled)) {
pager_index->current = extra->hdr->virtual;
}
- SETCOLOR (MT_COLOR_NORMAL);
- pager_index->offset = indexoffset + (option (OPTSTATUSONTOP) ? 1 : 0);
-
+ SETCOLOR(main_w, MT_COLOR_NORMAL);
+ pager_index->offset = 1;
pager_index->pagelen = indexlen - 1;
/* some fudge to work out where abouts the indicator should go */
if ((redraw & REDRAW_BODY) || topline != oldtopline) {
do {
- wmove (stdscr, bodyoffset, SW);
+ wmove(main_w, bodyoffset, 0);
curline = oldtopline = topline;
lines = 0;
force_redraw = 0;
&SearchRE) > 0)
lines++;
curline++;
- wmove (stdscr, lines + bodyoffset, SW);
+ wmove(main_w, lines + bodyoffset, 0);
redraw |= REDRAW_SIDEBAR;
}
last_offset = lineInfo[curline].offset;
} while (force_redraw);
- SETCOLOR (MT_COLOR_TILDE);
- BKGDSET (MT_COLOR_TILDE);
+ SETCOLOR(main_w, MT_COLOR_TILDE);
+ BKGDSET(main_w, MT_COLOR_TILDE);
while (lines < bodylen) {
- wclrtoeol (stdscr);
+ wclrtoeol(main_w);
if (option (OPTTILDE))
- waddch (stdscr, '~');
- waddch (stdscr, '\n');
+ waddch(main_w, '~');
+ waddch(main_w, '\n');
lines++;
- wmove (stdscr, lines + bodyoffset, SW);
+ wmove(main_w, lines + bodyoffset, 0);
}
/* We are going to update the pager status bar, so it isn't
* necessary to reset to normal color now. */
if (redraw & REDRAW_STATUS) {
/* print out the pager status bar */
- SETCOLOR (MT_COLOR_STATUS);
- BKGDSET (MT_COLOR_STATUS);
- CLEARLINE_WIN (statusoffset);
+ SETCOLOR(main_w, MT_COLOR_STATUS);
+ BKGDSET(main_w, MT_COLOR_STATUS);
+ wmove(main_w, statusoffset, 0);
+ wclrtoeol(main_w);
if (IsHeader (extra)) {
- size_t l1 = (COLS - 9) * MB_LEN_MAX;
+ size_t l1 = (getmaxx(main_w) - 9) * MB_LEN_MAX;
size_t l2 = sizeof (buffer);
_mutt_make_string (buffer, l1 < l2 ? l1 : l2, NONULL (PagerFmt),
Context, extra->hdr, M_FORMAT_MAKEPRINT);
}
else if (IsMsgAttach (extra)) {
- size_t l1 = (COLS - 9) * MB_LEN_MAX;
+ size_t l1 = (getmaxx(main_w) - 9) * MB_LEN_MAX;
size_t l2 = sizeof (buffer);
_mutt_make_string (buffer, l1 < l2 ? l1 : l2, NONULL (PagerFmt),
Context, extra->bdy->hdr, M_FORMAT_MAKEPRINT);
}
- wmove(stdscr, statusoffset,SW);
- mutt_paddstr (COLS - 10 - SW, IsHeader (extra) ||
- IsMsgAttach (extra) ? buffer : banner);
+ wmove(main_w, statusoffset, 0);
+ mutt_paddstr(main_w, getmaxx(main_w) - 10,
+ IsHeader(extra) || IsMsgAttach(extra) ? buffer : banner);
- waddstr (stdscr, " -- (");
+ waddstr(main_w, " -- (");
if (last_pos < sb.st_size - 1)
- wprintw (stdscr, "%d%%)", (int) (100 * last_offset / sb.st_size));
+ wprintw(main_w, "%d%%)", (int) (100 * last_offset / sb.st_size));
else
- waddstr (stdscr, topline == 0 ? "all)" : "end)");
- BKGDSET (MT_COLOR_NORMAL);
- SETCOLOR (MT_COLOR_NORMAL);
+ waddstr(main_w, topline == 0 ? "all)" : "end)");
+ BKGDSET(main_w, MT_COLOR_NORMAL);
+ SETCOLOR(main_w, MT_COLOR_NORMAL);
}
if (redraw & REDRAW_SIDEBAR)
sidebar_draw ();
/* print out the pager_index status bar */
menu_status_line (buffer, sizeof (buffer), pager_index, NONULL (Status));
- wmove (stdscr, indexoffset + (option (OPTSTATUSONTOP) ? 0 : (indexlen - 1)), SW);
- SETCOLOR (MT_COLOR_STATUS);
- BKGDSET (MT_COLOR_STATUS);
- mutt_paddstr (COLS-SW, buffer);
- SETCOLOR (MT_COLOR_NORMAL);
- BKGDSET (MT_COLOR_NORMAL);
+ wmove(main_w, 0, 0);
+ SETCOLOR(main_w, MT_COLOR_STATUS);
+ BKGDSET(main_w, MT_COLOR_STATUS);
+ mutt_paddstr(main_w, getmaxx(main_w), buffer);
+ SETCOLOR(main_w, MT_COLOR_NORMAL);
+ BKGDSET(main_w, MT_COLOR_NORMAL);
}
- /* if we're not using the index, update every time */
- if (index == 0)
- sidebar_draw ();
+ sidebar_draw ();
redraw = 0;
-
- if (option(OPTBRAILLEFRIENDLY)) {
- if (brailleLine!=-1) {
- wmove(stdscr, brailleLine+1, 0);
- brailleLine = -1;
- }
- } else
- wmove (stdscr, statusoffset, COLS-1);
- mutt_refresh ();
+ mutt_refresh();
if (IsHeader (extra) && OldHdr == extra->hdr && TopLine != topline
&& lineInfo[curline].offset < sb.st_size-1) {
mutt_query_exit ();
continue;
}
- else if (SigWinch) {
- mutt_resize_screen ();
+
+ if (SigWinch) {
+ ui_layout_resize();
/* Store current position. */
lines = -1;
redraw = REDRAW_FULL | REDRAW_SIGWINCH;
ch = 0;
}
-
- SigWinch = 0;
- clearok (stdscr, TRUE); /*force complete redraw */
continue;
}
- else if (ch == -1) {
+
+ if (ch == -1) {
ch = 0;
continue;
}
break;
case OP_REDRAW:
- clearok (stdscr, TRUE);
+ clearok(main_w, TRUE);
redraw = REDRAW_FULL;
break;
redraw = REDRAW_FULL;
break;
-#ifdef USE_NNTP
- case OP_POST:
- CHECK_MODE (IsHeader (extra) && !IsAttach (extra));
- CHECK_ATTACH;
- if (extra->ctx && extra->ctx->magic == M_NNTP &&
- !((nntp_data_t *) extra->ctx->data)->allowed &&
- query_quadoption (OPT_TOMODERATED,
- _
- ("Posting to this group not allowed, may be moderated. Continue?"))
- != M_YES)
- break;
- ci_send_message (SENDNEWS, NULL, NULL, extra->ctx, NULL);
- redraw = REDRAW_FULL;
- break;
-
- case OP_FORWARD_TO_GROUP:
- CHECK_MODE (IsHeader (extra) || IsMsgAttach (extra));
- CHECK_ATTACH;
- if (extra->ctx && extra->ctx->magic == M_NNTP &&
- !((nntp_data_t *) extra->ctx->data)->allowed &&
- query_quadoption (OPT_TOMODERATED,
- _
- ("Posting to this group not allowed, may be moderated. Continue?"))
- != M_YES)
- break;
- if (IsMsgAttach (extra))
- mutt_attach_forward (extra->fp, extra->hdr, extra->idx,
- extra->idxlen, extra->bdy, SENDNEWS);
- else
- ci_send_message (SENDNEWS | SENDFORWARD, NULL, NULL, extra->ctx,
- extra->hdr);
- redraw = REDRAW_FULL;
- break;
-
- case OP_FOLLOWUP:
- CHECK_MODE (IsHeader (extra) || IsMsgAttach (extra));
- CHECK_ATTACH;
-
- if (IsMsgAttach (extra))
- followup_to = extra->bdy->hdr->env->followup_to;
- else
- followup_to = extra->hdr->env->followup_to;
-
- if (!followup_to || m_strcasecmp(followup_to, "poster") ||
- query_quadoption (OPT_FOLLOWUPTOPOSTER,
- _("Reply by mail as poster prefers?")) != M_YES) {
- if (extra->ctx && extra->ctx->magic == M_NNTP
- && !((nntp_data_t *) extra->ctx->data)->allowed
- && query_quadoption (OPT_TOMODERATED,
- _
- ("Posting to this group not allowed, may be moderated. Continue?"))
- != M_YES)
- break;
- if (IsMsgAttach (extra))
- mutt_attach_reply (extra->fp, extra->hdr, extra->idx,
- extra->idxlen, extra->bdy, SENDNEWS | SENDREPLY);
- else
- ci_send_message (SENDNEWS | SENDREPLY, NULL, NULL,
- extra->ctx, extra->hdr);
- redraw = REDRAW_FULL;
- break;
- }
-#endif
-
case OP_REPLY:
CHECK_MODE (IsHeader (extra) || IsMsgAttach (extra));
CHECK_ATTACH;