| File src/hstr.c changed (mode: 100644) (index 374c4d5..617c096) |
| 65 |
65 |
#define HH_CONFIG_HICOLOR "hicolor" |
#define HH_CONFIG_HICOLOR "hicolor" |
| 66 |
66 |
#define HH_CONFIG_CASE "casesensitive" |
#define HH_CONFIG_CASE "casesensitive" |
| 67 |
67 |
#define HH_CONFIG_SORTING "rawhistory" |
#define HH_CONFIG_SORTING "rawhistory" |
|
68 |
|
#define HH_CONFIG_DEBUG "debug" |
|
69 |
|
#define HH_CONFIG_WARN "warning" |
|
70 |
|
|
|
71 |
|
#define HH_DEBUG_LEVEL_NONE 0 |
|
72 |
|
#define HH_DEBUG_LEVEL_WARN 1 |
|
73 |
|
#define HH_DEBUG_LEVEL_DEBUG 2 |
| 68 |
74 |
|
|
| 69 |
75 |
#define HH_VIEW_RANKING 0 |
#define HH_VIEW_RANKING 0 |
| 70 |
76 |
#define HH_VIEW_HISTORY 1 |
#define HH_VIEW_HISTORY 1 |
| |
| ... |
... |
static unsigned selectionSize=0; |
| 120 |
126 |
static bool caseSensitive=FALSE; |
static bool caseSensitive=FALSE; |
| 121 |
127 |
static int historyView=HH_VIEW_RANKING; |
static int historyView=HH_VIEW_RANKING; |
| 122 |
128 |
static bool hicolor=FALSE; |
static bool hicolor=FALSE; |
|
129 |
|
static int debugLevel=0; |
| 123 |
130 |
static char screenLine[CMDLINE_LNG]; |
static char screenLine[CMDLINE_LNG]; |
| 124 |
131 |
static char cmdline[CMDLINE_LNG]; |
static char cmdline[CMDLINE_LNG]; |
| 125 |
132 |
|
|
| |
| ... |
... |
void get_env_configuration() |
| 136 |
143 |
if(strstr(hhconfig,HH_CONFIG_SORTING)) { |
if(strstr(hhconfig,HH_CONFIG_SORTING)) { |
| 137 |
144 |
historyView=TRUE; |
historyView=TRUE; |
| 138 |
145 |
} |
} |
|
146 |
|
if(strstr(hhconfig,HH_CONFIG_DEBUG)) { |
|
147 |
|
debugLevel=HH_DEBUG_LEVEL_DEBUG; |
|
148 |
|
} else { |
|
149 |
|
if(strstr(hhconfig,HH_CONFIG_WARN)) { |
|
150 |
|
debugLevel=HH_DEBUG_LEVEL_WARN; |
|
151 |
|
} |
|
152 |
|
} |
| 139 |
153 |
} |
} |
| 140 |
154 |
} |
} |
| 141 |
155 |
|
|
| |
| ... |
... |
void signal_callback_handler_ctrl_c(int signum) |
| 416 |
430 |
} |
} |
| 417 |
431 |
} |
} |
| 418 |
432 |
|
|
|
433 |
|
int seletion_source_remove(char* delete, HistoryItems *history) |
|
434 |
|
{ |
|
435 |
|
if(historyView!=HH_VIEW_FAVORITES) { |
|
436 |
|
return history_mgmt_remove(delete); |
|
437 |
|
} else { |
|
438 |
|
return favorites_remove(history->favorites, delete); |
|
439 |
|
} |
|
440 |
|
} |
|
441 |
|
|
| 419 |
442 |
void loop_to_select(HistoryItems *history) |
void loop_to_select(HistoryItems *history) |
| 420 |
443 |
{ |
{ |
| 421 |
444 |
signal(SIGINT, signal_callback_handler_ctrl_c); |
signal(SIGINT, signal_callback_handler_ctrl_c); |
| |
| ... |
... |
void loop_to_select(HistoryItems *history) |
| 478 |
501 |
msg=malloc(strlen(delete)+1); |
msg=malloc(strlen(delete)+1); |
| 479 |
502 |
strcpy(msg,delete); |
strcpy(msg,delete); |
| 480 |
503 |
selection_remove(delete, history); |
selection_remove(delete, history); |
| 481 |
|
deleteOccurences=history_mgmt_remove(delete); |
|
|
504 |
|
deleteOccurences=seletion_source_remove(delete, history); |
| 482 |
505 |
result=print_selection(maxHistoryItems, pattern, history); |
result=print_selection(maxHistoryItems, pattern, history); |
| 483 |
506 |
print_cmd_deleted_label(msg, deleteOccurences); |
print_cmd_deleted_label(msg, deleteOccurences); |
| 484 |
507 |
move(y, basex+strlen(pattern)); |
move(y, basex+strlen(pattern)); |
| File src/hstr_favorites.c changed (mode: 100644) (index afe316a..f5bc85b) |
| ... |
... |
void favorites_choose(FavoriteItems *favorites, char *choice) |
| 118 |
118 |
favorites_save(favorites); |
favorites_save(favorites); |
| 119 |
119 |
} |
} |
| 120 |
120 |
|
|
| 121 |
|
void favorites_remove(FavoriteItems *favorites, char *almostDead) |
|
|
121 |
|
int favorites_remove(FavoriteItems *favorites, char *almostDead) |
| 122 |
122 |
{ |
{ |
| 123 |
|
// TODO: keep slot you have, just change count > ? by pointer or strstr? |
|
|
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 |
|
} |
| 124 |
133 |
|
|
| 125 |
134 |
favorites_save(favorites); |
favorites_save(favorites); |
|
135 |
|
return 1; // true or false |
| 126 |
136 |
} |
} |
| 127 |
137 |
|
|
| 128 |
138 |
void favorites_save(FavoriteItems *favorites) |
void favorites_save(FavoriteItems *favorites) |
| File src/hstr_history.c changed (mode: 100644) (index 536292f..b199610) |
| ... |
... |
char *get_history_file_name() |
| 47 |
47 |
char *historyFile=getenv(ENV_VAR_HISTFILE); |
char *historyFile=getenv(ENV_VAR_HISTFILE); |
| 48 |
48 |
if(!historyFile || strlen(historyFile)==0) { |
if(!historyFile || strlen(historyFile)==0) { |
| 49 |
49 |
char *home = getenv(ENV_VAR_HOME); |
char *home = getenv(ENV_VAR_HOME); |
| 50 |
|
historyFile = malloc(strlen(home) + 1 + strlen(DEFAULT_HISTORY_FILE) + 1); |
|
| 51 |
|
strcat(strcat(strcpy(historyFile, home), "/"), DEFAULT_HISTORY_FILE); |
|
|
50 |
|
historyFile = malloc(strlen(home) + 1 + strlen(FILE_DEFAULT_HISTORY) + 1); |
|
51 |
|
strcat(strcat(strcpy(historyFile, home), "/"), FILE_DEFAULT_HISTORY); |
| 52 |
52 |
} |
} |
| 53 |
53 |
return historyFile; |
return historyFile; |
| 54 |
54 |
} |
} |
| |
| ... |
... |
HistoryItems *get_prioritized_history() |
| 153 |
153 |
|
|
| 154 |
154 |
FavoriteItems *favoriteItems=malloc(sizeof(FavoriteItems)); |
FavoriteItems *favoriteItems=malloc(sizeof(FavoriteItems)); |
| 155 |
155 |
favorites_init(favoriteItems); |
favorites_init(favoriteItems); |
| 156 |
|
favorites_load(favoriteItems); |
|
|
156 |
|
// TODO make favorites loading lazy > github issue |
|
157 |
|
favorites_get(favoriteItems); |
| 157 |
158 |
prioritizedHistory->favorites=favoriteItems; |
prioritizedHistory->favorites=favoriteItems; |
| 158 |
159 |
|
|
| 159 |
160 |
return prioritizedHistory; |
return prioritizedHistory; |
| File src/include/hstr_favorites.h changed (mode: 100644) (index 5a91a86..8b70b62) |
| ... |
... |
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 |
|
void favorites_remove(FavoriteItems *favorites, char *almostDead); |
|
|
30 |
|
int favorites_remove(FavoriteItems *favorites, char *almostDead); |
| 31 |
31 |
void favorites_destroy(FavoriteItems *favorites); |
void favorites_destroy(FavoriteItems *favorites); |
| 32 |
32 |
|
|
| 33 |
33 |
#endif |
#endif |
| File src/include/radixsort.h changed (mode: 100644) (index 5b2b607..30ed4f1) |
| 17 |
17 |
#include <stddef.h> |
#include <stddef.h> |
| 18 |
18 |
#include "hstr_utils.h" |
#include "hstr_utils.h" |
| 19 |
19 |
|
|
| 20 |
|
#define SLOT_SIZE 1000 |
|
|
20 |
|
#define RADIX_SLOT_SIZE 1000 |
|
21 |
|
|
|
22 |
|
#define RADIX_DEBUG_LEVEL_NONE 0 |
|
23 |
|
#define RADIX_DEBUG_LEVEL_WARN 1 |
|
24 |
|
#define RADIX_DEBUG_LEVEL_DEBUG 2 |
| 21 |
25 |
|
|
| 22 |
26 |
typedef struct radixitem { |
typedef struct radixitem { |
| 23 |
27 |
unsigned key; |
unsigned key; |
| |
| ... |
... |
typedef struct { |
| 43 |
47 |
RadixSlot **_slotDescriptors; |
RadixSlot **_slotDescriptors; |
| 44 |
48 |
unsigned _slotsCount; |
unsigned _slotsCount; |
| 45 |
49 |
unsigned _topIndexLimit; |
unsigned _topIndexLimit; |
|
50 |
|
unsigned _debug; |
| 46 |
51 |
} RadixSorter; |
} RadixSorter; |
| 47 |
52 |
|
|
| 48 |
53 |
void radixsort_init(RadixSorter *rs, unsigned keyLimit); |
void radixsort_init(RadixSorter *rs, unsigned keyLimit); |
|
54 |
|
void radixsort_set_debug_level(RadixSorter *rs, unsigned debugLevel); |
| 49 |
55 |
void radixsort_add(RadixSorter *rs, RadixItem *item); |
void radixsort_add(RadixSorter *rs, RadixItem *item); |
| 50 |
56 |
RadixItem *radix_cut(RadixSorter *rs, unsigned key, void *data); |
RadixItem *radix_cut(RadixSorter *rs, unsigned key, void *data); |
| 51 |
57 |
RadixItem **radixsort_dump(RadixSorter *rs); |
RadixItem **radixsort_dump(RadixSorter *rs); |
| File src/radixsort.c changed (mode: 100644) (index b8a01dc..b4e5c71) |
| 9 |
9 |
|
|
| 10 |
10 |
#include "include/radixsort.h" |
#include "include/radixsort.h" |
| 11 |
11 |
|
|
| 12 |
|
#define GET_TOP_INDEX(KEY) KEY/SLOT_SIZE |
|
| 13 |
|
#define GET_LOW_INDEX(KEY) KEY%SLOT_SIZE |
|
| 14 |
|
|
|
| 15 |
|
#define RADIX_DEBUG 1 |
|
|
12 |
|
#define GET_TOP_INDEX(KEY) KEY/RADIX_SLOT_SIZE |
|
13 |
|
#define GET_LOW_INDEX(KEY) KEY%RADIX_SLOT_SIZE |
| 16 |
14 |
|
|
| 17 |
15 |
void radixsort_init(RadixSorter *rs, unsigned keyLimit) |
void radixsort_init(RadixSorter *rs, unsigned keyLimit) |
| 18 |
16 |
{ |
{ |
| |
| ... |
... |
void radixsort_init(RadixSorter *rs, unsigned keyLimit) |
| 30 |
28 |
rs->_slotsCount=0; |
rs->_slotsCount=0; |
| 31 |
29 |
} |
} |
| 32 |
30 |
|
|
|
31 |
|
void radixsort_set_debug_level(RadixSorter *rs, unsigned debugLevel) |
|
32 |
|
{ |
|
33 |
|
rs->_debug=debugLevel; |
|
34 |
|
} |
|
35 |
|
|
| 33 |
36 |
RadixItem **radixsort_get_slot(RadixSorter *rs, unsigned topIndex) |
RadixItem **radixsort_get_slot(RadixSorter *rs, unsigned topIndex) |
| 34 |
37 |
{ |
{ |
| 35 |
|
RadixItem **slot=malloc(SLOT_SIZE * sizeof(RadixItem *)); |
|
| 36 |
|
memset(slot, 0, SLOT_SIZE * sizeof(RadixItem *)); |
|
|
38 |
|
RadixItem **slot=malloc(RADIX_SLOT_SIZE * sizeof(RadixItem *)); |
|
39 |
|
memset(slot, 0, RADIX_SLOT_SIZE * sizeof(RadixItem *)); |
| 37 |
40 |
|
|
| 38 |
41 |
RadixSlot *descriptor=malloc(sizeof(RadixSlot)); |
RadixSlot *descriptor=malloc(sizeof(RadixSlot)); |
| 39 |
42 |
descriptor->min=rs->keyLimit; |
descriptor->min=rs->keyLimit; |
| |
| ... |
... |
RadixItem **radixsort_get_slot(RadixSorter *rs, unsigned topIndex) |
| 48 |
51 |
void radixsort_add(RadixSorter *rs, RadixItem *item) |
void radixsort_add(RadixSorter *rs, RadixItem *item) |
| 49 |
52 |
{ |
{ |
| 50 |
53 |
if(item->key > rs->keyLimit) { |
if(item->key > rs->keyLimit) { |
| 51 |
|
if(RADIX_DEBUG) fprintf(stderr, "ERROR: Radix sort overflow - inserted key is bigger than limit (%u): %u\n", rs->keyLimit, item->key); |
|
|
54 |
|
if(rs->_debug > RADIX_DEBUG_LEVEL_NONE) { |
|
55 |
|
fprintf(stderr, "WARNING: Radix sort overflow - inserted key is bigger than limit (%u): %u\n", rs->keyLimit, item->key); |
|
56 |
|
} |
| 52 |
57 |
if(rs->optFloorAndInsertBigKeys) { |
if(rs->optFloorAndInsertBigKeys) { |
| 53 |
58 |
item->key = rs->keyLimit-1; |
item->key = rs->keyLimit-1; |
| 54 |
59 |
} else { |
} else { |
| |
| ... |
... |
void radixsort_stat(RadixSorter *rs, bool listing) |
| 174 |
179 |
printf("\n Radixsort (size/max/limit/slot count): %u %u %u %u", rs->size, rs->maxKey, rs->keyLimit, rs->_slotsCount); |
printf("\n Radixsort (size/max/limit/slot count): %u %u %u %u", rs->size, rs->maxKey, rs->keyLimit, rs->_slotsCount); |
| 175 |
180 |
unsigned memory=rs->_topIndexLimit * sizeof(RadixItem ***); |
unsigned memory=rs->_topIndexLimit * sizeof(RadixItem ***); |
| 176 |
181 |
memory+=memory; |
memory+=memory; |
| 177 |
|
memory+=rs->_slotsCount*(SLOT_SIZE * sizeof(RadixItem *)); |
|
|
182 |
|
memory+=rs->_slotsCount*(RADIX_SLOT_SIZE * sizeof(RadixItem *)); |
| 178 |
183 |
printf("\n Memory: %u\n", memory); |
printf("\n Memory: %u\n", memory); |
| 179 |
184 |
if(listing && rs->size>0) { |
if(listing && rs->size>0) { |
| 180 |
185 |
int t = GET_TOP_INDEX(rs->maxKey); |
int t = GET_TOP_INDEX(rs->maxKey); |