+ if(strcmp(buffer, "") != 0) {
+ char *s = buffer;
+ if(zsh_history && *s == ':') {
+ while(*s && *s != ';') s++;
+ if(*s == ';') s++;
+ }
+
+ if(bash_history && (*s == ' ' || (*s >= '0' && *s <= '9'))) {
+ while(*s == ' ' || (*s >= '0' && *s <= '9')) s++;
+ }
+
+ /*
+
+ // This is supposed to remove any duplicates, not only
+ // successive ones. However, it is O(N^2), we should use
+ // hash-codes
+
+ int keep = 1;
+
+ if(remove_duplicates) {
+ for(int k = 0; keep && k < nb_lines; k++) {
+ keep &= strcmp(lines[k], s);
+ }
+ }
+
+ if(keep) {
+ lines[nb_lines] = new char[strlen(s) + 1];
+ strcpy(lines[nb_lines], s);
+ nb_lines++;
+ }
+
+ */
+
+ if(!remove_duplicates || nb_lines == 0 || strcmp(lines[nb_lines - 1], s)) {
+ lines[nb_lines] = new char[strlen(s) + 1];
+ strcpy(lines[nb_lines], s);
+ nb_lines++;
+ }
+ }
+ }
+
+ if(inverse_order) {
+ for(int i = 0; i < nb_lines/2; i++) {
+ char *s = lines[nb_lines - 1 - i];
+ lines[nb_lines - 1 - i] = lines[i];
+ lines[i] = s;
+ }