1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272
|
/*
* Copyright (C) 1996-2000,2012 Michael R. Elkins <me@mutt.org>
* Copyright (C) 2004 g10 Code GmbH
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#ifndef _MUTT_CURSES_H_
#define _MUTT_CURSES_H_ 1
#ifdef USE_SLANG_CURSES
#ifndef unix /* this symbol is not defined by the hp-ux compiler (sigh) */
#define unix
#endif /* unix */
#include <slang.h> /* in addition to slcurses.h, we need slang.h for the version
number to test for 2.x having UTF-8 support in main.c */
#include <slcurses.h>
#define KEY_DC SL_KEY_DELETE
#define KEY_IC SL_KEY_IC
/*
* ncurses and SLang seem to send different characters when the Enter key is
* pressed, so define some macros to properly detect the Enter key.
*/
#define MUTT_ENTER_C '\r'
#define MUTT_ENTER_S "\r"
#else /* USE_SLANG_CURSES */
#if HAVE_NCURSESW_NCURSES_H
# include <ncursesw/ncurses.h>
#elif HAVE_NCURSES_NCURSES_H
# include <ncurses/ncurses.h>
#elif HAVE_NCURSES_H
# include <ncurses.h>
#else
# include <curses.h>
#endif
#define MUTT_ENTER_C '\n'
#define MUTT_ENTER_S "\n"
#endif /* USE_SLANG_CURSES */
/* AIX defines ``lines'' in <term.h>, but it's used as a var name in
* various places in Mutt
*/
#ifdef lines
#undef lines
#endif /* lines */
#define CLEARLINE(win,x) mutt_window_clearline(win, x)
#define CENTERLINE(win,x,y) mutt_window_move(win, y, (win->cols-strlen(x))/2), addstr(x)
#define BEEP() do { if (option (OPTBEEP)) beep(); } while (0)
#if ! (defined(USE_SLANG_CURSES) || defined(HAVE_CURS_SET))
#define curs_set(x)
#endif
#if (defined(USE_SLANG_CURSES) || defined(HAVE_CURS_SET))
void mutt_curs_set (int);
#else
#define mutt_curs_set(x)
#endif
#define ctrl(c) ((c)-'@')
#ifdef KEY_ENTER
#define CI_is_return(c) ((c) == '\r' || (c) == '\n' || (c) == KEY_ENTER)
#else
#define CI_is_return(c) ((c) == '\r' || (c) == '\n')
#endif
extern int MuttGetchTimeout;
event_t mutt_getch (void);
void mutt_getch_timeout (int);
void mutt_endwin (const char *);
void mutt_flushinp (void);
void mutt_refresh (void);
void mutt_resize_screen (void);
void mutt_unget_event (int, int);
void mutt_unget_string (char *);
void mutt_push_macro_event (int, int);
void mutt_flush_macro_to_endcond (void);
void mutt_flush_unget_to_endcond (void);
void mutt_need_hard_redraw (void);
/* ----------------------------------------------------------------------------
* Support for color
*/
enum
{
MT_COLOR_HDEFAULT = 0,
MT_COLOR_QUOTED,
MT_COLOR_SIGNATURE,
MT_COLOR_INDICATOR,
MT_COLOR_STATUS,
MT_COLOR_TREE,
MT_COLOR_NORMAL,
MT_COLOR_ERROR,
MT_COLOR_TILDE,
MT_COLOR_MARKERS,
MT_COLOR_BODY,
MT_COLOR_HEADER,
MT_COLOR_MESSAGE,
MT_COLOR_ATTACHMENT,
MT_COLOR_SEARCH,
MT_COLOR_BOLD,
MT_COLOR_UNDERLINE,
MT_COLOR_INDEX,
MT_COLOR_PROMPT,
#ifdef USE_SIDEBAR
MT_COLOR_DIVIDER,
MT_COLOR_FLAGGED,
MT_COLOR_HIGHLIGHT,
MT_COLOR_NEW,
MT_COLOR_SB_INDICATOR,
MT_COLOR_SB_SPOOLFILE,
#endif
MT_COLOR_COMPOSE_HEADER,
MT_COLOR_COMPOSE_SECURITY_ENCRYPT,
MT_COLOR_COMPOSE_SECURITY_SIGN,
MT_COLOR_COMPOSE_SECURITY_BOTH,
MT_COLOR_COMPOSE_SECURITY_NONE,
MT_COLOR_MAX
};
typedef struct color_line
{
regex_t rx;
char *pattern;
pattern_t *color_pattern; /* compiled pattern to speed up index color
calculation */
short fg;
short bg;
int pair;
struct color_line *next;
unsigned int stop_matching : 1; /* used by the pager for body patterns,
to prevent the color from being retried
once it fails. */
} COLOR_LINE;
#define MUTT_PROGRESS_SIZE (1<<0) /* traffic-based progress */
#define MUTT_PROGRESS_MSG (1<<1) /* message-based progress */
typedef struct
{
unsigned short inc;
unsigned short flags;
const char* msg;
long pos;
long size;
unsigned long long timestamp_millis;
char sizestr[SHORT_STRING];
} progress_t;
void mutt_progress_init (progress_t* progress, const char *msg,
unsigned short flags, unsigned short inc,
long size);
/* If percent is positive, it is displayed as percentage, otherwise
* percentage is calculated from progress->size and pos if progress
* was initialized with positive size, otherwise no percentage is shown */
void mutt_progress_update (progress_t* progress, long pos, int percent);
/* Windows for different parts of the screen */
typedef struct
{
int rows;
int cols;
int row_offset;
int col_offset;
} mutt_window_t;
extern mutt_window_t *MuttHelpWindow;
extern mutt_window_t *MuttIndexWindow;
extern mutt_window_t *MuttStatusWindow;
extern mutt_window_t *MuttMessageWindow;
#ifdef USE_SIDEBAR
extern mutt_window_t *MuttSidebarWindow;
#endif
void mutt_init_windows (void);
void mutt_free_windows (void);
void mutt_reflow_windows (void);
int mutt_window_move (mutt_window_t *, int row, int col);
int mutt_window_mvaddch (mutt_window_t *, int row, int col, const chtype ch);
int mutt_window_mvaddstr (mutt_window_t *, int row, int col, const char *str);
int mutt_window_mvprintw (mutt_window_t *, int row, int col, const char *fmt, ...);
void mutt_window_clrtoeol (mutt_window_t *);
void mutt_window_clearline (mutt_window_t *, int row);
void mutt_window_getyx (mutt_window_t *, int *y, int *x);
static inline int mutt_window_wrap_cols(mutt_window_t *win, short wrap)
{
if (wrap < 0)
return win->cols > -wrap ? win->cols + wrap : win->cols;
else if (wrap)
return wrap < win->cols ? wrap : win->cols;
else
return win->cols;
}
extern int *ColorQuote;
extern int ColorQuoteUsed;
extern int ColorDefs[];
extern COLOR_LINE *ColorHdrList;
extern COLOR_LINE *ColorBodyList;
extern COLOR_LINE *ColorIndexList;
void ci_init_color (void);
void ci_start_color (void);
/* If the system has bkgdset() use it rather than attrset() so that the clr*()
* functions will properly set the background attributes all the way to the
* right column.
*/
#if defined(HAVE_BKGDSET)
#define SETCOLOR(X) bkgdset(ColorDefs[X] | ' ')
#define ATTRSET(X) bkgdset(X | ' ')
#else
#define SETCOLOR(X) attrset(ColorDefs[X])
#define ATTRSET attrset
#endif
/* reset the color to the normal terminal color as defined by 'color normal ...' */
#define NORMAL_COLOR SETCOLOR(MT_COLOR_NORMAL)
/* ----------------------------------------------------------------------------
* These are here to avoid compiler warnings with -Wall under SunOS 4.1.x
*/
#if !defined(STDC_HEADERS) && !defined(NCURSES_VERSION) && !defined(USE_SLANG_CURSES)
extern int endwin();
extern int printw();
extern int beep();
extern int isendwin();
extern int w32addch();
extern int keypad();
extern int wclrtobot();
extern int mvprintw();
extern int getcurx();
extern int getcury();
extern int noecho();
extern int wdelch();
extern int wrefresh();
extern int wmove();
extern int wclear();
extern int waddstr();
extern int wclrtoeol();
#endif
#endif /* _MUTT_CURSES_H_ */
|