]> git.mdlowis.com Git - archive/afm.git/commitdiff
add additional file info
authorabellenir <a@bellenir.com>
Sat, 26 Jul 2014 09:46:48 +0000 (09:46 +0000)
committerabellenir <a@bellenir.com>
Sat, 26 Jul 2014 09:46:48 +0000 (09:46 +0000)
source/input.c
source/screen.c
source/workdir.c
source/workdir.h

index 8b1f2a0801b932f8be384790262f9763e58f1721..883305e23d99b0f2e2d23127a42405b61710f485 100644 (file)
@@ -47,6 +47,12 @@ static void handle_page_up(void){
 static void handle_page_down(void){
        screen_frame_page_down(state_get_focused_frame());
 }
+static void handle_expand(void){
+       workdir_expand_selected(state_get_focused_frame()->workdir);
+}
+static void handle_collapse(void){
+       workdir_collapse_selected(state_get_focused_frame()->workdir);
+}
 
 
 static void search_mode(void){
@@ -92,6 +98,8 @@ static binding_t Default_Bindings[] = {
     { "G",  &handle_scroll_to_bottom },
     { "U",  &handle_page_up },
     { "D",  &handle_page_down },
+    { "l",  &handle_expand },
+    { "h",  &handle_collapse },
     //{ "wj", NULL },
     //{ "wk", NULL },
 };
index 8e2d8f42c45a1692f3e539b2f777298084c28a97..cf68a14f2c96e7663199a3c1ad1db4e09395795b 100644 (file)
@@ -144,31 +144,36 @@ static void screen_frame_scroll(frame_t* p_frame){
 }
 
 void screen_frame_draw_files(frame_t* frame){
-    int i;
+    int file_i, frame_i = FrameTopBuffer;
     int rows, cols;
     int pathlength = strlen(frame->workdir->path);
     getmaxyx(frame->p_win, rows, cols);
     screen_frame_scroll(frame);
-    i = frame->top_index;
+    file_i = frame->top_index;
     //draw path
     wattron(frame->p_win, A_UNDERLINE);
     mvwaddnstr(frame->p_win, 1, 1, frame->workdir->path, cols-2);
     wattroff(frame->p_win, A_UNDERLINE);
     //list files
-    while (i < vec_size(frame->workdir->vfiles)){
-        File_T* file = (File_T*)vec_at(frame->workdir->vfiles, i);
+    while (file_i < vec_size(frame->workdir->vfiles)){
+        File_T* file = (File_T*)vec_at(frame->workdir->vfiles, file_i);
         bool dir = is_dir(file->path);
-        if(frame == state_get_focused_frame() && i == frame->workdir->idx){
+        if(frame == state_get_focused_frame() && file_i == frame->workdir->idx){
             wattron(frame->p_win, A_STANDOUT | A_BOLD);
         }
         if(dir) wattron(frame->p_win, COLOR_PAIR(DIRECTORY));
-        mvwaddnstr(frame->p_win, FrameTopBuffer+i-frame->top_index, 1, file->name, cols-2);
-        if(frame == state_get_focused_frame() && i == frame->workdir->idx){
+        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++;
+               }
+        if(frame == state_get_focused_frame() && file_i == frame->workdir->idx){
             wattroff(frame->p_win, A_STANDOUT | A_BOLD);
         }
         if(dir) wattroff(frame->p_win, COLOR_PAIR(DIRECTORY));
-        i++;
-        if((FrameTopBuffer+i-frame->top_index+FrameBotBuffer) > rows) break;
+        file_i++;
+        if((frame_i+FrameBotBuffer) > rows) break;
     }
 }
 
index dc7ee049851bbbaa50e5ca2faf12b509674b15d2..a8d37aeda2d1c5d282c11f94b049b89a8f58b54b 100644 (file)
@@ -22,6 +22,14 @@ bool is_dir(char* path) {
     return ((stat(path, &s) == 0) && (s.st_mode & S_IFDIR));
 }
 
+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
+}
+
 void workdir_free(void* p_wd);
 
 WorkDir_T* workdir_new(char* path){
@@ -88,6 +96,7 @@ File_T* make_dotdot(char* path){
     int last_slash = 0;
     if(strcmp(path, "/") != 0){
         dd = mem_allocate(sizeof(File_T), &file_free);
+        dd->expanded = false;
         dd->name = mem_allocate(sizeof(char)*3, NULL);
         strcpy(dd->name, "..");
         for(int i=0; path[i] != 0; i++){
@@ -139,6 +148,8 @@ void workdir_ls(WorkDir_T* wd){
         }
         strcat(file->path, filename);
         file->name = &(file->path[filename_offset]);
+               populate_owner_info(file);
+               file->expanded = false;
         vec_push_back(wd->vfiles, file);
     }
     free(filename);
@@ -153,4 +164,12 @@ void workdir_seek(WorkDir_T* wd, char* search){
        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);
+}
+void workdir_collapse_selected(WorkDir_T* wd){
+       ((File_T*)vec_at(wd->vfiles, wd->idx))->expanded = false;
+       state_set_screen_dirty(true);
+}
 
index 9e436ba5d49450aee30e8eb61dec7515db484d32..a88c7bf949502cb123f3ceb75276b3b7ea6b8775 100644 (file)
@@ -21,6 +21,9 @@ typedef struct {
 typedef struct {
        char* path;
        char* name;
+       int uid;
+       int gid;
+       bool expanded;
 } File_T;
 
 WorkDir_T* workdir_new(char* path);
@@ -42,4 +45,7 @@ void workdir_seek(WorkDir_T* wd, char* search);
 void workdir_scroll_to_top(WorkDir_T* wd);
 void workdir_scroll_to_bot(WorkDir_T* wd);
 
+void workdir_expand_selected(WorkDir_T* wd);
+void workdir_collapse_selected(WorkDir_T* wd);
+
 #endif /* WORKDIR_H */