# HG changeset patch # User Mikael Berthe # Date 1168783225 -3600 # Node ID fddf2fef7b83dcce10b83a093ccc513da5b10ccb # Parent 771eb6aa2d4181af5f4687efc7815d29f46c9e70 Add option "cmdhistory_lines" diff -r 771eb6aa2d41 -r fddf2fef7b83 mcabber/mcabberrc.example --- a/mcabber/mcabberrc.example Sat Jan 13 14:38:07 2007 +0100 +++ b/mcabber/mcabberrc.example Sun Jan 14 15:00:25 2007 +0100 @@ -76,6 +76,11 @@ # de, fr, nl, pl, ru, uk. #set lang = en +# History +# Number of lines to remember for the command line history +# (default: 0, unlimited). +set cmdhistory_lines = 250 + # Set hide_offline_buddies to 1 to display only connected buddies # in the roster. #set hide_offline_buddies = 0 diff -r 771eb6aa2d41 -r fddf2fef7b83 mcabber/src/screen.c --- a/mcabber/src/screen.c Sat Jan 13 14:38:07 2007 +0100 +++ b/mcabber/src/screen.c Sun Jan 14 15:00:25 2007 +0100 @@ -97,6 +97,7 @@ static int completion_started; static GList *cmdhisto; static GList *cmdhisto_cur; +static guint cmdhisto_nblines; static char cmdhisto_backup[INPUTLINE_LENGTH+1]; static int chatstate; /* (0=active, 1=composing, 2=paused) */ @@ -2093,9 +2094,27 @@ // Add a line to the inputLine history inline void scr_cmdhisto_addline(char *line) { - if (!line || !*line) return; + int max_histo_lines; + + if (!line || !*line) + return; + + max_histo_lines = settings_opt_get_int("cmdhistory_lines"); + + if (max_histo_lines < 0) + max_histo_lines = 1; + + if (max_histo_lines) + while (cmdhisto_nblines >= (guint)max_histo_lines) { + if (cmdhisto_cur && cmdhisto_cur == cmdhisto) + break; + g_free(cmdhisto->data); + cmdhisto = g_list_delete_link(cmdhisto, cmdhisto); + cmdhisto_nblines--; + } cmdhisto = g_list_append(cmdhisto, g_strdup(line)); + cmdhisto_nblines++; } // scr_cmdhisto_prev()