#include <lib-lib/lib-lib.h>
#include <termios.h>
-#ifdef HAVE_LANGINFO_YESEXPR
-#include <langinfo.h>
+#ifdef HAVE_SYS_IOCTL_H
+# include <sys/ioctl.h>
+#elif defined(HAVE_IOCTL_H)
+# include <ioctl.h>
#endif
+#include <langinfo.h>
+#include <lib-lua/lib-lua.h>
#include <lib-sys/unix.h>
#include <lib-sys/mutt_signal.h>
void mutt_refresh (void)
{
- /* don't refresh when we are waiting for a child. */
- if (option (OPTKEEPQUIET))
- return;
+ /* don't refresh when we are waiting for a child. */
+ if (option (OPTKEEPQUIET))
+ return;
- /* don't refresh in the middle of macros unless necessary */
- if (UngetCount && !option (OPTFORCEREFRESH))
- return;
+ /* don't refresh in the middle of macros unless necessary */
+ if (UngetCount && !option (OPTFORCEREFRESH))
+ return;
- /* else */
- refresh ();
+ /* else */
+ refresh ();
}
-/* Make sure that the next refresh does a full refresh. This could be
- optmized by not doing it at all if DISPLAY is set as this might
- indicate that a GUI based pinentry was used. Having an option to
- customize this is of course the Mutt way. */
void mutt_need_hard_redraw (void)
{
- if (!getenv ("DISPLAY")) {
keypad (stdscr, TRUE);
clearok (stdscr, TRUE);
set_option (OPTNEEDREDRAW);
- }
}
event_t mutt_getch (void)
if (ch == ERR)
return err;
- if ((ch & 0x80) && option (OPTMETAKEY)) {
- /* send ALT-x as ESC-x */
- ch &= ~0x80;
- mutt_ungetch (ch, 0);
- ret.ch = '\033';
- ret.op = 0;
- return ret;
- }
-
ret.ch = ch;
ret.op = 0;
return (ch == ctrl ('G') ? err : ret);
CLEARLINE (LINES - 1);
}
-void mutt_edit_file (const char *editor, const char *data)
+void mutt_edit_file(const char *data)
{
char cmd[LONG_STRING];
mutt_endwin (NULL);
- m_quotefile_fmt(cmd, sizeof (cmd), editor, data);
+ m_quotefile_fmt(cmd, sizeof (cmd), mod_core.editor, data);
if (mutt_system (cmd) == -1)
mutt_error (_("Error running \"%s\"!"), cmd);
keypad (stdscr, TRUE);
int mutt_yesorno (const char *msg, int def)
{
event_t ch;
- char *yes = _("yes");
- char *no = _("no");
+ const char *yes = _("yes");
+ const char *no = _("no");
char *answer_string;
ssize_t answer_string_len;
-
-#ifdef HAVE_LANGINFO_YESEXPR
char *expr;
regex_t reyes;
regex_t reno;
!regcomp (&reyes, expr, REG_NOSUB | REG_EXTENDED);
reno_ok = (expr = nl_langinfo (NOEXPR)) && expr[0] == '^' &&
!regcomp (&reno, expr, REG_NOSUB | REG_EXTENDED);
-#endif
CLEARLINE (LINES - 1);
break;
}
-#ifdef HAVE_LANGINFO_YESEXPR
answer[0] = ch.ch;
if (reyes_ok ? (regexec (&reyes, answer, 0, 0, 0) == 0) : tolower (ch.ch) == *yes)
-#else
- if (tolower (ch.ch) == *yes)
-#endif
{
def = M_YES;
break;
}
else if (
-#ifdef HAVE_LANGINFO_YESEXPR
reno_ok ? (regexec (&reno, answer, 0, 0, 0) == 0) :
-#endif
(tolower (ch.ch) == *no)) {
def = M_NO;
break;
}
}
-#ifdef HAVE_LANGINFO_YESEXPR
if (reyes_ok)
regfree (&reyes);
if (reno_ok)
regfree (&reno);
-#endif
if (def != -1) {
addstr ((char *) (def == M_YES ? yes : no));
return (ch);
}
-int mutt_do_pager (const char *banner,
- const char *tempfile, int do_color, pager_t * info)
-{
- int rc;
-
- if (!Pager || m_strcmp(Pager, "builtin") == 0)
- rc = mutt_pager (banner, tempfile, do_color, info);
- else {
- char cmd[STRING];
-
- mutt_endwin (NULL);
- m_quotefile_fmt(cmd, sizeof (cmd), Pager, tempfile);
- if (mutt_system (cmd) == -1) {
- mutt_error (_("Error running \"%s\"!"), cmd);
- rc = -1;
- }
- else
- rc = 0;
- mutt_unlink (tempfile);
- }
-
- return rc;
-}
-
int _mutt_enter_fname (const char *prompt, char *buf, ssize_t blen,
int *redraw, int buffy, int multiple, char ***files,
int *numfiles)
else if (ch.ch == '?') {
mutt_refresh ();
buf[0] = 0;
- _mutt_select_file (buf, blen, M_SEL_FOLDER | (multiple ? M_SEL_MULTI : 0),
- files, numfiles);
+ mutt_select_file (buf, blen, M_SEL_FOLDER | (multiple ? M_SEL_MULTI : 0),
+ files, numfiles);
*redraw = REDRAW_FULL;
}
else {
flushinp ();
}
-#if (defined(USE_SLANG_CURSES) || defined(HAVE_CURS_SET))
/* The argument can take 3 values:
* -1: restore the value of the last call
* 0: make the cursor invisible
curs_set (2); /* cvvis */
}
}
-#endif
-int mutt_multi_choice (char *prompt, char *letters)
+int mutt_multi_choice (const char *prompt, const char *letters)
{
event_t ch;
int choice;
addch (' ');
}
+/* this routine should be called after receiving SIGWINCH */
+void mutt_resize_screen (void)
+{
+ char *cp;
+ int fd;
+ struct winsize w;
+
+ int rows, cols;
+
+ rows = -1;
+ cols = -1;
+ if ((fd = open ("/dev/tty", O_RDONLY)) != -1) {
+ if (ioctl (fd, TIOCGWINSZ, &w) != -1) {
+ rows = w.ws_row;
+ cols = w.ws_col;
+ }
+ close (fd);
+ }
+ if (rows <= 0) {
+ if ((cp = getenv ("LINES")) != NULL) {
+ rows = atoi (cp);
+ }
+ else
+ rows = 24;
+ }
+ if (cols <= 0) {
+ if ((cp = getenv ("COLUMNS")) != NULL)
+ cols = atoi (cp);
+ else
+ cols = 80;
+ }
+ resizeterm (rows, cols);
+}