projects
/
selector.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Added a test to check we do have a tty (and not a pipe in).
[selector.git]
/
selector.cc
diff --git
a/selector.cc
b/selector.cc
index
2725c2b
..
cfb583e
100644
(file)
--- a/
selector.cc
+++ b/
selector.cc
@@
-114,13
+114,17
@@
int test_and_add(char *new_string, int new_index,
code = code % hash_table_size;
while(hash_table[code] >= 0) {
code = code % hash_table_size;
while(hash_table[code] >= 0) {
- if(strcmp(new_string, strings[hash_table[code]]) == 0) return 1;
+ if(strcmp(new_string, strings[hash_table[code]]) == 0) {
+ int result = hash_table[code];
+ hash_table[code] = new_index;
+ return result;
+ }
code = (code + 1) % hash_table_size;
}
hash_table[code] = new_index;
code = (code + 1) % hash_table_size;
}
hash_table[code] = new_index;
- return
0
;
+ return
-1
;
}
//////////////////////////////////////////////////////////////////////
}
//////////////////////////////////////////////////////////////////////
@@
-384,6
+388,12
@@
void update_screen(int *current_line, int *temporary_line, int motion,
//////////////////////////////////////////////////////////////////////
int main(int argc, char **argv) {
//////////////////////////////////////////////////////////////////////
int main(int argc, char **argv) {
+
+ if(!ttyname(STDIN_FILENO)) {
+ cerr << "Error: the standard input is not a tty." << endl;
+ exit(1);
+ }
+
char buffer[buffer_size];
int color_fg_modeline, color_bg_modeline;
int color_fg_highlight, color_bg_highlight;
char buffer[buffer_size];
int color_fg_modeline, color_bg_modeline;
int color_fg_highlight, color_bg_highlight;
@@
-546,16
+556,40
@@
int main(int argc, char **argv) {
while(*s == ' ' || (*s >= '0' && *s <= '9')) s++;
}
while(*s == ' ' || (*s >= '0' && *s <= '9')) s++;
}
- if(!hash_table || !test_and_add(s, nb_lines, lines, hash_table, hash_table_size)) {
+ int dup;
+
+ if(hash_table) {
+ dup = test_and_add(s, nb_lines, lines, hash_table, hash_table_size);
+ } else {
+ dup = -1;
+ }
+
+ if(dup < 0) {
lines[nb_lines] = new char[strlen(s) + 1];
strcpy(lines[nb_lines], s);
lines[nb_lines] = new char[strlen(s) + 1];
strcpy(lines[nb_lines], s);
- nb_lines++;
+ } else {
+ // We do not allocate a new string but use the pointer to the
+ // first occurence of it
+ lines[nb_lines] = lines[dup];
+ lines[dup] = 0;
}
}
+
+ nb_lines++;
}
}
delete[] hash_table;
}
}
delete[] hash_table;
+ // Now remove the null strings
+
+ int n = 0;
+ for(int k = 0; k < nb_lines; k++) {
+ if(lines[k]) {
+ lines[n++] = lines[k];
+ }
+ }
+ nb_lines = n;
+
if(inverse_order) {
for(int i = 0; i < nb_lines/2; i++) {
char *s = lines[nb_lines - 1 - i];
if(inverse_order) {
for(int i = 0; i < nb_lines/2; i++) {
char *s = lines[nb_lines - 1 - i];
@@
-569,8
+603,19
@@
int main(int argc, char **argv) {
int pattern_point;
pattern_point = 0;
int pattern_point;
pattern_point = 0;
+ //////////////////////////////////////////////////////////////////////
+ // Here we start to display with curse
+
initscr();
initscr();
+ noecho();
+
+ // Hide the cursor
+ curs_set(0);
+
+ // So that the arrow keys work
+ keypad(stdscr, TRUE);
+
if(with_colors) {
if(has_colors()) {
start_color();
if(with_colors) {
if(has_colors()) {
start_color();
@@
-591,10
+636,6
@@
int main(int argc, char **argv) {
}
}
}
}
- noecho();
- curs_set(0); // Hide the cursor
- keypad(stdscr, TRUE); // So that the arrow keys work
-
int key;
int current_line = 0, temporary_line = 0;
int key;
int current_line = 0, temporary_line = 0;
@@
-661,6
+702,9
@@
int main(int argc, char **argv) {
curs_set(1);
endwin();
curs_set(1);
endwin();
+ //////////////////////////////////////////////////////////////////////
+ // Here we come back to standard display
+
if((key == KEY_ENTER || key == '\n')) {
if(output_to_vt_buffer) {
if((key == KEY_ENTER || key == '\n')) {
if(output_to_vt_buffer) {