Rocco Rutte:
[apps/madmutt.git] / mutt_curses.h
1 /*
2  * Copyright notice from original mutt:
3  * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
4  * Copyright (C) 2004 g10 Code GmbH
5  *
6  * This file is part of mutt-ng, see http://www.muttng.org/.
7  * It's licensed under the GNU General Public License,
8  * please see the file GPL in the top level source directory.
9  */
10
11 #ifdef USE_SLANG_CURSES
12
13 #ifndef unix                    /* this symbol is not defined by the hp-ux compiler (sigh) */
14 #define unix
15 #endif /* unix */
16
17 #include "slcurses.h"
18
19 #define KEY_DC SL_KEY_DELETE
20 #define KEY_IC SL_KEY_IC
21
22 /*
23  * ncurses and SLang seem to send different characters when the Enter key is
24  * pressed, so define some macros to properly detect the Enter key.
25  */
26 #define M_ENTER_C '\r'
27 #define M_ENTER_S "\r"
28
29 #else
30
31 #ifdef HAVE_NCURSESW_NCURSES_H
32 #include <ncursesw/ncurses.h>
33 #else
34 #ifdef HAVE_NCURSES_H
35 #include <ncurses.h>
36 #else
37 #include <curses.h>
38 #endif
39 #endif
40
41 #define M_ENTER_C '\n'
42 #define M_ENTER_S "\n"
43
44 #endif /* USE_SLANG_CURSES */
45
46 /* AIX defines ``lines'' in <term.h>, but it's used as a var name in
47  * various places in Mutt
48  */
49 #ifdef lines
50 #undef lines
51 #endif /* lines */
52
53 #define CLEARLINE_WIN(x) move(x,SidebarWidth), clrtoeol()
54 #define CLEARLINE(x) move(x,0), clrtoeol()
55 #define CENTERLINE(x,y) move(y, (COLS-strlen(x))/2), addstr(x)
56 #define BEEP() do { if (option (OPTBEEP)) beep(); } while (0)
57
58 #if ! (defined(USE_SLANG_CURSES) || defined(HAVE_CURS_SET))
59 #define curs_set(x)
60 #endif
61
62 #if !defined(USE_SLANG_CURSES) && defined(HAVE_BKGDSET)
63 #define BKGDSET(x) bkgdset (ColorDefs[x] | ' ')
64 #else
65 #define BKGDSET(x)
66 #endif
67
68 #if (defined(USE_SLANG_CURSES) || defined(HAVE_CURS_SET))
69 void mutt_curs_set (int);
70 #else
71 #define mutt_curs_set(x)
72 #endif
73 #define PAGELEN (LINES-3)
74
75 #define ctrl(c) ((c)-'@')
76
77 #ifdef KEY_ENTER
78 #define CI_is_return(c) ((c) == '\r' || (c) == '\n' || (c) == KEY_ENTER)
79 #else
80 #define CI_is_return(c) ((c) == '\r' || (c) == '\n')
81 #endif
82
83 event_t mutt_getch (void);
84
85 void mutt_endwin (const char *);
86 void mutt_flushinp (void);
87 void mutt_refresh (void);
88 void mutt_resize_screen (void);
89 void mutt_ungetch (int, int);
90 void mutt_need_hard_redraw (void);
91
92 /* ----------------------------------------------------------------------------
93  * Support for color
94  */
95
96 enum {
97   MT_COLOR_HDEFAULT = 0,
98   MT_COLOR_QUOTED,
99   MT_COLOR_SIGNATURE,
100   MT_COLOR_INDICATOR,
101   MT_COLOR_STATUS,
102   MT_COLOR_TREE,
103   MT_COLOR_NORMAL,
104   MT_COLOR_ERROR,
105   MT_COLOR_TILDE,
106   MT_COLOR_MARKERS,
107   MT_COLOR_BODY,
108   MT_COLOR_HEADER,
109   MT_COLOR_MESSAGE,
110   MT_COLOR_ATTACHMENT,
111   MT_COLOR_SEARCH,
112   MT_COLOR_BOLD,
113   MT_COLOR_SIDEBAR,
114   MT_COLOR_UNDERLINE,
115   MT_COLOR_INDEX,
116   MT_COLOR_NEW,
117   MT_COLOR_FLAGGED,
118   MT_COLOR_MAX
119 };
120
121 typedef struct color_line {
122   regex_t rx;
123   char *pattern;
124   pattern_t *color_pattern;     /* compiled pattern to speed up index color
125                                    calculation */
126   short fg;
127   short bg;
128   int pair;
129   struct color_line *next;
130 } COLOR_LINE;
131
132 extern int *ColorQuote;
133 extern int ColorQuoteUsed;
134 extern int ColorDefs[];
135 extern COLOR_LINE *ColorHdrList;
136 extern COLOR_LINE *ColorBodyList;
137 extern COLOR_LINE *ColorIndexList;
138
139 void ci_init_color (void);
140 void ci_start_color (void);
141
142 #define SETCOLOR(X) attrset(ColorDefs[X])
143 #define ADDCOLOR(X) attron(ColorDefs[X])
144
145 #define MAYBE_REDRAW(x) if (option (OPTNEEDREDRAW)) { unset_option (OPTNEEDREDRAW); x = REDRAW_FULL; }
146
147 /* ----------------------------------------------------------------------------
148  * These are here to avoid compiler warnings with -Wall under SunOS 4.1.x
149  */
150
151 #if !defined(STDC_HEADERS) && !defined(NCURSES_VERSION) && !defined(USE_SLANG_CURSES)
152 extern int endwin ();
153 extern int printw ();
154 extern int beep ();
155 extern int isendwin ();
156 extern int w32addch ();
157 extern int keypad ();
158 extern int wclrtobot ();
159 extern int mvprintw ();
160 extern int getcurx ();
161 extern int getcury ();
162 extern int noecho ();
163 extern int wdelch ();
164 extern int wrefresh ();
165 extern int wmove ();
166 extern int wclear ();
167 extern int waddstr ();
168 extern int wclrtoeol ();
169 #endif