/*
- * Copyright (C) 1998-2013 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 1998-2014 Andre Noll <maan@systemlinux.org>
*
* Licensed under the GPL v2. For licencing details see COPYING.
*/
static int curses_active;
static pid_t cmd_pid;
-static int command_fds[2];
+static int command_fds[2] = {-1, -1};
static int stat_pipe = -1;
static struct gui_args_info conf;
void (*handler)(void);
};
-struct stat_item {
- char name[MAXLINE];
- char prefix[MAXLINE];
- char postfix[MAXLINE];
- unsigned y;
- unsigned x;
- unsigned len;
- int fg, bg;
- int align;
- char content[MAXLINE];
-};
-
static struct gui_theme theme;
static int _argc;
static void add_spaces(WINDOW* win, unsigned int num)
{
char space[] = " ";
- unsigned sz = sizeof(space);
+ unsigned sz = sizeof(space) - 1; /* number of spaces */
while (num >= sz) {
waddstr(win, space);
xvasprintf(&msg, fmt, ap);
va_end(ap);
wmove(in.win, 0, 0);
- align_str(in.win, msg, sb.cols, LEFT);
+ align_str(in.win, msg, in.cols, LEFT);
free(msg);
wrefresh(in.win);
}
/*
* get the number of the oldest rbe that is (partially) visible. On return,
- * lines contains the sum of the number of lines of all visable entries. If the
+ * lines contains the sum of the number of lines of all visible entries. If the
* first one is only partially visible, lines is greater than bot.lines.
*/
static int first_visible_rbe(unsigned *lines)
static int add_output_line(char *line, void *data)
{
int color = *(int *)data? COLOR_ERRMSG : COLOR_OUTPUT;
+
if (!curses_active)
return 1;
rb_add_entry(color, para_strdup(line));
static int loglevel;
-__printf_2_3 void curses_log(int ll, const char *fmt,...)
+static __printf_2_3 void curses_log(int ll, const char *fmt,...)
{
int color;
char *msg;
para_install_sighandler(SIGCHLD);
para_install_sighandler(SIGWINCH);
para_install_sighandler(SIGUSR1);
- para_sigaction(SIGHUP, SIG_IGN);
}
/* kill every process in the process group and exit */
{
if (loglevel > LL_NOTICE)
return;
- outputf(COLOR_WELCOME, "Welcome to para_gui " PACKAGE_VERSION
- " \"" CODENAME "\". Theme: %s", theme.name);
+ outputf(COLOR_WELCOME, "Welcome to %s. Theme: %s",
+ version_single_line("gui"), theme.name);
wclrtoeol(bot.win);
}
static void init_curses(void)
{
curses_active = 1;
- if (top.win && refresh() == ERR) /* refesh is really needed */
+ if (top.win && refresh() == ERR) /* refresh is really needed */
msg_n_exit(EXIT_FAILURE, "refresh() failed\n");
if (LINES < theme.lines_min || COLS < theme.cols_min)
msg_n_exit(EXIT_FAILURE, "Error: Terminal (%dx%d) too small"
{
int ret;
pid_t pid;
+
reap_next_child:
ret = para_reap_child(&pid);
if (ret <= 0)
close(command_fds[i]);
command_fds[i] = -1;
flags[i] = 0;
+ cbo[i] = 0;
if (command_fds[!i] < 0) /* both fds closed */
return 0;
}
{
unsigned lines_total, filled = ringbuffer_filled(bot_win_rb);
int first_rbe = first_visible_rbe(&lines_total);
+
print_in_bar(COLOR_MSG, "scrolled view: %d-%d/%d\n", filled - first_rbe,
filled - scroll_position, ringbuffer_filled(bot_win_rb));
}
{
unsigned lines = 0;
int i = scroll_position;
+
while (lines < bot.lines && --i > 0) {
struct rb_entry *rbe = ringbuffer_get(bot_win_rb, i);
if (!rbe)
*/
static void com_reread_conf(void)
{
- char *cf =configfile_exists();
+ char *cf = configfile_exists();
struct gui_cmdline_parser_params params = {
.override = 1,
.initialize = 1,
}
PARA_INFO_LOG("rereading command line options and config file");
gui_cmdline_parser_ext(_argc, _argv, &conf, ¶ms);
+ /*
+ * Despite .print_errors is set to 0, gengetopt will print to stderr
+ * anyway, and exit on errors. So we have to shutdown curses first.
+ */
+ shutdown_curses();
gui_cmdline_parser_config_file(cf, &conf, ¶ms);
+ init_curses();
PARA_NOTICE_LOG("config file reloaded");
if (check_key_map_args() < 0)
finish(EXIT_FAILURE);
static void com_version(void)
{
- print_in_bar(COLOR_MSG, "para_gui " PACKAGE_VERSION " \""
- CODENAME "\"");
+ print_in_bar(COLOR_MSG, "%s", version_single_line("gui"));
}
__noreturn static void com_quit(void)
{
int i;
- /* first check user's key bindings */
+ /* first check user-defined key bindings */
for (i = 0; i < conf.key_map_given; ++i) {
char *tmp, *handler, *arg;