}
static void handle_scroll_to_top(void) {
- workdir_scroll_to_top(state_get_focused_frame()->workdir);
+ workdir_scroll_to_top(state_get_focused_frame()->workdir);
}
static void handle_scroll_to_bottom(void) {
- workdir_scroll_to_bot(state_get_focused_frame()->workdir);
+ workdir_scroll_to_bot(state_get_focused_frame()->workdir);
}
static void handle_page_up(void){
- screen_frame_page_up(state_get_focused_frame());
+ screen_frame_page_up(state_get_focused_frame());
}
static void handle_page_down(void){
- screen_frame_page_down(state_get_focused_frame());
+ screen_frame_page_down(state_get_focused_frame());
}
static void handle_expand(void){
- workdir_expand_selected(state_get_focused_frame()->workdir);
+ workdir_expand_selected(state_get_focused_frame()->workdir);
}
static void handle_collapse(void){
- workdir_collapse_selected(state_get_focused_frame()->workdir);
+ workdir_collapse_selected(state_get_focused_frame()->workdir);
}
static void search_mode(void){
- int searchcap = 8;
- char* searchstr = malloc(sizeof(char)*searchcap);
- int searchlen = 0;
- bool searching = true;
- state_set_mode(MODE_SEARCH);
- while(searching){
- char inpt = getch();
- if(inpt == ERR){ /* do nothing */
- }else if(inpt == ESC){
- searching = false;
- }else if (inpt == '\n'){
- searching = false;
- handle_cd();
- }else{
- if(searchlen+1 >= searchcap){
- searchcap *= 2;
- searchstr = realloc(searchstr, sizeof(char)*searchcap);
- }
- searchstr[searchlen] = inpt;
- searchlen += 1;
- searchstr[searchlen] = 0;
- workdir_seek(state_get_focused_frame()->workdir, searchstr);
- }
+ int searchcap = 8;
+ char* searchstr = malloc(sizeof(char)*searchcap);
+ int searchlen = 0;
+ bool searching = true;
+ state_set_mode(MODE_SEARCH);
+ while(searching){
+ char inpt = getch();
+ if(inpt == ERR){ /* do nothing */
+ }else if(inpt == ESC){
+ searching = false;
+ }else if (inpt == '\n'){
+ searching = false;
+ handle_cd();
+ }else{
+ if(searchlen+1 >= searchcap){
+ searchcap *= 2;
+ searchstr = realloc(searchstr, sizeof(char)*searchcap);
+ }
+ searchstr[searchlen] = inpt;
+ searchlen += 1;
+ searchstr[searchlen] = 0;
+ workdir_seek(state_get_focused_frame()->workdir, searchstr);
+ }
if(state_get_screen_dirty()) screen_update();
- }
- free(searchstr);
- state_set_mode(MODE_NORMAL);
+ }
+ free(searchstr);
+ state_set_mode(MODE_NORMAL);
}
static binding_t Default_Bindings[] = {
}
static void screen_frame_scroll(frame_t* p_frame){
- int rows,cols;
- getmaxyx(p_frame->p_win, rows, cols);
+ int rows,cols;
+ getmaxyx(p_frame->p_win, rows, cols);
if(p_frame->workdir->idx < p_frame->top_index)
p_frame->top_index = p_frame->workdir->idx;
else if (p_frame->top_index < p_frame->workdir->idx-(rows-FrameTopBuffer-FrameBotBuffer))
mvwaddnstr(frame->p_win, frame_i, 1, file->name, cols-2);
frame_i++;
if(file->expanded){
- mvwprintw(frame->p_win, frame_i, 1, " owned by user id %d, group id %d", file->uid, file->gid);
- frame_i++;
- }
+ mvwprintw(frame->p_win, frame_i, 1, " owned by user id %d, group id %d", file->uid, file->gid);
+ frame_i++;
+ }
if(frame == state_get_focused_frame() && file_i == frame->workdir->idx){
wattroff(frame->p_win, A_STANDOUT | A_BOLD);
}
}
int realrows(frame_t* p_frame){
- int rows, cols;
- getmaxyx(p_frame->p_win, rows, cols);
- return rows - FrameTopBuffer - FrameBotBuffer;
+ int rows, cols;
+ getmaxyx(p_frame->p_win, rows, cols);
+ return rows - FrameTopBuffer - FrameBotBuffer;
}
void screen_frame_page_up(frame_t* p_frame){
- workdir_set_idx(p_frame->workdir, p_frame->workdir->idx - realrows(p_frame));
+ workdir_set_idx(p_frame->workdir, p_frame->workdir->idx - realrows(p_frame));
}
void screen_frame_page_down(frame_t* p_frame){
- workdir_set_idx(p_frame->workdir, p_frame->workdir->idx+realrows(p_frame));
+ workdir_set_idx(p_frame->workdir, p_frame->workdir->idx+realrows(p_frame));
}
} frame_t;
enum ColorPairs {
- DIRECTORY = 1
+ DIRECTORY = 1
};
void screen_frame_page_up(frame_t* p_frame);
}
frame_t* state_get_focused_frame(void) {
- return Focused_Frame;
+ return Focused_Frame;
}
void state_set_focused_frame(frame_t *p_frame)
}
Mode_T state_get_mode(){
- return CurrentMode;
+ return CurrentMode;
}
void state_set_mode(Mode_T m){
- CurrentMode = m;
+ CurrentMode = m;
}
}
void populate_owner_info(File_T* p_file){
- struct stat s;
- if(stat(p_file->path, &s) == 0){
- p_file->uid = s.st_uid;
- p_file->gid = s.st_gid;
- } //else error
+ struct stat s;
+ if(stat(p_file->path, &s) == 0){
+ p_file->uid = s.st_uid;
+ p_file->gid = s.st_gid;
+ } //else error
}
void workdir_free(void* p_wd);
}
void workdir_set_idx(WorkDir_T* wd, int idx){
- wd->idx = idx;
- if(idx < 0) wd->idx = 0;
- else if(idx >= vec_size(wd->vfiles))
- wd->idx = vec_size(wd->vfiles)-1;
- state_set_screen_dirty(true);
+ wd->idx = idx;
+ if(idx < 0) wd->idx = 0;
+ else if(idx >= vec_size(wd->vfiles))
+ wd->idx = vec_size(wd->vfiles)-1;
+ state_set_screen_dirty(true);
}
void workdir_next(WorkDir_T* wd) {
- workdir_set_idx(wd, wd->idx+1);
+ workdir_set_idx(wd, wd->idx+1);
}
void workdir_prev(WorkDir_T* wd) {
- workdir_set_idx(wd, wd->idx-1);
+ workdir_set_idx(wd, wd->idx-1);
}
void workdir_scroll_to_top(WorkDir_T* wd){
- workdir_set_idx(wd, 0);
+ workdir_set_idx(wd, 0);
}
void workdir_scroll_to_bot(WorkDir_T* wd){
- workdir_set_idx(wd, vec_size(wd->vfiles) - 1);
+ workdir_set_idx(wd, vec_size(wd->vfiles) - 1);
}
void workdir_cd(WorkDir_T* wd) {
}
strcat(file->path, filename);
file->name = &(file->path[filename_offset]);
- populate_owner_info(file);
- file->expanded = false;
+ populate_owner_info(file);
+ file->expanded = false;
vec_push_back(wd->vfiles, file);
}
free(filename);
}
void workdir_seek(WorkDir_T* wd, char* search){
- int i = 0;
- if(strcmp(((File_T*)vec_at(wd->vfiles, 0))->name, "..") == 0) i++;
- while(i < vec_size(wd->vfiles) && strcmp(((File_T*)vec_at(wd->vfiles, i))->name, search) < 0) i++;
- workdir_set_idx(wd, i);
+ int i = 0;
+ if(strcmp(((File_T*)vec_at(wd->vfiles, 0))->name, "..") == 0) i++;
+ while(i < vec_size(wd->vfiles) && strcmp(((File_T*)vec_at(wd->vfiles, i))->name, search) < 0) i++;
+ workdir_set_idx(wd, i);
}
void workdir_expand_selected(WorkDir_T* wd){
- ((File_T*)vec_at(wd->vfiles, wd->idx))->expanded = true;
- state_set_screen_dirty(true);
+ ((File_T*)vec_at(wd->vfiles, wd->idx))->expanded = true;
+ state_set_screen_dirty(true);
}
void workdir_collapse_selected(WorkDir_T* wd){
- ((File_T*)vec_at(wd->vfiles, wd->idx))->expanded = false;
- state_set_screen_dirty(true);
+ ((File_T*)vec_at(wd->vfiles, wd->idx))->expanded = false;
+ state_set_screen_dirty(true);
}
} WorkDir_T;
typedef struct {
- char* path;
- char* name;
- int uid;
- int gid;
- bool expanded;
+ char* path;
+ char* name;
+ int uid;
+ int gid;
+ bool expanded;
} File_T;
WorkDir_T* workdir_new(char* path);