| File src/hstr.c changed (mode: 100644) (index fd8c5fb..51dedbf) |
| 83 |
83 |
#define HH_VIEW_HISTORY 1 |
#define HH_VIEW_HISTORY 1 |
| 84 |
84 |
#define HH_VIEW_FAVORITES 2 |
#define HH_VIEW_FAVORITES 2 |
| 85 |
85 |
|
|
| 86 |
|
#define HH_MATCH_CASE_INSENSITIVE 0 |
|
| 87 |
|
#define HH_MATCH_REGEXP 1 |
|
| 88 |
|
#define HH_MATCH_CASE_SENSITIVE 2 |
|
|
86 |
|
#define HH_MATCH_EXACT 0 |
|
87 |
|
#define HH_MATCH_REGEXP 1 |
| 89 |
88 |
|
|
| 90 |
89 |
#define HH_CASE_INSENSITIVE 0 |
#define HH_CASE_INSENSITIVE 0 |
| 91 |
90 |
#define HH_CASE_SENSITIVE 1 |
#define HH_CASE_SENSITIVE 1 |
| |
| ... |
... |
static const char *HH_VIEW_LABELS[]={ |
| 111 |
110 |
}; |
}; |
| 112 |
111 |
|
|
| 113 |
112 |
static const char *HH_MATCH_LABELS[]={ |
static const char *HH_MATCH_LABELS[]={ |
| 114 |
|
"sensitive", |
|
| 115 |
|
"insensitive" |
|
|
113 |
|
"exact", |
|
114 |
|
"regexp" |
| 116 |
115 |
}; |
}; |
| 117 |
116 |
|
|
| 118 |
117 |
static const char *HH_CASE_LABELS[]={ |
static const char *HH_CASE_LABELS[]={ |
| 119 |
|
"exact", |
|
| 120 |
|
"regexp" |
|
|
118 |
|
"sensitive", |
|
119 |
|
"insensitive" |
| 121 |
120 |
}; |
}; |
| 122 |
121 |
|
|
| 123 |
122 |
static const char *INSTALL_STRING= |
static const char *INSTALL_STRING= |
| |
| ... |
... |
static const char *HELP_STRING= |
| 138 |
137 |
"\n" |
"\n" |
| 139 |
138 |
"\n --favorites -f ... show command favorites" |
"\n --favorites -f ... show command favorites" |
| 140 |
139 |
"\n --show-configuration ... show configuration to be added to ~/.bashrc" |
"\n --show-configuration ... show configuration to be added to ~/.bashrc" |
|
140 |
|
"\n --version ... show version details" |
| 141 |
141 |
"\n --help ... display this help and exit" |
"\n --help ... display this help and exit" |
| 142 |
142 |
"\n" |
"\n" |
| 143 |
143 |
"\nReport bugs to martin.dvorak@mindforger.com" |
"\nReport bugs to martin.dvorak@mindforger.com" |
| |
| ... |
... |
static const char *HELP_STRING= |
| 145 |
145 |
"\n"; |
"\n"; |
| 146 |
146 |
|
|
| 147 |
147 |
static const char *VERSION_STRING= |
static const char *VERSION_STRING= |
| 148 |
|
"hh version \"1.10\"" |
|
|
148 |
|
"hh version \"1.11\"" |
| 149 |
149 |
"\n build \""__DATE__" " __TIME__"\"" |
"\n build \""__DATE__" " __TIME__"\"" |
| 150 |
150 |
"\n"; |
"\n"; |
| 151 |
151 |
|
|
| |
| ... |
... |
typedef struct { |
| 161 |
161 |
FavoriteItems *favorites; |
FavoriteItems *favorites; |
| 162 |
162 |
|
|
| 163 |
163 |
char **selection; |
char **selection; |
|
164 |
|
regmatch_t *selectionRegexpMatch; |
| 164 |
165 |
unsigned selectionSize; |
unsigned selectionSize; |
| 165 |
166 |
|
|
| 166 |
167 |
int historyMatch; // TODO patternMatching: exact, regexp |
int historyMatch; // TODO patternMatching: exact, regexp |
| |
| ... |
... |
static Hstr *hstr; |
| 180 |
181 |
void hstr_init(Hstr *hstr) |
void hstr_init(Hstr *hstr) |
| 181 |
182 |
{ |
{ |
| 182 |
183 |
hstr->selection=NULL; |
hstr->selection=NULL; |
|
184 |
|
hstr->selectionRegexpMatch=NULL; |
| 183 |
185 |
hstr->selectionSize=0; |
hstr->selectionSize=0; |
| 184 |
186 |
|
|
| 185 |
|
hstr->historyMatch=HH_MATCH_CASE_INSENSITIVE; |
|
|
187 |
|
hstr->historyMatch=HH_MATCH_REGEXP; |
| 186 |
188 |
hstr->historyView=HH_VIEW_RANKING; |
hstr->historyView=HH_VIEW_RANKING; |
| 187 |
189 |
hstr->caseSensitive=HH_CASE_INSENSITIVE; |
hstr->caseSensitive=HH_CASE_INSENSITIVE; |
| 188 |
190 |
|
|
| |
| ... |
... |
void hstr_init(Hstr *hstr) |
| 190 |
192 |
|
|
| 191 |
193 |
hstr->debugLevel=HH_DEBUG_LEVEL_NONE; |
hstr->debugLevel=HH_DEBUG_LEVEL_NONE; |
| 192 |
194 |
|
|
|
195 |
|
hstr->cmdline[0]=0; |
|
196 |
|
|
| 193 |
197 |
hstr_regexp_init(&hstr->regexp); |
hstr_regexp_init(&hstr->regexp); |
| 194 |
198 |
} |
} |
| 195 |
199 |
|
|
| |
| ... |
... |
void hstr_get_env_configuration(Hstr *hstr) |
| 201 |
205 |
hstr->hicolor=TRUE; |
hstr->hicolor=TRUE; |
| 202 |
206 |
} |
} |
| 203 |
207 |
if(strstr(hstr_config,HH_CONFIG_CASE)) { |
if(strstr(hstr_config,HH_CONFIG_CASE)) { |
| 204 |
|
hstr->historyMatch=HH_MATCH_CASE_SENSITIVE; |
|
|
208 |
|
hstr->caseSensitive=HH_CASE_SENSITIVE; |
| 205 |
209 |
} |
} |
| 206 |
210 |
if(strstr(hstr_config,HH_CONFIG_SORTING)) { |
if(strstr(hstr_config,HH_CONFIG_SORTING)) { |
| 207 |
211 |
hstr->historyView=HH_VIEW_HISTORY; |
hstr->historyView=HH_VIEW_HISTORY; |
| |
| ... |
... |
void print_history_label(Hstr *hstr) |
| 287 |
291 |
{ |
{ |
| 288 |
292 |
int width=getmaxx(stdscr); |
int width=getmaxx(stdscr); |
| 289 |
293 |
|
|
| 290 |
|
snprintf(screenLine, width, "- HISTORY - view:%s (C-/) - match:%s (C-t) - case:%s (C-.) - %d/%d ", |
|
|
294 |
|
snprintf(screenLine, width, "- HISTORY - view:%s (C-/) - match:%s (C-e) - case:%s (C-t) - %d/%d ", |
| 291 |
295 |
HH_VIEW_LABELS[hstr->historyView], |
HH_VIEW_LABELS[hstr->historyView], |
| 292 |
296 |
HH_MATCH_LABELS[hstr->historyMatch], |
HH_MATCH_LABELS[hstr->historyMatch], |
| 293 |
297 |
HH_CASE_LABELS[hstr->caseSensitive], |
HH_CASE_LABELS[hstr->caseSensitive], |
| |
| ... |
... |
unsigned get_max_history_items() |
| 323 |
327 |
return (getmaxy(stdscr)-Y_OFFSET_ITEMS); |
return (getmaxy(stdscr)-Y_OFFSET_ITEMS); |
| 324 |
328 |
} |
} |
| 325 |
329 |
|
|
| 326 |
|
|
|
|
330 |
|
// TODO don't realloc if size doesn't change |
| 327 |
331 |
void hstr_realloc_selection(unsigned size, Hstr *hstr) |
void hstr_realloc_selection(unsigned size, Hstr *hstr) |
| 328 |
332 |
{ |
{ |
| 329 |
333 |
if(hstr->selection) { |
if(hstr->selection) { |
| 330 |
334 |
if(size) { |
if(size) { |
| 331 |
|
hstr->selection=realloc(hstr->selection, size); |
|
|
335 |
|
hstr->selection |
|
336 |
|
=realloc(hstr->selection, sizeof(char*) * size); |
|
337 |
|
hstr->selectionRegexpMatch |
|
338 |
|
=realloc(hstr->selectionRegexpMatch, sizeof(regmatch_t) * size); |
| 332 |
339 |
} else { |
} else { |
| 333 |
340 |
free(hstr->selection); |
free(hstr->selection); |
|
341 |
|
free(hstr->selectionRegexpMatch); |
| 334 |
342 |
hstr->selection=NULL; |
hstr->selection=NULL; |
|
343 |
|
hstr->selectionRegexpMatch=NULL; |
| 335 |
344 |
} |
} |
| 336 |
345 |
} else { |
} else { |
| 337 |
346 |
if(size) { |
if(size) { |
| 338 |
|
hstr->selection = malloc(size); |
|
|
347 |
|
hstr->selection = malloc(sizeof(char*) * size); |
|
348 |
|
hstr->selectionRegexpMatch = malloc(sizeof(regmatch_t) * size); |
| 339 |
349 |
} |
} |
| 340 |
350 |
} |
} |
| 341 |
351 |
} |
} |
| 342 |
352 |
|
|
| 343 |
353 |
unsigned hstr_make_selection(char *prefix, HistoryItems *history, int maxSelectionCount, Hstr *hstr) |
unsigned hstr_make_selection(char *prefix, HistoryItems *history, int maxSelectionCount, Hstr *hstr) |
| 344 |
354 |
{ |
{ |
| 345 |
|
hstr_realloc_selection(sizeof(char*) * maxSelectionCount, hstr); |
|
|
355 |
|
hstr_realloc_selection(maxSelectionCount, hstr); |
| 346 |
356 |
|
|
| 347 |
357 |
unsigned i, selectionCount=0; |
unsigned i, selectionCount=0; |
| 348 |
358 |
char **source; |
char **source; |
| |
| ... |
... |
unsigned hstr_make_selection(char *prefix, HistoryItems *history, int maxSelecti |
| 364 |
374 |
break; |
break; |
| 365 |
375 |
} |
} |
| 366 |
376 |
|
|
|
377 |
|
regmatch_t regexpMatch; |
| 367 |
378 |
for(i=0; i<count && selectionCount<maxSelectionCount; i++) { |
for(i=0; i<count && selectionCount<maxSelectionCount; i++) { |
| 368 |
379 |
if(source[i]) { |
if(source[i]) { |
| 369 |
380 |
if(!prefix || !strlen(prefix)) { |
if(!prefix || !strlen(prefix)) { |
| 370 |
381 |
hstr->selection[selectionCount++]=source[i]; |
hstr->selection[selectionCount++]=source[i]; |
| 371 |
382 |
} else { |
} else { |
| 372 |
383 |
switch(hstr->historyMatch) { |
switch(hstr->historyMatch) { |
| 373 |
|
case HH_MATCH_CASE_INSENSITIVE: |
|
| 374 |
|
if(source[i]==strcasestr(source[i], prefix)) { |
|
| 375 |
|
hstr->selection[selectionCount++]=source[i]; |
|
|
384 |
|
case HH_MATCH_EXACT: |
|
385 |
|
switch(hstr->caseSensitive) { |
|
386 |
|
case HH_CASE_SENSITIVE: |
|
387 |
|
if(source[i]==strstr(source[i], prefix)) { |
|
388 |
|
hstr->selection[selectionCount++]=source[i]; |
|
389 |
|
} |
|
390 |
|
break; |
|
391 |
|
case HH_CASE_INSENSITIVE: |
|
392 |
|
if(source[i]==strcasestr(source[i], prefix)) { |
|
393 |
|
hstr->selection[selectionCount++]=source[i]; |
|
394 |
|
} |
|
395 |
|
break; |
| 376 |
396 |
} |
} |
| 377 |
397 |
break; |
break; |
| 378 |
398 |
case HH_MATCH_REGEXP: |
case HH_MATCH_REGEXP: |
| 379 |
|
// TODO TODO TODO REGEXP: call regexp implementation from here regexp_match(®exp, match) |
|
| 380 |
|
break; |
|
| 381 |
|
case HH_MATCH_CASE_SENSITIVE: |
|
| 382 |
|
default: |
|
| 383 |
|
if(source[i]==strstr(source[i], prefix)) { |
|
| 384 |
|
hstr->selection[selectionCount++]=source[i]; |
|
|
399 |
|
if(hstr_regexp_match(&(hstr->regexp), prefix, source[i], ®expMatch)) { |
|
400 |
|
hstr->selection[selectionCount]=source[i]; |
|
401 |
|
hstr->selectionRegexpMatch[selectionCount].rm_so=regexpMatch.rm_so; |
|
402 |
|
hstr->selectionRegexpMatch[selectionCount].rm_eo=regexpMatch.rm_eo; |
|
403 |
|
selectionCount++; |
| 385 |
404 |
} |
} |
| 386 |
405 |
break; |
break; |
| 387 |
406 |
} |
} |
| |
| ... |
... |
unsigned hstr_make_selection(char *prefix, HistoryItems *history, int maxSelecti |
| 393 |
412 |
char *substring; |
char *substring; |
| 394 |
413 |
for(i=0; i<count && selectionCount<maxSelectionCount; i++) { |
for(i=0; i<count && selectionCount<maxSelectionCount; i++) { |
| 395 |
414 |
switch(hstr->historyMatch) { |
switch(hstr->historyMatch) { |
| 396 |
|
case HH_MATCH_CASE_SENSITIVE: |
|
| 397 |
|
substring = strstr(source[i], prefix); |
|
| 398 |
|
if (substring != NULL && substring!=source[i]) { |
|
| 399 |
|
hstr->selection[selectionCount++]=source[i]; |
|
|
415 |
|
case HH_MATCH_EXACT: |
|
416 |
|
switch(hstr->caseSensitive) { |
|
417 |
|
case HH_CASE_SENSITIVE: |
|
418 |
|
substring = strstr(source[i], prefix); |
|
419 |
|
if (substring != NULL && substring!=source[i]) { |
|
420 |
|
hstr->selection[selectionCount++]=source[i]; |
|
421 |
|
} |
|
422 |
|
break; |
|
423 |
|
case HH_CASE_INSENSITIVE: |
|
424 |
|
substring = strcasestr(source[i], prefix); |
|
425 |
|
if (substring != NULL && substring!=source[i]) { |
|
426 |
|
hstr->selection[selectionCount++]=source[i]; |
|
427 |
|
} |
|
428 |
|
break; |
| 400 |
429 |
} |
} |
| 401 |
430 |
break; |
break; |
| 402 |
431 |
case HH_MATCH_REGEXP: |
case HH_MATCH_REGEXP: |
| 403 |
|
// TODO TODO regexp_match(®exp) |
|
| 404 |
|
break; |
|
| 405 |
|
case HH_MATCH_CASE_INSENSITIVE: |
|
| 406 |
|
default: |
|
| 407 |
|
substring = strcasestr(source[i], prefix); |
|
| 408 |
|
if (substring != NULL && substring!=source[i]) { |
|
| 409 |
|
hstr->selection[selectionCount++]=source[i]; |
|
| 410 |
|
} |
|
| 411 |
|
break; |
|
|
432 |
|
// all regexps matched previously - user decides whether match ^ or infix |
|
433 |
|
break; |
| 412 |
434 |
} |
} |
| 413 |
435 |
} |
} |
| 414 |
436 |
} |
} |
| |
| ... |
... |
unsigned hstr_make_selection(char *prefix, HistoryItems *history, int maxSelecti |
| 417 |
439 |
return selectionCount; |
return selectionCount; |
| 418 |
440 |
} |
} |
| 419 |
441 |
|
|
| 420 |
|
void print_selection_row(char *text, int y, int width, char *prefix) |
|
|
442 |
|
void print_selection_row(char *text, int y, int width, char *pattern) |
| 421 |
443 |
{ |
{ |
| 422 |
444 |
snprintf(screenLine, width, " %s", text); |
snprintf(screenLine, width, " %s", text); |
| 423 |
445 |
mvprintw(y, 0, "%s", screenLine); clrtoeol(); |
mvprintw(y, 0, "%s", screenLine); clrtoeol(); |
| 424 |
|
if(prefix && strlen(prefix)>0) { |
|
|
446 |
|
|
|
447 |
|
if(pattern && strlen(pattern)) { |
| 425 |
448 |
color_attr_on(A_BOLD); |
color_attr_on(A_BOLD); |
| 426 |
449 |
char *p; |
char *p; |
| 427 |
450 |
|
|
| 428 |
451 |
switch(hstr->historyMatch) { |
switch(hstr->historyMatch) { |
| 429 |
|
case HH_MATCH_CASE_SENSITIVE: |
|
| 430 |
|
p=strstr(text, prefix); |
|
| 431 |
|
mvprintw(y, 1+(p-text), "%s", prefix); |
|
|
452 |
|
case HH_MATCH_EXACT: |
|
453 |
|
switch(hstr->caseSensitive) { |
|
454 |
|
case HH_CASE_INSENSITIVE: |
|
455 |
|
p=strcasestr(text, pattern); |
|
456 |
|
snprintf(screenLine, strlen(pattern)+1, "%s", p); |
|
457 |
|
mvprintw(y, 1+(p-text), "%s", screenLine); |
|
458 |
|
break; |
|
459 |
|
case HH_CASE_SENSITIVE: |
|
460 |
|
p=strstr(text, pattern); |
|
461 |
|
mvprintw(y, 1+(p-text), "%s", pattern); |
|
462 |
|
break; |
|
463 |
|
} |
| 432 |
464 |
break; |
break; |
| 433 |
465 |
case HH_MATCH_REGEXP: |
case HH_MATCH_REGEXP: |
| 434 |
|
// TODO regexp_(®ex) |
|
| 435 |
|
break; |
|
| 436 |
|
case HH_MATCH_CASE_INSENSITIVE: |
|
| 437 |
|
default: |
|
| 438 |
|
p=strcasestr(text, prefix); |
|
| 439 |
|
snprintf(screenLine, strlen(prefix)+1, "%s", p); |
|
| 440 |
|
mvprintw(y, 1+(p-text), "%s", screenLine); |
|
|
466 |
|
p=strstr(text, pattern); |
|
467 |
|
mvprintw(y, 1+(p-text), "%s", pattern); |
| 441 |
468 |
break; |
break; |
| 442 |
469 |
} |
} |
| 443 |
470 |
color_attr_off(A_BOLD); |
color_attr_off(A_BOLD); |
| |
| ... |
... |
void hstr_print_highlighted_selection_row(char *text, int y, int width, Hstr *hs |
| 464 |
491 |
color_attr_off(A_BOLD); |
color_attr_off(A_BOLD); |
| 465 |
492 |
} |
} |
| 466 |
493 |
|
|
| 467 |
|
char *hstr_print_selection(unsigned maxHistoryItems, char *prefix, Hstr *hstr) |
|
|
494 |
|
char *hstr_print_selection(unsigned maxHistoryItems, char *pattern, Hstr *hstr) |
| 468 |
495 |
{ |
{ |
| 469 |
496 |
char *result=NULL; |
char *result=NULL; |
| 470 |
|
unsigned selectionCount=hstr_make_selection(prefix, hstr->history, maxHistoryItems, hstr); |
|
|
497 |
|
unsigned selectionCount=hstr_make_selection(pattern, hstr->history, maxHistoryItems, hstr); |
| 471 |
498 |
if (selectionCount > 0) { |
if (selectionCount > 0) { |
| 472 |
499 |
result=hstr->selection[0]; |
result=hstr->selection[0]; |
| 473 |
500 |
} |
} |
| |
| ... |
... |
char *hstr_print_selection(unsigned maxHistoryItems, char *prefix, Hstr *hstr) |
| 480 |
507 |
move(Y_OFFSET_ITEMS, 0); |
move(Y_OFFSET_ITEMS, 0); |
| 481 |
508 |
clrtobot(); |
clrtobot(); |
| 482 |
509 |
|
|
|
510 |
|
char buffer[CMDLINE_LNG]; |
|
511 |
|
int start, end; |
|
512 |
|
|
| 483 |
513 |
for (i = 0; i<height; ++i) { |
for (i = 0; i<height; ++i) { |
| 484 |
514 |
if(i<hstr->selectionSize) { |
if(i<hstr->selectionSize) { |
| 485 |
|
print_selection_row(hstr->selection[i], y++, width, prefix); |
|
|
515 |
|
if(pattern && strlen(pattern)) { |
|
516 |
|
if(hstr->historyMatch==HH_MATCH_REGEXP) { |
|
517 |
|
start=hstr->selectionRegexpMatch[i].rm_so; |
|
518 |
|
end=hstr->selectionRegexpMatch[i].rm_eo-start; |
|
519 |
|
strncpy(buffer, |
|
520 |
|
hstr->selection[i]+start, |
|
521 |
|
end); |
|
522 |
|
buffer[end]=0; |
|
523 |
|
} else { |
|
524 |
|
strcpy(buffer, pattern); |
|
525 |
|
} |
|
526 |
|
print_selection_row(hstr->selection[i], y++, width, buffer); |
|
527 |
|
} else { |
|
528 |
|
print_selection_row(hstr->selection[i], y++, width, pattern); |
|
529 |
|
} |
| 486 |
530 |
} else { |
} else { |
| 487 |
531 |
mvprintw(y++, 0, " "); |
mvprintw(y++, 0, " "); |
| 488 |
532 |
} |
} |
| |
| ... |
... |
char *hstr_print_selection(unsigned maxHistoryItems, char *prefix, Hstr *hstr) |
| 495 |
539 |
void highlight_selection(int selectionCursorPosition, int previousSelectionCursorPosition, char *prefix, Hstr *hstr) |
void highlight_selection(int selectionCursorPosition, int previousSelectionCursorPosition, char *prefix, Hstr *hstr) |
| 496 |
540 |
{ |
{ |
| 497 |
541 |
if(previousSelectionCursorPosition!=SELECTION_CURSOR_IN_PROMPT) { |
if(previousSelectionCursorPosition!=SELECTION_CURSOR_IN_PROMPT) { |
|
542 |
|
// TODO regexp match instead of prefix one level up |
| 498 |
543 |
print_selection_row( |
print_selection_row( |
| 499 |
544 |
hstr->selection[previousSelectionCursorPosition], |
hstr->selection[previousSelectionCursorPosition], |
| 500 |
545 |
Y_OFFSET_ITEMS+previousSelectionCursorPosition, |
Y_OFFSET_ITEMS+previousSelectionCursorPosition, |
| |
| ... |
... |
void loop_to_select(Hstr *hstr) |
| 628 |
673 |
} |
} |
| 629 |
674 |
print_history_label(hstr); |
print_history_label(hstr); |
| 630 |
675 |
break; |
break; |
|
676 |
|
case K_CTRL_E: |
|
677 |
|
hstr->historyMatch++; |
|
678 |
|
hstr->historyMatch=hstr->historyMatch%2; |
|
679 |
|
result=hstr_print_selection(maxHistoryItems, pattern, hstr); |
|
680 |
|
print_history_label(hstr); |
|
681 |
|
selectionCursorPosition=0; |
|
682 |
|
break; |
| 631 |
683 |
case K_CTRL_T: |
case K_CTRL_T: |
| 632 |
|
// TODO TODO TODO TODO TODO MOD to rotate regexp views goes here |
|
| 633 |
|
// TODO TODO TODO hstr->caseSensitive=!hstr->caseSensitive; |
|
| 634 |
|
|
|
|
684 |
|
hstr->caseSensitive=!hstr->caseSensitive; |
|
685 |
|
hstr->regexp.caseSensitive=hstr->caseSensitive; |
| 635 |
686 |
result=hstr_print_selection(maxHistoryItems, pattern, hstr); |
result=hstr_print_selection(maxHistoryItems, pattern, hstr); |
| 636 |
687 |
print_history_label(hstr); |
print_history_label(hstr); |
| 637 |
688 |
selectionCursorPosition=0; |
selectionCursorPosition=0; |
| |
| ... |
... |
void loop_to_select(Hstr *hstr) |
| 684 |
735 |
print_prefix(pattern, y, basex); |
print_prefix(pattern, y, basex); |
| 685 |
736 |
} |
} |
| 686 |
737 |
|
|
|
738 |
|
// TODO why I make selection if it's done in print_selection? |
| 687 |
739 |
if(strlen(pattern)>0) { |
if(strlen(pattern)>0) { |
| 688 |
740 |
hstr_make_selection(pattern, hstr->history, maxHistoryItems, hstr); |
hstr_make_selection(pattern, hstr->history, maxHistoryItems, hstr); |
| 689 |
741 |
} else { |
} else { |
| |
| ... |
... |
void loop_to_select(Hstr *hstr) |
| 775 |
827 |
// TODO support BASH substitutions: !!, !!ps, !$, !* |
// TODO support BASH substitutions: !!, !!ps, !$, !* |
| 776 |
828 |
void hstr_assemble_cmdline_pattern(int argc, char* argv[], Hstr* hstr) |
void hstr_assemble_cmdline_pattern(int argc, char* argv[], Hstr* hstr) |
| 777 |
829 |
{ |
{ |
| 778 |
|
hstr->cmdline[0]=0; |
|
| 779 |
830 |
if(argc>0) { |
if(argc>0) { |
| 780 |
831 |
int i; |
int i; |
| 781 |
832 |
for(i=1; i<argc; i++) { |
for(i=1; i<argc; i++) { |
| |
| ... |
... |
void hstr_assemble_cmdline_pattern(int argc, char* argv[], Hstr* hstr) |
| 795 |
846 |
} |
} |
| 796 |
847 |
|
|
| 797 |
848 |
// TODO to be rewritten to getopt |
// TODO to be rewritten to getopt |
|
849 |
|
|
|
850 |
|
// TODO on unknown option make it filter |
|
851 |
|
// TODO on favorites - skip -f otherwise it becomes filter |
| 798 |
852 |
void hstr_get_cmdline_options(int argc, char *argv[], Hstr *hstr) |
void hstr_get_cmdline_options(int argc, char *argv[], Hstr *hstr) |
| 799 |
853 |
{ |
{ |
| 800 |
854 |
if(argc>0) { |
if(argc>0) { |
| |
| ... |
... |
void hstr_get_cmdline_options(int argc, char *argv[], Hstr *hstr) |
| 811 |
865 |
printf("%s", VERSION_STRING); |
printf("%s", VERSION_STRING); |
| 812 |
866 |
exit(EXIT_SUCCESS); |
exit(EXIT_SUCCESS); |
| 813 |
867 |
} else { |
} else { |
| 814 |
|
// if(strstr(argv[1], "--help")) { |
|
| 815 |
|
printf("Unknown option: %s\n", argv[1]); |
|
| 816 |
|
printf("%s", HELP_STRING); |
|
| 817 |
|
exit(EXIT_SUCCESS); |
|
|
868 |
|
if(strstr(argv[1], "--help")) { |
|
869 |
|
printf("Unknown option: %s\n", argv[1]); |
|
870 |
|
printf("%s", HELP_STRING); |
|
871 |
|
exit(EXIT_SUCCESS); |
|
872 |
|
} else { |
|
873 |
|
hstr_assemble_cmdline_pattern(argc, argv, hstr); |
|
874 |
|
} |
| 818 |
875 |
} |
} |
| 819 |
876 |
} |
} |
| 820 |
877 |
} |
} |
| |
| ... |
... |
int main(int argc, char *argv[]) |
| 850 |
907 |
hstr_init(hstr); |
hstr_init(hstr); |
| 851 |
908 |
hstr_get_env_configuration(hstr); |
hstr_get_env_configuration(hstr); |
| 852 |
909 |
hstr_get_cmdline_options(argc, argv, hstr); |
hstr_get_cmdline_options(argc, argv, hstr); |
| 853 |
|
hstr_assemble_cmdline_pattern(argc, argv, hstr); |
|
| 854 |
910 |
hstr_init_favorites(hstr); |
hstr_init_favorites(hstr); |
| 855 |
911 |
hstr_main(hstr); |
hstr_main(hstr); |
| 856 |
912 |
|
|