xaizek / hstr (License: Apachev2) (since 2018-12-07)
Bash and Zsh shell history suggest box - easily view, navigate, search and manage your command history.
Commit 5c89871692e0787ebe89305ffad71465ed4a678e

Fixing removal from favorites; label message showing successful add.
Author: Martin Dvorak
Author date (UTC): 2014-04-12 09:58
Committer name: Martin Dvorak
Committer date (UTC): 2014-04-12 09:58
Parent(s): c9d9cff9d9d8176b7c9abd43a3679b92b5b9a03e
Signing key:
Tree: 8234766c29dfcda5a1c6a8d767171d278bc90926
File Lines added Lines deleted
src/hstr.c 25 20
src/hstr_favorites.c 40 36
src/include/hstr_favorites.h 1 1
File src/hstr.c changed (mode: 100644) (index 946df91..aacea3a)
... ... static const char *HELP_STRING=
119 119 "\n"; "\n";
120 120
121 121 static const char *LABEL_HELP= static const char *LABEL_HELP=
122 "Type to filter, UP/DOWN to move, DEL to remove, TAB to select, C-g to cancel";
122 "Type to filter, UP/DOWN move, DEL remove, TAB select, C-f add favorite, C-g cancel";
123 123
124 124 static char **selection=NULL; static char **selection=NULL;
125 125 static unsigned selectionSize=0; static unsigned selectionSize=0;
 
... ... void print_cmd_deleted_label(char *cmd, int occurences)
200 200 refresh(); refresh();
201 201 } }
202 202
203 void print_cmd_added_favorite_label(char *cmd)
204 {
205 snprintf(screenLine, getmaxx(stdscr), "Command '%s' added to favorites (C-/ to show favorites)", cmd);
206 if(hicolor) {
207 color_attr_on(COLOR_PAIR(4));
208 color_attr_on(A_BOLD);
209 }
210 mvprintw(Y_OFFSET_HELP, 0, screenLine);
211 if(hicolor) {
212 color_attr_off(A_BOLD);
213 color_attr_on(COLOR_PAIR(1));
214 }
215 clrtoeol();
216 refresh();
217 }
218
203 219 void print_history_label(HistoryItems *history) void print_history_label(HistoryItems *history)
204 220 { {
205 221 int width=getmaxx(stdscr); int width=getmaxx(stdscr);
206 snprintf(screenLine, width, "- HISTORY - case:%s (C-t) - view:%s (C-/) - %d/%d ",
222 snprintf(screenLine, width, "- HISTORY - match:%s (C-t) - view:%s (C-/) - %d/%d ",
207 223 (caseSensitive?"sensitive":"insensitive"), (caseSensitive?"sensitive":"insensitive"),
208 224 HH_VIEW_LABELS[historyView], HH_VIEW_LABELS[historyView],
209 225 history->count, history->count,
 
... ... void highlight_selection(int selectionCursorPosition, int previousSelectionCurso
404 420 void selection_remove(char *cmd, HistoryItems *history) void selection_remove(char *cmd, HistoryItems *history)
405 421 { {
406 422 if(historyView==HH_VIEW_FAVORITES) { if(historyView==HH_VIEW_FAVORITES) {
407 if(history->favorites->count) {
408
409 selection must be remade & shown OR move the favorites remove code to here
410
411 int i, w;
412 for(i=0, w=0; i<history->count; i++) {
413 if(strcmp(history->items[i], cmd)) {
414 history->items[w]=history->items[i];
415 w++;
416 }
417 }
418 history->count=w;
419
420 }
423 favorites_remove(history->favorites, cmd);
421 424 } else { } else {
422 425 if(history->count) { if(history->count) {
423 426 int i, w; int i, w;
 
... ... void loop_to_select(HistoryItems *history)
477 480 print_selection(get_max_history_items(stdscr), NULL, history); print_selection(get_max_history_items(stdscr), NULL, history);
478 481 color_attr_off(COLOR_PAIR(HH_COLOR_NORMAL)); color_attr_off(COLOR_PAIR(HH_COLOR_NORMAL));
479 482
480 bool done=FALSE, skip=TRUE, executeResult=FALSE, lowercase=TRUE, justDeleted=FALSE;
483 bool done=FALSE, skip=TRUE, executeResult=FALSE, lowercase=TRUE, printDefaultLabel=FALSE;
481 484 int basex=print_prompt(stdscr); int basex=print_prompt(stdscr);
482 485 int x=basex, y=0, c, cursorX=0, cursorY=0, maxHistoryItems, deleteOccurences; int x=basex, y=0, c, cursorX=0, cursorY=0, maxHistoryItems, deleteOccurences;
483 486 int width=getmaxx(stdscr); int width=getmaxx(stdscr);
 
... ... void loop_to_select(HistoryItems *history)
506 509 continue; continue;
507 510 } }
508 511
509 if(justDeleted) {
512 if(printDefaultLabel) {
510 513 print_help_label(); print_help_label();
511 justDeleted=FALSE;
514 printDefaultLabel=FALSE;
512 515 } }
513 516
514 517 switch (c) { switch (c) {
 
... ... void loop_to_select(HistoryItems *history)
522 525 result=print_selection(maxHistoryItems, pattern, history); result=print_selection(maxHistoryItems, pattern, history);
523 526 print_cmd_deleted_label(msg, deleteOccurences); print_cmd_deleted_label(msg, deleteOccurences);
524 527 move(y, basex+strlen(pattern)); move(y, basex+strlen(pattern));
525 justDeleted=TRUE;
528 printDefaultLabel=TRUE;
526 529 } }
527 530 print_history_label(history); print_history_label(history);
528 531 break; break;
 
... ... void loop_to_select(HistoryItems *history)
546 549 favorites_choose(history->favorites, result); favorites_choose(history->favorites, result);
547 550 } else { } else {
548 551 favorites_add(history->favorites, result); favorites_add(history->favorites, result);
552 print_cmd_added_favorite_label(result);
553 printDefaultLabel=TRUE;
549 554 } }
550 555 result=print_selection(maxHistoryItems, pattern, history); result=print_selection(maxHistoryItems, pattern, history);
551 556 selectionCursorPosition=0; selectionCursorPosition=0;
File src/hstr_favorites.c changed (mode: 100644) (index f5bc85b..bdfd272)
... ... void favorites_get(FavoriteItems *favorites)
82 82 } }
83 83 } }
84 84
85 void favorites_save(FavoriteItems *favorites)
86 {
87 char *fileName=favorites_get_filename();
88
89 if(favorites->count) {
90 FILE *output_file = fopen(fileName, "wb");
91 rewind(output_file);
92 int i;
93 for(i=0; i<favorites->count; i++) {
94 if(fwrite(favorites->items[i], sizeof(char), strlen(favorites->items[i]), output_file)==-1) {
95 exit(EXIT_FAILURE);
96 }
97 if(fwrite("\n", sizeof(char), strlen("\n"), output_file)==-1) {
98 exit(EXIT_FAILURE);
99 }
100 }
101 fclose(output_file);
102 } else {
103 if(access(fileName, F_OK) != -1) {
104 FILE *output_file = fopen(fileName, "wb");
105 fclose(output_file);
106 }
107 }
108
109 free(fileName);
110 }
111
85 112 void favorites_add(FavoriteItems *favorites, char *newFavorite) void favorites_add(FavoriteItems *favorites, char *newFavorite)
86 113 { {
87 114 if(favorites->count) { if(favorites->count) {
 
... ... void favorites_choose(FavoriteItems *favorites, char *choice)
118 145 favorites_save(favorites); favorites_save(favorites);
119 146 } }
120 147
121 int favorites_remove(FavoriteItems *favorites, char *almostDead)
122 {
123 int i, j=0;
124 for(i=0; i<favorites->count && j<favorites->count; i++) {
125 if(j) {
126 favorites->items[i]=favorites->items[j++];
127 } else {
128 if(favorites->items[i] == almostDead) {
129 j=i+1;
130 }
131 }
132 }
133
134 favorites_save(favorites);
135 return 1; // true or false
136 }
137
138 void favorites_save(FavoriteItems *favorites)
148 bool favorites_remove(FavoriteItems *favorites, char *almostDead)
139 149 { {
140 char *fileName=favorites_get_filename();
141
142 150 if(favorites->count) { if(favorites->count) {
143 FILE *output_file = fopen(fileName, "wb");
144 rewind(output_file);
145 int i;
146 for(i=0; i<favorites->count; i++) {
147 if(fwrite(favorites->items[i], sizeof(char), strlen(favorites->items[i]), output_file)==-1) {
148 exit(EXIT_FAILURE);
149 }
150 if(fwrite("\n", sizeof(char), strlen("\n"), output_file)==-1) {
151 exit(EXIT_FAILURE);
151 int i, j;
152 for(i=0, j=0; i<favorites->count && j<favorites->count; i++, j++) {
153 if(!strcmp(favorites->items[i], almostDead)) {
154 j=i+1;
155 favorites->count--;
156 } else {
157 if(j>i) {
158 favorites->items[i]=favorites->items[j];
159 }
152 160 } }
153 161 } }
154 fclose(output_file);
162 favorites_save(favorites);
163 return true;
155 164 } else { } else {
156 if(access(fileName, F_OK) != -1) {
157 FILE *output_file = fopen(fileName, "wb");
158 fclose(output_file);
159 }
165 return false;
160 166 } }
161
162 free(fileName);
163 167 } }
164 168
165 169 void favorites_destroy(FavoriteItems *favorites) void favorites_destroy(FavoriteItems *favorites)
File src/include/hstr_favorites.h changed (mode: 100644) (index 8b70b62..9140d88)
... ... void favorites_init(FavoriteItems *favorites);
27 27 void favorites_get(FavoriteItems *favorites); void favorites_get(FavoriteItems *favorites);
28 28 void favorites_add(FavoriteItems *favorites, char *favorite); void favorites_add(FavoriteItems *favorites, char *favorite);
29 29 void favorites_choose(FavoriteItems *favorites, char *choice); void favorites_choose(FavoriteItems *favorites, char *choice);
30 int favorites_remove(FavoriteItems *favorites, char *almostDead);
30 bool favorites_remove(FavoriteItems *favorites, char *almostDead);
31 31 void favorites_destroy(FavoriteItems *favorites); void favorites_destroy(FavoriteItems *favorites);
32 32
33 33 #endif #endif
Hints

Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://code.reversed.top/user/xaizek/hstr

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@code.reversed.top/user/xaizek/hstr

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a pull request:
... clone the repository ...
... make some changes and some commits ...
git push origin master