Browse code

Closer to working ANSI interface

John Hawthorn authored on 12/07/2014 04:15:25
Showing 1 changed files

... ...
@@ -103,17 +103,40 @@ char ttygetchar(){
103 103
 int search_size;
104 104
 char search[4096] = {0};
105 105
 
106
+void clear(){
107
+	fprintf(stdout, "%c%c0G", 0x1b, '[');
108
+	int line = 0;
109
+	while(line++ < 11 + 1){
110
+		fprintf(stdout, "%c%cK\n", 0x1b, '[');
111
+	}
112
+	fprintf(stdout, "%c%c%iA", 0x1b, '[', line-1);
113
+	fprintf(stdout, "%c%c0G", 0x1b, '[');
114
+}
115
+
106 116
 void draw(){
107
-	run_search(search);
108
-	printf("> %s", search);
117
+	int line = 0;
118
+	int i;
119
+	const char *prompt = "> ";
120
+	clear();
121
+	printf("%s%s\n", prompt, search);
122
+	for(i = 0; line < 10 && i < choices_n; i++){
123
+		double rank = match(search, choices[i]);
124
+		if(rank > 0){
125
+			//fprintf(stdout, "%c%cK", 0x1b, '[');
126
+			printf("%s\n", choices[i]);
127
+			line++;
128
+		}
129
+	}
130
+	fprintf(stdout, "%c%c%iA", 0x1b, '[', line + 1);
131
+	fprintf(stdout, "%c%c%iG", 0x1b, '[', strlen(prompt) + strlen(search) + 1);
109 132
 	fflush(stdout);
110 133
 }
111 134
 
112 135
 void run(){
136
+	draw();
113 137
 	char ch;
114 138
 	do {
115 139
 		ch = ttygetchar();
116
-		printf("\n");
117 140
 		if(isprint(ch)){
118 141
 			/* FIXME: overflow */
119 142
 			search[search_size++] = ch;
... ...
@@ -129,6 +152,9 @@ void run(){
129 152
 			while(search_size && !isspace(search[--search_size]))
130 153
 				search[search_size] = '\0';
131 154
 			draw();
155
+		}else if(ch == 10){ /* Enter */
156
+			clear();
157
+			exit(0);
132 158
 		}else{
133 159
 			printf("'%c' (%i)\n", ch, ch);
134 160
 		}
... ...
@@ -136,12 +162,12 @@ void run(){
136 162
 }
137 163
 
138 164
 void usage(const char *argv0){
139
-	fprintf(stderr, "USAGE: %s SEARCH\n", argv0);
165
+	fprintf(stderr, "USAGE: %s\n", argv0);
140 166
 	exit(EXIT_FAILURE);
141 167
 }
142 168
 
143 169
 int main(int argc, char *argv[]){
144
-	if(argc != 2){
170
+	if(argc != 1){
145 171
 		usage(argv[0]);
146 172
 	}
147 173
 	atexit(reset_tty);
... ...
@@ -149,8 +175,8 @@ int main(int argc, char *argv[]){
149 175
 
150 176
 	resize_choices(INITIAL_CAPACITY);
151 177
 	read_choices();
152
-	run_search(argv[1]);
153 178
 
179
+	clear();
154 180
 	run();
155 181
 
156 182
 	return 0;