]> git.mdlowis.com Git - archive/afm.git/commitdiff
store full file paths
authorabellenir <a@bellenir.com>
Sat, 26 Jul 2014 05:01:53 +0000 (05:01 +0000)
committerabellenir <a@bellenir.com>
Sat, 26 Jul 2014 05:01:53 +0000 (05:01 +0000)
source/screen.c
source/workdir.c
source/workdir.h

index e82d1fa374e7589a594e0e9e48950615d3428abb..d48921b9a5c7b245a899b3a36fb18a65769a71d4 100644 (file)
@@ -136,6 +136,7 @@ static void screen_frame_free(void* p_frame_ptr) {
 void screen_frame_draw_files(frame_t* frame){
     int i = frame->workdir->top_index;
     int rows, cols;
+    int pathlength = strlen(frame->workdir->path);
     getmaxyx(frame->p_win, rows, cols);
     //draw path
     wattron(frame->p_win, A_UNDERLINE);
@@ -143,11 +144,14 @@ void screen_frame_draw_files(frame_t* frame){
     wattroff(frame->p_win, A_UNDERLINE);
     //list files
     while (i < vec_size(frame->workdir->vfiles)){
+        char* filename = (char*)vec_at(frame->workdir->vfiles, i);
+        if(strcmp(filename, "..") != 0) filename = &(filename[pathlength]);
+        if(filename[0] == '/') filename = &(filename[1]);
         if(frame == state_get_focused_frame() && i == frame->workdir->idx){
             wattron(frame->p_win, A_STANDOUT);
             wattron(frame->p_win, A_BOLD);
         }
-        mvwaddnstr(frame->p_win, FrameTopBuffer+i-frame->workdir->top_index, 1, vec_at(frame->workdir->vfiles, i), cols-2);
+        mvwaddnstr(frame->p_win, FrameTopBuffer+i-frame->workdir->top_index, 1, filename, cols-2);
         if(frame == state_get_focused_frame() && i == frame->workdir->idx){
             wattroff(frame->p_win, A_STANDOUT);
             wattroff(frame->p_win, A_BOLD);
index db748f1cf2a82467a7207bf050ad9db2891a9740..eed6bb45ad889302f7538009df6a2bd19e9efe9b 100644 (file)
@@ -87,14 +87,9 @@ char* workdir_cd_up(WorkDir_T* wd){
 
 //go down a directory: append '/subdir' to path
 char* workdir_cd_down(WorkDir_T* wd){
-    char* subdir = vec_at(wd->vfiles, wd->idx);
-    int oldpathlen = strlen(wd->path);
-    int newpathlen = oldpathlen + strlen(subdir) + 2; //+2, for slash & end null;
-    char *newpath = mem_allocate(sizeof(char)*newpathlen, NULL);
-    strcpy(newpath, wd->path);
-    if(oldpathlen == 0 || wd->path[oldpathlen-1] != '/') strcat(newpath, "/");
-    strcat(newpath, subdir);
-    return newpath;
+       char* newpath = (char*) vec_at(wd->vfiles, wd->idx);
+       mem_retain(newpath);
+       return newpath;
 }
 
 void workdir_cd(WorkDir_T* wd) {
@@ -118,6 +113,7 @@ void workdir_ls(WorkDir_T* wd){
     ssize_t read;
     char* filename = 0;
     FILE* ls;
+    int pathlength = strlen(wd->path);
     //free old file vector
     if(wd->vfiles) mem_release(wd->vfiles);
     //open new ls pipe
@@ -132,9 +128,11 @@ void workdir_ls(WorkDir_T* wd){
     else
         mem_release(dotdot);
     while ((read = getline(&filename, &len, ls)) != -1){
-        char* lol = mem_allocate(read*sizeof(char), NULL);
+        char* lol = mem_allocate((pathlength+read+1)*sizeof(char), NULL);
         filename[read-1]=0; //remove ending newline
-        strcpy(lol, filename);
+        strcpy(lol, wd->path);
+        if (wd->path[pathlength-1] != '/') strcat(lol, "/");
+        strcat(lol, filename);
         vec_push_back(wd->vfiles, lol);
     }
     free(filename);
index ead09947327fc7a31167c5a805b7857cd1011394..a325287269ecf19e981dd3bd6c0eeceb97b9f9ea 100644 (file)
@@ -7,8 +7,11 @@
 #ifndef WORKDIR_H
 #define WORKDIR_H
 
+#include <stdbool.h>
 #include "vec.h"
 
+static bool is_dir(char* path);
+
 void workdir_deinit(void);
 
 typedef struct {