diff options
author | Sebastien Helleu <flashcode@flashtux.org> | 2011-04-17 11:02:45 +0200 |
---|---|---|
committer | Sebastien Helleu <flashcode@flashtux.org> | 2011-04-17 11:02:45 +0200 |
commit | 7c6723f255ceea7a33e1b3421ce2b4af7583e12b (patch) | |
tree | 1d4c8296bb70ca31f45baf483396d1085bb6f2e1 /src/gui | |
parent | dd8d789fec1668c0cf50e44eeb13b1d1b0cf6ffe (diff) | |
download | weechat-7c6723f255ceea7a33e1b3421ce2b4af7583e12b.zip |
core: add automatic reset of color pairs, new option weechat.look.color_pairs_auto_reset
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/curses/gui-curses-color.c | 23 | ||||
-rw-r--r-- | src/gui/curses/gui-curses-main.c | 14 | ||||
-rw-r--r-- | src/gui/curses/gui-curses.h | 5 |
3 files changed, 39 insertions, 3 deletions
diff --git a/src/gui/curses/gui-curses-color.c b/src/gui/curses/gui-curses-color.c index 00c8e7133..c85961bfc 100644 --- a/src/gui/curses/gui-curses-color.c +++ b/src/gui/curses/gui-curses-color.c @@ -28,6 +28,7 @@ #include <stdlib.h> #include <string.h> #include <ctype.h> +#include <time.h> #include "../../core/weechat.h" #include "../../core/wee-config.h" @@ -80,6 +81,9 @@ int gui_color_num_pairs = 63; /* number of pairs used by WeeChat */ short *gui_color_pairs = NULL; /* table with pair for each fg+bg */ int gui_color_pairs_used = 0; /* number of pairs currently used */ int gui_color_warning_pairs_full = 0; /* warning displayed? */ +int gui_color_pairs_auto_reset = 0; /* auto reset of pairs needed */ +int gui_color_pairs_auto_reset_pending = 0; /* auto reset is pending */ +time_t gui_color_pairs_auto_reset_last = 0; /* time of last auto reset */ /* color buffer */ struct t_gui_buffer *gui_color_buffer = NULL; /* buffer with colors */ @@ -343,8 +347,10 @@ gui_color_get_pair (int fg, int bg) if (gui_color_pairs_used >= gui_color_num_pairs) { /* oh no, no more pair available! */ - if (!gui_color_warning_pairs_full) + if (!gui_color_warning_pairs_full + && (CONFIG_INTEGER(config_look_color_pairs_auto_reset) < 0)) { + /* display warning if auto reset of pairs is disabled */ hook_timer (NULL, 1, 0, 1, &gui_color_timer_warning_pairs_full, NULL); gui_color_warning_pairs_full = 1; @@ -356,6 +362,12 @@ gui_color_get_pair (int fg, int bg) gui_color_pairs_used++; gui_color_pairs[index] = gui_color_pairs_used; init_pair (gui_color_pairs_used, fg, bg); + if ((gui_color_num_pairs > 1) && !gui_color_pairs_auto_reset_pending + && (CONFIG_INTEGER(config_look_color_pairs_auto_reset) >= 0) + && (gui_color_num_pairs - gui_color_pairs_used <= CONFIG_INTEGER(config_look_color_pairs_auto_reset))) + { + gui_color_pairs_auto_reset = 1; + } gui_color_buffer_refresh_needed = 1; } @@ -812,6 +824,13 @@ gui_color_buffer_display () if (gui_color_buffer_extra_info) { + /* display time of last auto reset of color pairs */ + y++; + gui_chat_printf_y (gui_color_buffer, y++, + _("Last auto reset of pairs: %s"), + (gui_color_pairs_auto_reset_last == 0) ? + "-" : ctime (&gui_color_pairs_auto_reset_last)); + /* display WeeChat basic colors */ y++; gui_chat_printf_y (gui_color_buffer, y++, @@ -1074,7 +1093,7 @@ gui_color_buffer_input_cb (void *data, struct t_gui_buffer *buffer, } else if (string_strcasecmp (input_data, "z") == 0) { - gui_color_reset_pairs (buffer); + gui_color_reset_pairs (); } return WEECHAT_RC_OK; diff --git a/src/gui/curses/gui-curses-main.c b/src/gui/curses/gui-curses-main.c index e1626decd..550449f8c 100644 --- a/src/gui/curses/gui-curses-main.c +++ b/src/gui/curses/gui-curses-main.c @@ -30,6 +30,7 @@ #include <unistd.h> #include <string.h> #include <signal.h> +#include <time.h> #include "../../core/weechat.h" #include "../../core/wee-command.h" @@ -224,7 +225,7 @@ gui_main_refreshs () struct t_gui_window *ptr_win; struct t_gui_buffer *ptr_buffer; struct t_gui_bar *ptr_bar; - + /* refresh color buffer if needed */ if (gui_color_buffer_refresh_needed) { @@ -325,11 +326,22 @@ gui_main_loop () /* execute hook timers */ hook_timer_exec (); + + /* auto reset of color pairs */ + if (gui_color_pairs_auto_reset) + { + gui_color_reset_pairs (); + gui_color_pairs_auto_reset_last = time (NULL); + gui_color_pairs_auto_reset = 0; + gui_color_pairs_auto_reset_pending = 1; + } gui_main_refreshs (); if (gui_window_refresh_needed) gui_main_refreshs (); + gui_color_pairs_auto_reset_pending = 0; + /* wait for keyboard or network activity */ FD_ZERO (&read_fds); FD_ZERO (&write_fds); diff --git a/src/gui/curses/gui-curses.h b/src/gui/curses/gui-curses.h index 47ac40e97..7c5033912 100644 --- a/src/gui/curses/gui-curses.h +++ b/src/gui/curses/gui-curses.h @@ -20,6 +20,8 @@ #ifndef __WEECHAT_GUI_CURSES_H #define __WEECHAT_GUI_CURSES_H 1 +#include <time.h> + #ifdef HAVE_NCURSESW_CURSES_H #include <ncursesw/ncurses.h> #elif HAVE_NCURSES_H @@ -59,6 +61,9 @@ extern int gui_term_cols, gui_term_lines; extern struct t_gui_color gui_weechat_colors[]; extern int gui_color_term_colors; extern int gui_color_num_pairs; +extern int gui_color_pairs_auto_reset; +extern int gui_color_pairs_auto_reset_pending; +extern time_t gui_color_pairs_auto_reset_last; extern int gui_color_buffer_refresh_needed; /* color functions */ |