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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 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.
*/
#include "module.h"
#include "gui-windows.h"
int mirc_colors[] = { 15, 0, 1, 2, 12, 4, 5, 6, 14, 10, 3, 11, 9, 13, 8, 7 };
-static int scrollback_lines, scrollback_hours, scrollback_burst_remove;
+static int scrollback_lines, scrollback_time, scrollback_burst_remove;
-static int last_fg, last_bg, last_flags;
static int next_xpos, next_ypos;
static GHashTable *indent_functions;
LINE_REC *line;
time_t old_time;
- old_time = time(NULL)-(scrollback_hours*3600)+1;
+ old_time = time(NULL)-scrollback_time+1;
if (view->buffer->lines_count >=
scrollback_lines+scrollback_burst_remove) {
/* remove lines by line count */
scrollback_lines == 0) {
/* too new line, don't remove yet - also
if scrollback_lines is 0, we want to check
- only scrollback_hours setting. */
+ only scrollback_time setting. */
break;
}
textbuffer_view_remove_line(view, line);
if (flags & GUI_PRINT_FLAG_BLINK) *attr |= ATTR_BLINK;
}
-static void line_add_colors(TEXT_BUFFER_REC *buffer, LINE_REC **line,
- int fg, int bg, int flags)
-{
- unsigned char data[20];
- int pos;
-
- /* get the fg & bg command chars */
- fg = fg < 0 ? LINE_COLOR_DEFAULT : fg & 0x0f;
- bg = LINE_COLOR_BG | (bg < 0 ? LINE_COLOR_DEFAULT : bg & 0x0f);
- if (flags & GUI_PRINT_FLAG_BOLD)
- fg |= LINE_COLOR_BOLD;
- if (flags & GUI_PRINT_FLAG_BLINK)
- bg |= LINE_COLOR_BLINK;
-
- pos = 0;
- if (fg != last_fg) {
- last_fg = fg;
- data[pos++] = 0;
- data[pos++] = fg == 0 ? LINE_CMD_COLOR0 : fg;
- }
- if (bg != last_bg) {
- last_bg = bg;
- data[pos++] = 0;
- data[pos++] = bg;
- }
-
- if ((flags & GUI_PRINT_FLAG_UNDERLINE) != (last_flags & GUI_PRINT_FLAG_UNDERLINE)) {
- data[pos++] = 0;
- data[pos++] = LINE_CMD_UNDERLINE;
- }
- if ((flags & GUI_PRINT_FLAG_REVERSE) != (last_flags & GUI_PRINT_FLAG_REVERSE)) {
- data[pos++] = 0;
- data[pos++] = LINE_CMD_REVERSE;
- }
- if (flags & GUI_PRINT_FLAG_INDENT) {
- data[pos++] = 0;
- data[pos++] = LINE_CMD_INDENT;
- }
-
- if (pos > 0)
- *line = textbuffer_insert(buffer, *line, data, pos, NULL);
-
- last_flags = flags;
-}
-
-static void line_add_indent_func(TEXT_BUFFER_REC *buffer, LINE_REC **line,
- const char *function)
-{
- GSList *list;
- unsigned char data[1+sizeof(INDENT_FUNC)];
-
- list = g_hash_table_lookup(indent_functions, function);
- if (list != NULL) {
- data[0] = LINE_CMD_INDENT_FUNC;
- memcpy(data+1, list->data, sizeof(INDENT_FUNC));
- *line = textbuffer_insert(buffer, *line,
- data, sizeof(data), NULL);
- }
-}
-
static void view_add_eol(TEXT_BUFFER_VIEW_REC *view, LINE_REC **line)
{
static const unsigned char eol[] = { 0, LINE_CMD_EOL };
if (flags & GUI_PRINT_FLAG_CLRTOEOL)
term_clrtoeol(root_window);
term_addstr(root_window, str);
- next_xpos += strlen(str);
+ next_xpos += strlen(str); /* FIXME utf8 or big5 */
return;
}
insert_after = gui->use_insert_after ?
gui->insert_after : view->buffer->cur_line;
- if (flags & GUI_PRINT_FLAG_NEWLINE)
+ if (flags & GUI_PRINT_FLAG_NEWLINE) {
view_add_eol(view, &insert_after);
- line_add_colors(view->buffer, &insert_after, fg, bg, flags);
-
- if (flags & GUI_PRINT_FLAG_INDENT_FUNC) {
- /* specify the indentation function */
- line_add_indent_func(view->buffer, &insert_after, str);
- } else {
- insert_after = textbuffer_insert(view->buffer, insert_after,
- (unsigned char *) str,
- strlen(str), &lineinfo);
}
+ textbuffer_line_add_colors(view->buffer, &insert_after, fg, bg, flags);
+
+ insert_after = textbuffer_insert(view->buffer, insert_after,
+ (unsigned char *) str,
+ strlen(str), &lineinfo);
if (gui->use_insert_after)
gui->insert_after = insert_after;
}
TEXT_BUFFER_VIEW_REC *view;
LINE_REC *insert_after;
- last_fg = last_bg = -1;
- last_flags = 0;
-
view = WINDOW_GUI(window)->view;
insert_after = WINDOW_GUI(window)->use_insert_after ?
WINDOW_GUI(window)->insert_after : view->buffer->cur_line;
static void read_settings(void)
{
scrollback_lines = settings_get_int("scrollback_lines");
- scrollback_hours = settings_get_int("scrollback_hours");
+ scrollback_time = settings_get_time("scrollback_time")/1000;
scrollback_burst_remove = settings_get_int("scrollback_burst_remove");
}
(GCompareFunc) g_str_equal);
settings_add_int("history", "scrollback_lines", 500);
- settings_add_int("history", "scrollback_hours", 24);
+ settings_add_time("history", "scrollback_time", "1day");
settings_add_int("history", "scrollback_burst_remove", 10);
signal_add("gui print text", (SIGNAL_FUNC) sig_gui_print_text);