*/
#include <lib-lib/lib-lib.h>
-#include <lib-crypt/crypt.h>
-#include <lib-ui/curses.h>
-#include <lib-ui/enter.h>
+#include <lib-ui/lib-ui.h>
#include <lib-ui/menu.h>
-#include <lib-ui/sidebar.h>
+#include <lib-ui/madtty.h>
#include <lib-mx/mx.h>
#include "mutt.h"
+#include "crypt.h"
#include "alias.h"
#include "keymap.h"
#include "sort.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;
static short InHelp = 0;
-#if defined (USE_SLANG_CURSES) || defined (HAVE_RESIZETERM)
static struct resize {
int line;
int SearchCompiled;
int SearchBack;
} *Resize = NULL;
-#endif
#define NumSigLines 4
int search = 0, i, m;
if (!cnt)
- last_color = -1; /* force attrset() */
+ last_color = -1; /* force wattrset(main_w) */
if (lineInfo[n].continuation) {
if (!cnt && option (OPTMARKERS)) {
- SETCOLOR (MT_COLOR_MARKERS);
- addch ('+');
+ 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) {
- attrset (color);
+ wattrset(main_w, color);
last_color = color;
}
}
/* find the real start of the line */
for (m = n; m >= 0; m--)
- if (lineInfo[m].continuation == 0)
- break;
+ if (lineInfo[m].continuation == 0)
+ break;
(lineInfo[n + 1].syntax)[0].first = m;
(lineInfo[n + 1].syntax)[0].last = (lineInfo[n].continuation) ?
- cnt + (lineInfo[n].syntax)[0].last : cnt;
+ cnt + (lineInfo[n].syntax)[0].last : cnt;
}
static void new_class_color (struct q_class_t *class, int *q_level)
{
- class->index = (*q_level)++;
- class->color = ColorQuote[class->index % ColorQuoteUsed];
+ class->index = (*q_level)++;
+ class->color = ColorQuote[class->index % ColorQuoteUsed];
}
static void
shift_class_colors (struct q_class_t *QuoteList, struct q_class_t *new_class,
int lindex, int *q_level)
{
- struct q_class_t *q_list;
+ struct q_class_t *q_list;
- q_list = QuoteList;
- new_class->index = -1;
+ q_list = QuoteList;
+ new_class->index = -1;
- while (q_list) {
- if (q_list->index >= lindex) {
- q_list->index++;
- q_list->color = ColorQuote[q_list->index % ColorQuoteUsed];
- }
- if (q_list->down)
- q_list = q_list->down;
- else if (q_list->next)
- q_list = q_list->next;
- else {
- while (!q_list->next) {
- q_list = q_list->up;
- if (q_list == NULL)
- break;
- }
- if (q_list)
- q_list = q_list->next;
+ while (q_list) {
+ if (q_list->index >= lindex) {
+ q_list->index++;
+ q_list->color = ColorQuote[q_list->index % ColorQuoteUsed];
+ }
+ if (q_list->down)
+ q_list = q_list->down;
+ else if (q_list->next)
+ q_list = q_list->next;
+ else {
+ while (!q_list->next) {
+ q_list = q_list->up;
+ if (q_list == NULL)
+ break;
+ }
+ if (q_list)
+ q_list = q_list->next;
+ }
}
- }
- new_class->index = lindex;
- new_class->color = ColorQuote[lindex % ColorQuoteUsed];
- (*q_level)++;
+ new_class->index = lindex;
+ new_class->color = ColorQuote[lindex % ColorQuoteUsed];
+ (*q_level)++;
}
static void cleanup_quote(struct q_class_t **QuoteList)
const char *qptr, int length,
int *force_redraw, int *q_level)
{
- struct q_class_t *q_list = *QuoteList;
- struct q_class_t *class = NULL, *tmp = NULL, *ptr, *save;
- char *tail_qptr;
- int offset, tail_lng;
- int lindex = -1;
-
- if (ColorQuoteUsed <= 1) {
- /* not much point in classifying quotes... */
-
- if (*QuoteList == NULL) {
- class = p_new(struct q_class_t, 1);
- class->color = ColorQuote[0];
- *QuoteList = class;
- }
- return (*QuoteList);
- }
-
- /* Did I mention how much I like emulating Lisp in C? */
-
- /* classify quoting prefix */
- while (q_list) {
- if (length <= q_list->length) {
- /* case 1: check the top level nodes */
-
- if (m_strncmp(qptr, q_list->prefix, length) == 0) {
- if (length == q_list->length)
- return q_list; /* same prefix: return the current class */
-
- /* found shorter prefix */
- if (tmp == NULL) {
- /* add a node above q_list */
- tmp = p_new(struct q_class_t, 1);
- tmp->prefix = p_dupstr(qptr, length);
- tmp->length = length;
-
- /* replace q_list by tmp in the top level list */
- if (q_list->next) {
- tmp->next = q_list->next;
- q_list->next->prev = tmp;
- }
- if (q_list->prev) {
- tmp->prev = q_list->prev;
- q_list->prev->next = tmp;
- }
-
- /* make q_list a child of tmp */
- tmp->down = q_list;
- q_list->up = tmp;
-
- /* q_list has no siblings for now */
- q_list->next = NULL;
- q_list->prev = NULL;
-
- /* update the root if necessary */
- if (q_list == *QuoteList)
- *QuoteList = tmp;
-
- lindex = q_list->index;
-
- /* tmp should be the return class too */
- class = tmp;
-
- /* next class to test; if tmp is a shorter prefix for another
- * node, that node can only be in the top level list, so don't
- * go down after this point
- */
- q_list = tmp->next;
- } else {
- /* found another branch for which tmp is a shorter prefix */
-
- /* save the next sibling for later */
- save = q_list->next;
-
- /* unlink q_list from the top level list */
- if (q_list->next)
- q_list->next->prev = q_list->prev;
- if (q_list->prev)
- q_list->prev->next = q_list->next;
-
- /* at this point, we have a tmp->down; link q_list to it */
- ptr = tmp->down;
- /* sibling order is important here, q_list should be linked last */
- while (ptr->next)
- ptr = ptr->next;
- ptr->next = q_list;
- q_list->next = NULL;
- q_list->prev = ptr;
- q_list->up = tmp;
-
- lindex = q_list->index;
-
- /* next class to test; as above, we shouldn't go down */
- q_list = save;
+ struct q_class_t *q_list = *QuoteList;
+ struct q_class_t *class = NULL, *tmp = NULL, *ptr, *save;
+ char *tail_qptr;
+ int offset, tail_lng;
+ int lindex = -1;
+
+ if (ColorQuoteUsed <= 1) {
+ /* not much point in classifying quotes... */
+
+ if (*QuoteList == NULL) {
+ class = p_new(struct q_class_t, 1);
+ class->color = ColorQuote[0];
+ *QuoteList = class;
}
+ return *QuoteList;
+ }
- /* we found a shorter prefix, so certain quotes have changed classes */
- *force_redraw = 1;
- continue;
- } else {
- /* shorter, but not a substring of the current class: try next */
- q_list = q_list->next;
- continue;
- }
- } else {
- /* case 2: try subclassing the current top level node */
-
- /* tmp != NULL means we already found a shorter prefix at case 1 */
- if (tmp == NULL
- && m_strncmp(qptr, q_list->prefix, q_list->length) == 0) {
- /* ok, it's a subclass somewhere on this branch */
-
- ptr = q_list;
- offset = q_list->length;
-
- q_list = q_list->down;
- tail_lng = length - offset;
- tail_qptr = (char *) qptr + offset;
-
- while (q_list) {
- if (length <= q_list->length) {
- if (m_strncmp(tail_qptr, (q_list->prefix) + offset, tail_lng)
- == 0) {
- /* same prefix: return the current class */
- if (length == q_list->length)
- return q_list;
-
- /* found shorter common prefix */
- if (tmp == NULL) {
- /* add a node above q_list */
- tmp = p_new(struct q_class_t, 1);
- tmp->prefix = p_dupstr(qptr, length);
- tmp->length = length;
-
- /* replace q_list by tmp */
- if (q_list->next) {
- tmp->next = q_list->next;
- q_list->next->prev = tmp;
- }
- if (q_list->prev) {
- tmp->prev = q_list->prev;
- q_list->prev->next = tmp;
+ /* Did I mention how much I like emulating Lisp in C? */
+
+ /* classify quoting prefix */
+ while (q_list) {
+ if (length <= q_list->length) {
+ /* case 1: check the top level nodes */
+
+ if (m_strncmp(qptr, q_list->prefix, length) == 0) {
+ if (length == q_list->length)
+ return q_list; /* same prefix: return the current class */
+
+ /* found shorter prefix */
+ if (tmp == NULL) {
+ /* add a node above q_list */
+ tmp = p_new(struct q_class_t, 1);
+ tmp->prefix = p_dupstr(qptr, length);
+ tmp->length = length;
+
+ /* replace q_list by tmp in the top level list */
+ if (q_list->next) {
+ tmp->next = q_list->next;
+ q_list->next->prev = tmp;
+ }
+ if (q_list->prev) {
+ tmp->prev = q_list->prev;
+ q_list->prev->next = tmp;
+ }
+
+ /* make q_list a child of tmp */
+ tmp->down = q_list;
+ q_list->up = tmp;
+
+ /* q_list has no siblings for now */
+ q_list->next = NULL;
+ q_list->prev = NULL;
+
+ /* update the root if necessary */
+ if (q_list == *QuoteList)
+ *QuoteList = tmp;
+
+ lindex = q_list->index;
+
+ /* tmp should be the return class too */
+ class = tmp;
+
+ /* next class to test; if tmp is a shorter prefix for another
+ * node, that node can only be in the top level list, so don't
+ * go down after this point
+ */
+ q_list = tmp->next;
+ } else {
+ /* found another branch for which tmp is a shorter prefix */
+
+ /* save the next sibling for later */
+ save = q_list->next;
+
+ /* unlink q_list from the top level list */
+ if (q_list->next)
+ q_list->next->prev = q_list->prev;
+ if (q_list->prev)
+ q_list->prev->next = q_list->next;
+
+ /* at this point, we have a tmp->down; link q_list to it */
+ ptr = tmp->down;
+ /* sibling order is important here, q_list should be linked last */
+ while (ptr->next)
+ ptr = ptr->next;
+ ptr->next = q_list;
+ q_list->next = NULL;
+ q_list->prev = ptr;
+ q_list->up = tmp;
+
+ lindex = q_list->index;
+
+ /* next class to test; as above, we shouldn't go down */
+ q_list = save;
}
- /* make q_list a child of tmp */
- tmp->down = q_list;
- tmp->up = q_list->up;
- q_list->up = tmp;
- if (tmp->up->down == q_list)
- tmp->up->down = tmp;
-
- /* q_list has no siblings */
- q_list->next = NULL;
- q_list->prev = NULL;
-
- lindex = q_list->index;
-
- /* tmp should be the return class too */
- class = tmp;
-
- /* next class to test */
- q_list = tmp->next;
- } else {
- /* found another branch for which tmp is a shorter prefix */
-
- /* save the next sibling for later */
- save = q_list->next;
-
- /* unlink q_list from the top level list */
- if (q_list->next)
- q_list->next->prev = q_list->prev;
- if (q_list->prev)
- q_list->prev->next = q_list->next;
-
- /* at this point, we have a tmp->down; link q_list to it */
- ptr = tmp->down;
- while (ptr->next)
- ptr = ptr->next;
- ptr->next = q_list;
- q_list->next = NULL;
- q_list->prev = ptr;
- q_list->up = tmp;
-
- lindex = q_list->index;
-
- /* next class to test */
- q_list = save;
- }
-
- /* we found a shorter prefix, so we need a redraw */
- *force_redraw = 1;
- continue;
+ /* we found a shorter prefix, so certain quotes have changed classes */
+ *force_redraw = 1;
+ continue;
} else {
- q_list = q_list->next;
- continue;
+ /* shorter, but not a substring of the current class: try next */
+ q_list = q_list->next;
+ continue;
}
- } else {
- /* longer than the current prefix: try subclassing it */
- if (tmp == NULL
- && m_strncmp(tail_qptr, (q_list->prefix) + offset,
- q_list->length - offset) == 0) {
- /* still a subclass: go down one level */
- ptr = q_list;
- offset = q_list->length;
-
- q_list = q_list->down;
- tail_lng = length - offset;
- tail_qptr = (char *) qptr + offset;
+ } else {
+ /* case 2: try subclassing the current top level node */
- continue;
- } else {
- /* nope, try the next prefix */
- q_list = q_list->next;
- continue;
- }
- }
- }
+ /* tmp != NULL means we already found a shorter prefix at case 1 */
+ if (tmp == NULL
+ && m_strncmp(qptr, q_list->prefix, q_list->length) == 0) {
+ /* ok, it's a subclass somewhere on this branch */
+
+ ptr = q_list;
+ offset = q_list->length;
+
+ q_list = q_list->down;
+ tail_lng = length - offset;
+ tail_qptr = (char *) qptr + offset;
+
+ while (q_list) {
+ if (length <= q_list->length) {
+ if (m_strncmp(tail_qptr, (q_list->prefix) + offset, tail_lng)
+ == 0) {
+ /* same prefix: return the current class */
+ if (length == q_list->length)
+ return q_list;
+
+ /* found shorter common prefix */
+ if (tmp == NULL) {
+ /* add a node above q_list */
+ tmp = p_new(struct q_class_t, 1);
+ tmp->prefix = p_dupstr(qptr, length);
+ tmp->length = length;
+
+ /* replace q_list by tmp */
+ if (q_list->next) {
+ tmp->next = q_list->next;
+ q_list->next->prev = tmp;
+ }
+ if (q_list->prev) {
+ tmp->prev = q_list->prev;
+ q_list->prev->next = tmp;
+ }
+
+ /* make q_list a child of tmp */
+ tmp->down = q_list;
+ tmp->up = q_list->up;
+ q_list->up = tmp;
+ if (tmp->up->down == q_list)
+ tmp->up->down = tmp;
+
+ /* q_list has no siblings */
+ q_list->next = NULL;
+ q_list->prev = NULL;
+
+ lindex = q_list->index;
+
+ /* tmp should be the return class too */
+ class = tmp;
+
+ /* next class to test */
+ q_list = tmp->next;
+ } else {
+ /* found another branch for which tmp is a shorter prefix */
+
+ /* save the next sibling for later */
+ save = q_list->next;
+
+ /* unlink q_list from the top level list */
+ if (q_list->next)
+ q_list->next->prev = q_list->prev;
+ if (q_list->prev)
+ q_list->prev->next = q_list->next;
+
+ /* at this point, we have a tmp->down; link q_list to it */
+ ptr = tmp->down;
+ while (ptr->next)
+ ptr = ptr->next;
+ ptr->next = q_list;
+ q_list->next = NULL;
+ q_list->prev = ptr;
+ q_list->up = tmp;
+
+ lindex = q_list->index;
+
+ /* next class to test */
+ q_list = save;
+ }
+
+ /* we found a shorter prefix, so we need a redraw */
+ *force_redraw = 1;
+ continue;
+ } else {
+ q_list = q_list->next;
+ continue;
+ }
+ } else {
+ /* longer than the current prefix: try subclassing it */
+ if (tmp == NULL
+ && m_strncmp(tail_qptr, (q_list->prefix) + offset,
+ q_list->length - offset) == 0) {
+ /* still a subclass: go down one level */
+ ptr = q_list;
+ offset = q_list->length;
+
+ q_list = q_list->down;
+ tail_lng = length - offset;
+ tail_qptr = (char *) qptr + offset;
+
+ continue;
+ } else {
+ /* nope, try the next prefix */
+ q_list = q_list->next;
+ continue;
+ }
+ }
+ }
- /* still not found so far: add it as a sibling to the current node */
- if (class == NULL) {
- tmp = p_new(struct q_class_t, 1);
- tmp->prefix = p_dupstr(qptr, length);
- tmp->length = length;
+ /* still not found so far: add it as a sibling to the current node */
+ if (class == NULL) {
+ tmp = p_new(struct q_class_t, 1);
+ tmp->prefix = p_dupstr(qptr, length);
+ tmp->length = length;
- if (ptr->down) {
- tmp->next = ptr->down;
- ptr->down->prev = tmp;
- }
- ptr->down = tmp;
- tmp->up = ptr;
+ if (ptr->down) {
+ tmp->next = ptr->down;
+ ptr->down->prev = tmp;
+ }
+ ptr->down = tmp;
+ tmp->up = ptr;
- new_class_color (tmp, q_level);
+ new_class_color (tmp, q_level);
- return tmp;
- } else {
- if (lindex != -1)
- shift_class_colors (*QuoteList, tmp, lindex, q_level);
+ return tmp;
+ } else {
+ if (lindex != -1)
+ shift_class_colors (*QuoteList, tmp, lindex, q_level);
- return class;
+ return class;
+ }
+ } else {
+ /* nope, try the next prefix */
+ q_list = q_list->next;
+ continue;
+ }
}
- } else {
- /* nope, try the next prefix */
- q_list = q_list->next;
- continue;
- }
}
- }
- if (class == NULL) {
- /* not found so far: add it as a top level class */
- class = p_new(struct q_class_t, 1);
- class->prefix = p_dupstr(qptr, length);
- class->length = length;
- new_class_color (class, q_level);
+ if (class == NULL) {
+ /* not found so far: add it as a top level class */
+ class = p_new(struct q_class_t, 1);
+ class->prefix = p_dupstr(qptr, length);
+ class->length = length;
+ new_class_color (class, q_level);
- if (*QuoteList) {
- class->next = *QuoteList;
- (*QuoteList)->prev = class;
+ if (*QuoteList) {
+ class->next = *QuoteList;
+ (*QuoteList)->prev = class;
+ }
+ *QuoteList = class;
}
- *QuoteList = class;
- }
- if (lindex != -1)
- shift_class_colors (*QuoteList, tmp, lindex, q_level);
+ if (lindex != -1)
+ shift_class_colors (*QuoteList, tmp, lindex, q_level);
- return class;
+ return class;
}
-static int brailleLine = -1;
-static int brailleCol = -1;
-
static int check_attachment_marker (char *);
static void
struct q_class_t **QuoteList, int *q_level, int *force_redraw,
int q_classify)
{
- COLOR_LINE *color_line;
- regmatch_t pmatch[1], smatch[1];
- int found, offset, null_rx, i;
-
- 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 */
- (lineInfo[n].syntax)[0].color = (lineInfo[n - 1].syntax)[0].color;
- } else {
- lineInfo[n].type = MT_COLOR_HDEFAULT;
- color_line = ColorHdrList;
- while (color_line) {
- if (REGEXEC (&color_line->rx, buf) == 0) {
- lineInfo[n].type = MT_COLOR_HEADER;
- lineInfo[n].syntax[0].color = color_line->pair;
- break;
+ COLOR_LINE *color_line;
+ regmatch_t pmatch[1], smatch[1];
+ int found, offset, null_rx, i;
+
+ if (n == 0 || ISHEADER (lineInfo[n - 1].type)) {
+ if (buf[0] == '\n') {
+ lineInfo[n].type = MT_COLOR_NORMAL;
+ }
+ else if (n > 0 && (buf[0] == ' ' || buf[0] == '\t')) {
+ lineInfo[n].type = lineInfo[n - 1].type; /* wrapped line */
+ (lineInfo[n].syntax)[0].color = (lineInfo[n - 1].syntax)[0].color;
+ } else {
+ lineInfo[n].type = MT_COLOR_HDEFAULT;
+ color_line = ColorHdrList;
+ while (color_line) {
+ if (REGEXEC (&color_line->rx, buf) == 0) {
+ lineInfo[n].type = MT_COLOR_HEADER;
+ lineInfo[n].syntax[0].color = color_line->pair;
+ break;
+ }
+ color_line = color_line->next;
+ }
}
- color_line = color_line->next;
- }
}
- }
- else if (m_strncmp("\033[0m", rawbuf, 4) == 0) /* a little hack... */
- lineInfo[n].type = MT_COLOR_NORMAL;
- else if (check_attachment_marker ((char *) rawbuf) == 0)
- lineInfo[n].type = MT_COLOR_ATTACHMENT;
- else if (m_strcmp("-- \n", buf) == 0
- || m_strcmp("-- \r\n", buf) == 0) {
- i = n + 1;
-
- lineInfo[n].type = MT_COLOR_SIGNATURE;
- while (i < last && check_sig(buf, lineInfo, i - 1) == 0 &&
- (lineInfo[i].type == MT_COLOR_NORMAL ||
- lineInfo[i].type == MT_COLOR_QUOTED ||
- lineInfo[i].type == MT_COLOR_HEADER)) {
- /* oops... */
- if (lineInfo[i].chunks) {
- lineInfo[i].chunks = 0;
- p_realloc(&(lineInfo[n].syntax), 1);
- }
- lineInfo[i++].type = MT_COLOR_SIGNATURE;
+ else if (m_strncmp("\033[0m", rawbuf, 4) == 0) /* a little hack... */
+ lineInfo[n].type = MT_COLOR_NORMAL;
+ else if (check_attachment_marker ((char *) rawbuf) == 0)
+ lineInfo[n].type = MT_COLOR_ATTACHMENT;
+ else if (m_strcmp("-- \n", buf) == 0
+ || m_strcmp("-- \r\n", buf) == 0) {
+ i = n + 1;
+
+ lineInfo[n].type = MT_COLOR_SIGNATURE;
+ while (i < last && check_sig(buf, lineInfo, i - 1) == 0 &&
+ (lineInfo[i].type == MT_COLOR_NORMAL ||
+ lineInfo[i].type == MT_COLOR_QUOTED ||
+ lineInfo[i].type == MT_COLOR_HEADER)) {
+ /* oops... */
+ if (lineInfo[i].chunks) {
+ lineInfo[i].chunks = 0;
+ p_realloc(&(lineInfo[n].syntax), 1);
+ }
+ lineInfo[i++].type = MT_COLOR_SIGNATURE;
+ }
}
- }
- else if (check_sig(buf, lineInfo, n - 1) == 0)
- lineInfo[n].type = MT_COLOR_SIGNATURE;
- else if (regexec ((regex_t *) QuoteRegexp.rx, buf, 1, pmatch, 0) == 0) {
- if (regexec ((regex_t *) Smileys.rx, buf, 1, smatch, 0) == 0) {
- if (smatch[0].rm_so > 0) {
- char c;
-
- /* hack to avoid making an extra copy of buf */
- c = buf[smatch[0].rm_so];
- buf[smatch[0].rm_so] = 0;
-
- if (regexec ((regex_t *) QuoteRegexp.rx, buf, 1, pmatch, 0) == 0) {
- if (q_classify && lineInfo[n].quote == NULL)
- lineInfo[n].quote = classify_quote (QuoteList,
- buf + pmatch[0].rm_so,
- pmatch[0].rm_eo -
- pmatch[0].rm_so, force_redraw,
- q_level);
- lineInfo[n].type = MT_COLOR_QUOTED;
+ else if (check_sig(buf, lineInfo, n - 1) == 0)
+ lineInfo[n].type = MT_COLOR_SIGNATURE;
+ else if (regexec ((regex_t *) QuoteRegexp.rx, buf, 1, pmatch, 0) == 0) {
+ if (regexec ((regex_t *) Smileys.rx, buf, 1, smatch, 0) == 0) {
+ if (smatch[0].rm_so > 0) {
+ char c;
+
+ /* hack to avoid making an extra copy of buf */
+ c = buf[smatch[0].rm_so];
+ buf[smatch[0].rm_so] = 0;
+
+ if (regexec ((regex_t *) QuoteRegexp.rx, buf, 1, pmatch, 0) == 0) {
+ if (q_classify && lineInfo[n].quote == NULL)
+ lineInfo[n].quote = classify_quote (QuoteList,
+ buf + pmatch[0].rm_so,
+ pmatch[0].rm_eo -
+ pmatch[0].rm_so, force_redraw,
+ q_level);
+ lineInfo[n].type = MT_COLOR_QUOTED;
+ } else {
+ lineInfo[n].type = MT_COLOR_NORMAL;
+ }
+
+ buf[smatch[0].rm_so] = c;
+ } else {
+ lineInfo[n].type = MT_COLOR_NORMAL;
+ }
} else {
- lineInfo[n].type = MT_COLOR_NORMAL;
+ if (q_classify && lineInfo[n].quote == NULL)
+ lineInfo[n].quote = classify_quote (QuoteList, buf + pmatch[0].rm_so,
+ pmatch[0].rm_eo - pmatch[0].rm_so,
+ force_redraw, q_level);
+ lineInfo[n].type = MT_COLOR_QUOTED;
}
-
- buf[smatch[0].rm_so] = c;
- } else {
- lineInfo[n].type = MT_COLOR_NORMAL;
- }
} else {
- if (q_classify && lineInfo[n].quote == NULL)
- lineInfo[n].quote = classify_quote (QuoteList, buf + pmatch[0].rm_so,
- pmatch[0].rm_eo - pmatch[0].rm_so,
- force_redraw, q_level);
- lineInfo[n].type = MT_COLOR_QUOTED;
+ lineInfo[n].type = MT_COLOR_NORMAL;
}
- } else {
- lineInfo[n].type = MT_COLOR_NORMAL;
- }
- /* body patterns */
- if (lineInfo[n].type == MT_COLOR_NORMAL ||
- lineInfo[n].type == MT_COLOR_QUOTED) {
- i = 0;
+ /* body patterns */
+ if (lineInfo[n].type == MT_COLOR_NORMAL ||
+ lineInfo[n].type == MT_COLOR_QUOTED) {
+ i = 0;
- offset = 0;
- lineInfo[n].chunks = 0;
- do {
- if (!buf[offset])
- break;
+ offset = 0;
+ lineInfo[n].chunks = 0;
+ do {
+ if (!buf[offset])
+ break;
- found = 0;
- null_rx = 0;
- color_line = ColorBodyList;
- while (color_line) {
- if (regexec (&color_line->rx, buf + offset, 1, pmatch,
- (offset ? REG_NOTBOL : 0)) == 0) {
- if (pmatch[0].rm_eo != pmatch[0].rm_so) {
- if (!found) {
- if (++(lineInfo[n].chunks) > 1)
- p_realloc(&(lineInfo[n].syntax), lineInfo[n].chunks);
- }
- i = lineInfo[n].chunks - 1;
- pmatch[0].rm_so += offset;
- pmatch[0].rm_eo += offset;
- if (!found ||
- pmatch[0].rm_so < (lineInfo[n].syntax)[i].first ||
- (pmatch[0].rm_so == (lineInfo[n].syntax)[i].first &&
- pmatch[0].rm_eo > (lineInfo[n].syntax)[i].last)) {
- (lineInfo[n].syntax)[i].color = color_line->pair;
- (lineInfo[n].syntax)[i].first = pmatch[0].rm_so;
- (lineInfo[n].syntax)[i].last = pmatch[0].rm_eo;
- }
- found = 1;
+ found = 0;
null_rx = 0;
- } else {
- null_rx = 1; /* empty regexp; don't add it, but keep looking */
- }
- }
- color_line = color_line->next;
- }
+ color_line = ColorBodyList;
+ while (color_line) {
+ if (regexec (&color_line->rx, buf + offset, 1, pmatch,
+ (offset ? REG_NOTBOL : 0)) == 0) {
+ if (pmatch[0].rm_eo != pmatch[0].rm_so) {
+ if (!found) {
+ if (++(lineInfo[n].chunks) > 1)
+ p_realloc(&(lineInfo[n].syntax), lineInfo[n].chunks);
+ }
+ i = lineInfo[n].chunks - 1;
+ pmatch[0].rm_so += offset;
+ pmatch[0].rm_eo += offset;
+ if (!found ||
+ pmatch[0].rm_so < (lineInfo[n].syntax)[i].first ||
+ (pmatch[0].rm_so == (lineInfo[n].syntax)[i].first &&
+ pmatch[0].rm_eo > (lineInfo[n].syntax)[i].last)) {
+ (lineInfo[n].syntax)[i].color = color_line->pair;
+ (lineInfo[n].syntax)[i].first = pmatch[0].rm_so;
+ (lineInfo[n].syntax)[i].last = pmatch[0].rm_eo;
+ }
+ found = 1;
+ null_rx = 0;
+ } else {
+ null_rx = 1; /* empty regexp; don't add it, but keep looking */
+ }
+ }
+ color_line = color_line->next;
+ }
- if (null_rx)
- offset++; /* avoid degenerate cases */
- else
- offset = lineInfo[n].syntax[i].last;
- } while (found || null_rx);
- }
+ if (null_rx)
+ offset++; /* avoid degenerate cases */
+ else
+ offset = lineInfo[n].syntax[i].last;
+ } while (found || null_rx);
+ }
}
static int is_ansi(unsigned char *buf)
{
while (isdigit(*buf) || *buf == ';')
buf++;
- return (*buf == 'm');
+ return *buf == 'm';
}
static int check_attachment_marker(char *p)
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;
- ssize_t k;
+ mbstate_t mbstate;
+ ssize_t k;
- p_clear(&mbstate, 1);
- for (; len > 0; buf += k, len -= k) {
- k = mbrtowc (NULL, (char *) buf, len, &mbstate);
- if (k == -2)
- break;
- if (k == -1 || k == 0)
- k = 1;
- }
- *buf = '\0';
+ p_clear(&mbstate, 1);
+ for (; len > 0; buf += k, len -= k) {
+ k = mbrtowc (NULL, (char *) buf, len, &mbstate);
+ if (k == -2)
+ break;
+ if (k == -1 || k == 0)
+ k = 1;
+ }
+ *buf = '\0';
- return len;
+ return len;
}
static int
fill_buffer (FILE * f, off_t *last_pos, off_t offset, unsigned char *buf,
unsigned char *fmt, ssize_t blen, int *buf_ready)
{
- unsigned char *p;
- static int b_read = 0;
-
- if (*buf_ready == 0) {
- buf[blen - 1] = 0;
- if (offset != *last_pos)
- fseeko (f, offset, 0);
- if (fgets ((char *) buf, blen - 1, f) == NULL) {
- fmt[0] = 0;
- return (-1);
- }
- *last_pos = ftello (f);
- b_read = (int) (*last_pos - offset);
- *buf_ready = 1;
-
- /* incomplete mbyte characters trigger a segfault in regex processing for
- * certain versions of glibc. Trim them if necessary. */
- if (b_read == blen - 2)
- b_read -= trim_incomplete_mbyte(buf, b_read);
-
- /* copy "buf" to "fmt", but without bold and underline controls */
- p = buf;
- while (*p) {
- if (*p == '\010' && (p > buf)) {
- if (*(p + 1) == '_') /* underline */
- p += 2;
- else if (*(p + 1)) { /* bold or overstrike */
- *(fmt - 1) = *(p + 1);
- p += 2;
- } else { /* ^H */
- *fmt++ = *p++;
+ unsigned char *p;
+ static int b_read = 0;
+
+ if (*buf_ready == 0) {
+ buf[blen - 1] = 0;
+ if (offset != *last_pos)
+ fseeko (f, offset, 0);
+ if (fgets ((char *) buf, blen - 1, f) == NULL) {
+ fmt[0] = 0;
+ return -1;
}
- }
- else if (*p == '\033' && *(p + 1) == '[' && is_ansi (p + 2)) {
- while (*p++ != 'm') /* skip ANSI sequence */
- ;
- }
- else if (*p == '\033' && *(p + 1) == ']'
- && check_attachment_marker ((char *) p) == 0) {
- while (*p++ != '\a') /* skip pseudo-ANSI sequence */
- ;
- } else {
- *fmt++ = *p++;
- }
+ *last_pos = ftello (f);
+ b_read = (int) (*last_pos - offset);
+ *buf_ready = 1;
+
+ /* incomplete mbyte characters trigger a segfault in regex processing for
+ * certain versions of glibc. Trim them if necessary. */
+ if (b_read == blen - 2)
+ b_read -= trim_incomplete_mbyte(buf, b_read);
+
+ /* copy "buf" to "fmt", but without bold and underline controls */
+ p = buf;
+ while (*p) {
+ if (*p == '\010' && (p > buf)) {
+ if (*(p + 1) == '_') /* underline */
+ p += 2;
+ else if (*(p + 1)) { /* bold or overstrike */
+ *(fmt - 1) = *(p + 1);
+ p += 2;
+ } else { /* ^H */
+ *fmt++ = *p++;
+ }
+ }
+ else if (*p == '\033' && *(p + 1) == '[' && is_ansi (p + 2)) {
+ while (*p++ != 'm') /* skip ANSI sequence */
+ ;
+ }
+ else if (*p == '\033' && *(p + 1) == ']'
+ && check_attachment_marker ((char *) p) == 0) {
+ while (*p++ != '\a') /* skip pseudo-ANSI sequence */
+ ;
+ } else {
+ *fmt++ = *p++;
+ }
+ }
+ *fmt = 0;
}
- *fmt = 0;
- }
- return b_read;
+ return b_read;
}
-#ifdef USE_NNTP
-#include <nntp/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)
- printw ("\\%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++)
- addch (' ');
+ waddch(main_w, ' ');
else
col = t;
}
break;
col += 2;
if (pa)
- printw ("^%c", ('@' + wc) & 0x7f);
+ wprintw(main_w, "^%c", ('@' + wc) & 0x7f);
}
else if (wc < 0x100) {
if (col + 4 > wrap_cols)
break;
col += 4;
if (pa)
- printw ("\\%03o", wc);
+ wprintw(main_w, "\\%03o", wc);
} else {
if (col + 1 > wrap_cols)
break;
++col;
if (pa)
- addch (CharsetReplacement);
+ waddch(main_w, CharsetReplacement);
}
}
*pspace = space;
&buf_ready) < 0) {
if (change_last)
(*last)--;
- return (-1);
+ return -1;
}
resolve_types ((char *) fmt, (char *) buf, *lineInfo, n, *last,
&buf_ready) < 0) {
if (change_last)
(*last)--;
- return (-1);
+ return -1;
}
regexec ((regex_t *) QuoteRegexp.rx, (char *) fmt, 1, pmatch, 0);
(*lineInfo)[n].quote = classify_quote (QuoteList,
&buf_ready) < 0) {
if (change_last)
(*last)--;
- return (-1);
+ return -1;
}
offset = 0;
if (!(flags & M_SHOW) && (*lineInfo)[n + 1].offset > 0) {
/* we've already scanned this line, so just exit */
- return (0);
+ return 0;
}
if ((flags & M_SHOWCOLOR) && *force_redraw && (*lineInfo)[n + 1].offset > 0) {
/* no need to try to display this line... */
- return (1); /* fake display */
+ return 1; /* fake display */
}
if ((b_read = fill_buffer (f, last_pos, (*lineInfo)[n].offset, buf, fmt,
sizeof (buf), &buf_ready)) < 0) {
if (change_last)
(*last)--;
- return (-1);
+ return -1;
}
/* now chose a good place to break the line */
/* display the line */
format_line (lineInfo, n, buf, flags, &a, cnt, &ch, &vch, &col, &special);
- /* avoid a bug in ncurses... */
-#ifndef USE_SLANG_CURSES
- if (col == 0) {
- SETCOLOR (MT_COLOR_NORMAL);
- addch (' ');
- }
-#endif
-
/* 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 clrtoeol() when you do addch('\n') so we have
- * to make sure to reset the color *after* that
+ * 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) {
m = ((*lineInfo)[n].continuation) ? ((*lineInfo)[n].syntax)[0].first : n;
else
def_color = ColorDefs[(*lineInfo)[m].type];
- attrset (def_color);
-#ifdef HAVE_BKGDSET
- bkgdset (def_color | ' ');
-#endif
+ wattrset(main_w, def_color);
+ wbkgdset(main_w, def_color | ' ');
}
-
- /* ncurses always wraps lines when you get to the right side of the
- * screen, but S-Lang seems to only wrap if the next character is *not*
- * a newline (grr!).
- */
-#ifndef USE_SLANG_CURSES
- if (col < COLS)
-#endif
- addch ('\n');
+ waddch(main_w, '\n');
/*
* reset the color back to normal. This *must* come after the
- * addch('\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 */
if (!(flags & M_SHOW))
flags = 0;
- return (flags);
+ return flags;
}
static int upNLines (int nlines, struct line_t *info, int cur, int hiding)
return cur;
}
-static struct mapping_t PagerHelp[] = {
- {N_("Exit"), OP_EXIT},
- {N_("PrevPg"), OP_PREV_PAGE},
- {N_("NextPg"), OP_NEXT_PAGE},
- {NULL, 0}
-};
-static struct mapping_t PagerHelpExtra[] = {
- {N_("View Attachm."), OP_VIEW_ATTACHMENTS},
- {N_("Del"), OP_DELETE},
- {N_("Reply"), OP_REPLY},
- {N_("Next"), OP_MAIN_NEXT_UNDELETED},
- {NULL, 0}
-};
-
-#ifdef USE_NNTP
-static struct mapping_t PagerNewsHelpExtra[] = {
- {N_("Post"), OP_POST},
- {N_("Followup"), OP_FOLLOWUP},
- {N_("Del"), OP_DELETE},
- {N_("Next"), OP_MAIN_NEXT_UNDELETED},
- {NULL, 0}
-};
-#endif
-
-
/* This pager is actually not so simple as it once was. It now operates in
two modes: one for viewing messages and the other for viewing help. These
can be distinguished by whether or not ``hdr'' is NULL. The ``hdr'' arg
{
static char searchbuf[STRING];
char buffer[LONG_STRING];
- char helpstr[STRING * 2];
- char tmphelp[STRING * 2];
int maxLine, lastLine = 0;
struct line_t *lineInfo;
struct q_class_t *QuoteList = NULL;
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;
if ((fp = fopen (fname, "r")) == NULL) {
mutt_perror (fname);
- return (-1);
+ return -1;
}
if (stat (fname, &sb) != 0) {
mutt_perror (fname);
m_fclose(&fp);
- return (-1);
+ return -1;
}
unlink (fname);
(lineInfo[i].syntax)[0].first = (lineInfo[i].syntax)[0].last = -1;
}
- mutt_compile_help (helpstr, sizeof(helpstr), MENU_PAGER, PagerHelp);
- if (IsHeader (extra)) {
- m_strcpy(tmphelp, sizeof(tmphelp), helpstr);
- mutt_compile_help (buffer, sizeof(buffer), MENU_PAGER,
-#ifdef USE_NNTP
- (Context
- && (Context->magic == M_NNTP)) ? PagerNewsHelpExtra :
-#endif
- PagerHelpExtra);
- snprintf (helpstr, sizeof (helpstr), "%s %s", tmphelp, buffer);
- }
- if (!InHelp) {
- m_strcpy(tmphelp, sizeof(tmphelp), helpstr);
- mutt_make_help (buffer, sizeof(buffer), _("Help"), MENU_PAGER, OP_HELP);
- snprintf (helpstr, sizeof(helpstr), "%s %s", tmphelp, buffer);
- }
-
while (ch != -1) {
mutt_curs_set (0);
imap_keepalive ();
if (redraw & REDRAW_FULL) {
- SETCOLOR (MT_COLOR_NORMAL);
- /* clear() doesn't optimize screen redraws */
- move (0, 0);
- clrtobot ();
+ 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);
- move (helpoffset, SW);
- mutt_paddstr (COLS-SW, helpstr);
- 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 defined (USE_SLANG_CURSES) || defined (HAVE_RESIZETERM)
if (Resize != NULL) {
if ((SearchCompiled = Resize->SearchCompiled)) {
REGCOMP
p_delete(&Resize);
}
-#endif
if (IsHeader (extra) && PagerIndexLines) {
if (pager_index == NULL) {
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 {
- move (bodyoffset, SW);
+ wmove(main_w, bodyoffset, 0);
curline = oldtopline = topline;
lines = 0;
force_redraw = 0;
&SearchRE) > 0)
lines++;
curline++;
- move (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) {
- clrtoeol ();
+ wclrtoeol(main_w);
if (option (OPTTILDE))
- addch ('~');
- addch ('\n');
+ waddch(main_w, '~');
+ waddch(main_w, '\n');
lines++;
- move (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);
}
- move(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);
- addstr (" -- (");
+ waddstr(main_w, " -- (");
if (last_pos < sb.st_size - 1)
- printw ("%d%%)", (int) (100 * last_offset / sb.st_size));
+ wprintw(main_w, "%d%%)", (int) (100 * last_offset / sb.st_size));
else
- addstr (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));
- move (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) {
- move(brailleLine+1, 0);
- brailleLine = -1;
- }
- } else
- move (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;
}
-#if defined (USE_SLANG_CURSES) || defined (HAVE_RESIZETERM)
- 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;
}
-#endif
- 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 *) 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 *) 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 *) 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;
}
break;
- case OP_VERSION:
- mutt_version ();
- break;
-
case OP_BUFFY_LIST:
if (option (OPTFORCEBUFFYCHECK))
buffy_check (1);
redraw = REDRAW_FULL;
break;
-
- case OP_MAIL_KEY:
- CHECK_MODE (IsHeader (extra));
- CHECK_ATTACH;
- ci_send_message (SENDKEY, NULL, NULL, extra->ctx, extra->hdr);
- redraw = REDRAW_FULL;
- break;
-
-
- case OP_FORGET_PASSPHRASE:
- crypt_forget_passphrase ();
- break;
-
case OP_EXTRACT_KEYS:
CHECK_MODE (IsHeader (extra));
crypt_extract_keys_from_messages (extra->hdr);
p_delete(&lineInfo);
if (pager_index)
mutt_menuDestroy (&pager_index);
- return (rc != -1 ? rc : 0);
+ return rc != -1 ? rc : 0;
}
+
+#undef CHECK_ATTACH
+#undef CHECK_READONLY
+#undef CHECK_MODE