File src/hstr.c changed (mode: 100644) (index e57f6ff..f33c624) |
75 |
75 |
#define K_BACKSPACE 127 |
#define K_BACKSPACE 127 |
76 |
76 |
#define K_ENTER 10 |
#define K_ENTER 10 |
77 |
77 |
|
|
|
78 |
|
#define HH_THEME_MONO 0 |
|
79 |
|
#define HH_THEME_COLOR 1<<7 |
|
80 |
|
#define HH_THEME_LIGHT 1|HH_THEME_COLOR |
|
81 |
|
#define HH_THEME_DARK 2|HH_THEME_COLOR |
|
82 |
|
|
78 |
83 |
#define HH_COLOR_NORMAL 1 |
#define HH_COLOR_NORMAL 1 |
79 |
84 |
#define HH_COLOR_HIROW 2 |
#define HH_COLOR_HIROW 2 |
80 |
85 |
#define HH_COLOR_INFO 2 |
#define HH_COLOR_INFO 2 |
|
85 |
90 |
#define HH_ENV_VAR_CONFIG "HH_CONFIG" |
#define HH_ENV_VAR_CONFIG "HH_CONFIG" |
86 |
91 |
#define HH_ENV_VAR_PROMPT "HH_PROMPT" |
#define HH_ENV_VAR_PROMPT "HH_PROMPT" |
87 |
92 |
|
|
88 |
|
#define HH_CONFIG_MONO "monochromatic" |
|
89 |
|
#define HH_CONFIG_HICOLOR "hicolor" |
|
|
93 |
|
#define HH_CONFIG_THEME_MONOCHROMATIC "monochromatic" |
|
94 |
|
#define HH_CONFIG_THEME_HICOLOR "hicolor" |
90 |
95 |
#define HH_CONFIG_CASE "casesensitive" |
#define HH_CONFIG_CASE "casesensitive" |
91 |
96 |
#define HH_CONFIG_REGEXP "regexp" |
#define HH_CONFIG_REGEXP "regexp" |
92 |
97 |
#define HH_CONFIG_SUBSTRING "substring" |
#define HH_CONFIG_SUBSTRING "substring" |
|
95 |
100 |
#define HH_CONFIG_FAVORITES "favorites" |
#define HH_CONFIG_FAVORITES "favorites" |
96 |
101 |
#define HH_CONFIG_DEBUG "debug" |
#define HH_CONFIG_DEBUG "debug" |
97 |
102 |
#define HH_CONFIG_WARN "warning" |
#define HH_CONFIG_WARN "warning" |
98 |
|
#define HH_CONFIG_BIG_KEYS_SKIP "bigkeysskip" |
|
99 |
|
#define HH_CONFIG_BIG_KEYS_FLOOR "bigkeysfloor" |
|
100 |
|
#define HH_CONFIG_BIG_KEYS_EXIT "bigkeysexit" |
|
|
103 |
|
#define HH_CONFIG_BIG_KEYS_SKIP "big-keys-skip" |
|
104 |
|
#define HH_CONFIG_BIG_KEYS_FLOOR "big-keys-floor" |
|
105 |
|
#define HH_CONFIG_BIG_KEYS_EXIT "big-keys-exit" |
101 |
106 |
|
|
102 |
107 |
#define HH_DEBUG_LEVEL_NONE 0 |
#define HH_DEBUG_LEVEL_NONE 0 |
103 |
108 |
#define HH_DEBUG_LEVEL_WARN 1 |
#define HH_DEBUG_LEVEL_WARN 1 |
|
142 |
147 |
#define LOGSELECTION(Y,SCREEN,MODEL) |
#define LOGSELECTION(Y,SCREEN,MODEL) |
143 |
148 |
#endif |
#endif |
144 |
149 |
|
|
145 |
|
void logstring(char* str){ |
|
146 |
|
FILE *f = fopen("/home/tbabej/hh.log", "a"); |
|
147 |
|
if (f == NULL) |
|
148 |
|
{ |
|
149 |
|
perror("fopen"); |
|
150 |
|
printf("Error opening file!\n"); |
|
151 |
|
exit(1); |
|
152 |
|
} |
|
153 |
|
fprintf(f, "Debug: %s \n", str); |
|
154 |
|
fclose(f); |
|
155 |
|
} |
|
156 |
|
|
|
157 |
150 |
static const char *HH_VIEW_LABELS[]={ |
static const char *HH_VIEW_LABELS[]={ |
158 |
151 |
"ranking", |
"ranking", |
159 |
152 |
"history", |
"history", |
|
... |
... |
typedef struct { |
243 |
236 |
|
|
244 |
237 |
bool interactive; |
bool interactive; |
245 |
238 |
|
|
246 |
|
bool hicolor; |
|
|
239 |
|
unsigned char theme; |
247 |
240 |
int bigKeys; |
int bigKeys; |
248 |
241 |
int debugLevel; |
int debugLevel; |
249 |
242 |
|
|
|
... |
... |
void hstr_init(Hstr *hstr) |
266 |
259 |
|
|
267 |
260 |
hstr->interactive=true; |
hstr->interactive=true; |
268 |
261 |
|
|
269 |
|
hstr->hicolor=FALSE; |
|
|
262 |
|
hstr->theme=HH_THEME_MONO; |
270 |
263 |
hstr->bigKeys=RADIX_BIG_KEYS_SKIP; |
hstr->bigKeys=RADIX_BIG_KEYS_SKIP; |
271 |
264 |
hstr->debugLevel=HH_DEBUG_LEVEL_NONE; |
hstr->debugLevel=HH_DEBUG_LEVEL_NONE; |
272 |
265 |
|
|
|
... |
... |
void hstr_get_env_configuration(Hstr *hstr) |
278 |
271 |
{ |
{ |
279 |
272 |
char *hstr_config=getenv(HH_ENV_VAR_CONFIG); |
char *hstr_config=getenv(HH_ENV_VAR_CONFIG); |
280 |
273 |
if(hstr_config && strlen(hstr_config)>0) { |
if(hstr_config && strlen(hstr_config)>0) { |
281 |
|
if(strstr(hstr_config,HH_CONFIG_HICOLOR)) { |
|
282 |
|
hstr->hicolor=TRUE; |
|
|
274 |
|
if(strstr(hstr_config,HH_CONFIG_THEME_MONOCHROMATIC)) { |
|
275 |
|
hstr->theme=HH_THEME_MONO; |
|
276 |
|
} else { |
|
277 |
|
if(strstr(hstr_config,HH_CONFIG_THEME_HICOLOR)) { |
|
278 |
|
hstr->theme=HH_THEME_DARK; |
|
279 |
|
} |
283 |
280 |
} |
} |
284 |
281 |
if(strstr(hstr_config,HH_CONFIG_CASE)) { |
if(strstr(hstr_config,HH_CONFIG_CASE)) { |
285 |
282 |
hstr->caseSensitive=HH_CASE_SENSITIVE; |
hstr->caseSensitive=HH_CASE_SENSITIVE; |
|
... |
... |
int print_prompt(Hstr *hstr) |
326 |
323 |
{ |
{ |
327 |
324 |
int xoffset = 0, promptLength; |
int xoffset = 0, promptLength; |
328 |
325 |
|
|
329 |
|
if(hstr->hicolor) { |
|
|
326 |
|
if(hstr->theme & HH_THEME_COLOR) { |
330 |
327 |
color_attr_on(COLOR_PAIR(HH_COLOR_PROMPT)); |
color_attr_on(COLOR_PAIR(HH_COLOR_PROMPT)); |
331 |
328 |
color_attr_on(A_BOLD); |
color_attr_on(A_BOLD); |
332 |
329 |
} |
} |
|
... |
... |
int print_prompt(Hstr *hstr) |
345 |
342 |
free(hostname); |
free(hostname); |
346 |
343 |
} |
} |
347 |
344 |
|
|
348 |
|
if(hstr->hicolor) { |
|
|
345 |
|
if(hstr->theme & HH_THEME_COLOR) { |
349 |
346 |
color_attr_off(A_BOLD); |
color_attr_off(A_BOLD); |
350 |
347 |
color_attr_off(COLOR_PAIR(HH_COLOR_PROMPT)); |
color_attr_off(COLOR_PAIR(HH_COLOR_PROMPT)); |
351 |
348 |
} |
} |
|
... |
... |
void print_cmd_deleted_label(const char *cmd, int occurences, Hstr *hstr) |
367 |
364 |
char screenLine[CMDLINE_LNG]; |
char screenLine[CMDLINE_LNG]; |
368 |
365 |
snprintf(screenLine, getmaxx(stdscr), "History item '%s' deleted (%d occurrence%s)", cmd, occurences, (occurences==1?"":"s")); |
snprintf(screenLine, getmaxx(stdscr), "History item '%s' deleted (%d occurrence%s)", cmd, occurences, (occurences==1?"":"s")); |
369 |
366 |
// TODO make this function |
// TODO make this function |
370 |
|
if(hstr->hicolor) { |
|
|
367 |
|
if(hstr->theme & HH_THEME_COLOR) { |
371 |
368 |
color_attr_on(COLOR_PAIR(HH_COLOR_DELETE)); |
color_attr_on(COLOR_PAIR(HH_COLOR_DELETE)); |
372 |
369 |
color_attr_on(A_BOLD); |
color_attr_on(A_BOLD); |
373 |
370 |
} |
} |
374 |
371 |
mvprintw(Y_OFFSET_HELP, 0, "%s", screenLine); |
mvprintw(Y_OFFSET_HELP, 0, "%s", screenLine); |
375 |
|
if(hstr->hicolor) { |
|
|
372 |
|
if(hstr->theme & HH_THEME_COLOR) { |
376 |
373 |
color_attr_off(A_BOLD); |
color_attr_off(A_BOLD); |
377 |
374 |
color_attr_on(COLOR_PAIR(1)); |
color_attr_on(COLOR_PAIR(1)); |
378 |
375 |
} |
} |
|
... |
... |
void print_regexp_error(const char *errorMessage) |
384 |
381 |
{ |
{ |
385 |
382 |
char screenLine[CMDLINE_LNG]; |
char screenLine[CMDLINE_LNG]; |
386 |
383 |
snprintf(screenLine, getmaxx(stdscr), "%s", errorMessage); |
snprintf(screenLine, getmaxx(stdscr), "%s", errorMessage); |
387 |
|
if(hstr->hicolor) { |
|
|
384 |
|
if(hstr->theme & HH_THEME_COLOR) { |
388 |
385 |
color_attr_on(COLOR_PAIR(HH_COLOR_DELETE)); |
color_attr_on(COLOR_PAIR(HH_COLOR_DELETE)); |
389 |
386 |
color_attr_on(A_BOLD); |
color_attr_on(A_BOLD); |
390 |
387 |
} |
} |
391 |
388 |
mvprintw(Y_OFFSET_HELP, 0, "%s", screenLine); |
mvprintw(Y_OFFSET_HELP, 0, "%s", screenLine); |
392 |
|
if(hstr->hicolor) { |
|
|
389 |
|
if(hstr->theme & HH_THEME_COLOR) { |
393 |
390 |
color_attr_off(A_BOLD); |
color_attr_off(A_BOLD); |
394 |
391 |
color_attr_on(COLOR_PAIR(1)); |
color_attr_on(COLOR_PAIR(1)); |
395 |
392 |
} |
} |
|
... |
... |
void print_cmd_added_favorite_label(const char *cmd, Hstr *hstr) |
401 |
398 |
{ |
{ |
402 |
399 |
char screenLine[CMDLINE_LNG]; |
char screenLine[CMDLINE_LNG]; |
403 |
400 |
snprintf(screenLine, getmaxx(stdscr), "Command '%s' added to favorites (C-/ to show favorites)", cmd); |
snprintf(screenLine, getmaxx(stdscr), "Command '%s' added to favorites (C-/ to show favorites)", cmd); |
404 |
|
if(hstr->hicolor) { |
|
|
401 |
|
if(hstr->theme & HH_THEME_COLOR) { |
405 |
402 |
color_attr_on(COLOR_PAIR(HH_COLOR_INFO)); |
color_attr_on(COLOR_PAIR(HH_COLOR_INFO)); |
406 |
403 |
color_attr_on(A_BOLD); |
color_attr_on(A_BOLD); |
407 |
404 |
} |
} |
408 |
405 |
mvprintw(Y_OFFSET_HELP, 0, screenLine); |
mvprintw(Y_OFFSET_HELP, 0, screenLine); |
409 |
|
if(hstr->hicolor) { |
|
|
406 |
|
if(hstr->theme & HH_THEME_COLOR) { |
410 |
407 |
color_attr_off(A_BOLD); |
color_attr_off(A_BOLD); |
411 |
408 |
color_attr_on(COLOR_PAIR(1)); |
color_attr_on(COLOR_PAIR(1)); |
412 |
409 |
} |
} |
|
... |
... |
void print_history_label(Hstr *hstr) |
431 |
428 |
for (i=0; i < width; i++) { |
for (i=0; i < width; i++) { |
432 |
429 |
strcat(screenLine, "-"); |
strcat(screenLine, "-"); |
433 |
430 |
} |
} |
434 |
|
if(hstr->hicolor) { |
|
|
431 |
|
if(hstr->theme & HH_THEME_COLOR) { |
435 |
432 |
color_attr_on(A_BOLD); |
color_attr_on(A_BOLD); |
436 |
433 |
} |
} |
437 |
434 |
color_attr_on(A_REVERSE); |
color_attr_on(A_REVERSE); |
438 |
435 |
mvprintw(Y_OFFSET_HISTORY, 0, "%s", screenLine); |
mvprintw(Y_OFFSET_HISTORY, 0, "%s", screenLine); |
439 |
436 |
color_attr_off(A_REVERSE); |
color_attr_off(A_REVERSE); |
440 |
|
if(hstr->hicolor) { |
|
|
437 |
|
if(hstr->theme & HH_THEME_COLOR) { |
441 |
438 |
color_attr_off(A_BOLD); |
color_attr_off(A_BOLD); |
442 |
439 |
} |
} |
443 |
440 |
refresh(); |
refresh(); |
|
... |
... |
void print_selection_row(char *text, int y, int width, char *pattern) |
613 |
610 |
|
|
614 |
611 |
if(pattern && strlen(pattern)) { |
if(pattern && strlen(pattern)) { |
615 |
612 |
color_attr_on(A_BOLD); |
color_attr_on(A_BOLD); |
616 |
|
color_attr_on(COLOR_PAIR(HH_COLOR_MATCH)); |
|
|
613 |
|
if(hstr->theme & HH_THEME_COLOR) { |
|
614 |
|
color_attr_on(COLOR_PAIR(HH_COLOR_MATCH)); |
|
615 |
|
} |
617 |
616 |
char *p; |
char *p; |
618 |
617 |
char *keywordsSavePtr; |
char *keywordsSavePtr; |
619 |
618 |
char *keywordsToken; |
char *keywordsToken; |
|
... |
... |
void print_selection_row(char *text, int y, int width, char *pattern) |
654 |
653 |
|
|
655 |
654 |
break; |
break; |
656 |
655 |
} |
} |
657 |
|
color_attr_on(COLOR_PAIR(HH_COLOR_NORMAL)); |
|
|
656 |
|
if(hstr->theme & HH_THEME_COLOR) { |
|
657 |
|
color_attr_on(COLOR_PAIR(HH_COLOR_NORMAL)); |
|
658 |
|
} |
658 |
659 |
color_attr_off(A_BOLD); |
color_attr_off(A_BOLD); |
659 |
660 |
} |
} |
660 |
661 |
} |
} |
|
... |
... |
void print_selection_row(char *text, int y, int width, char *pattern) |
662 |
663 |
void hstr_print_highlighted_selection_row(char *text, int y, int width, Hstr *hstr) |
void hstr_print_highlighted_selection_row(char *text, int y, int width, Hstr *hstr) |
663 |
664 |
{ |
{ |
664 |
665 |
color_attr_on(A_BOLD); |
color_attr_on(A_BOLD); |
665 |
|
if(hstr->hicolor) { |
|
|
666 |
|
if(hstr->theme & HH_THEME_COLOR) { |
666 |
667 |
color_attr_on(COLOR_PAIR(2)); |
color_attr_on(COLOR_PAIR(2)); |
667 |
668 |
} else { |
} else { |
668 |
669 |
color_attr_on(A_REVERSE); |
color_attr_on(A_REVERSE); |
|
... |
... |
void hstr_print_highlighted_selection_row(char *text, int y, int width, Hstr *hs |
672 |
673 |
"%s%s" SPACE_PADDING SPACE_PADDING SPACE_PADDING, |
"%s%s" SPACE_PADDING SPACE_PADDING SPACE_PADDING, |
673 |
674 |
(terminal_has_colors()?" ":">"), text); |
(terminal_has_colors()?" ":">"), text); |
674 |
675 |
mvprintw(y, 0, "%s", screenLine); |
mvprintw(y, 0, "%s", screenLine); |
675 |
|
if(hstr->hicolor) { |
|
|
676 |
|
if(hstr->theme & HH_THEME_COLOR) { |
676 |
677 |
color_attr_on(COLOR_PAIR(1)); |
color_attr_on(COLOR_PAIR(1)); |
677 |
678 |
} else { |
} else { |
678 |
679 |
color_attr_off(A_REVERSE); |
color_attr_off(A_REVERSE); |
|
... |
... |
void loop_to_select(Hstr *hstr) |
811 |
812 |
hstr_curses_start(); |
hstr_curses_start(); |
812 |
813 |
// TODO move the code below to hstr_curses |
// TODO move the code below to hstr_curses |
813 |
814 |
color_init_pair(HH_COLOR_NORMAL, -1, -1); |
color_init_pair(HH_COLOR_NORMAL, -1, -1); |
814 |
|
if(hstr->hicolor) { |
|
|
815 |
|
if(hstr->theme & HH_THEME_COLOR) { |
815 |
816 |
color_init_pair(HH_COLOR_HIROW, COLOR_WHITE, COLOR_GREEN); |
color_init_pair(HH_COLOR_HIROW, COLOR_WHITE, COLOR_GREEN); |
816 |
817 |
color_init_pair(HH_COLOR_PROMPT, COLOR_BLUE, -1); |
color_init_pair(HH_COLOR_PROMPT, COLOR_BLUE, -1); |
817 |
818 |
color_init_pair(HH_COLOR_DELETE, COLOR_WHITE, COLOR_RED); |
color_init_pair(HH_COLOR_DELETE, COLOR_WHITE, COLOR_RED); |
818 |
|
color_init_pair(HH_COLOR_MATCH, COLOR_YELLOW, -1); |
|
|
819 |
|
|
|
820 |
|
color_init_pair(HH_COLOR_MATCH, COLOR_RED, -1); |
819 |
821 |
} |
} |
820 |
822 |
|
|
821 |
823 |
color_attr_on(COLOR_PAIR(HH_COLOR_NORMAL)); |
color_attr_on(COLOR_PAIR(HH_COLOR_NORMAL)); |