From: abellenir Date: Sat, 26 Jul 2014 05:01:53 +0000 (+0000) Subject: store full file paths X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=91aa287ea031ecc873983c772dc722b379da8105;p=archive%2Fafm.git store full file paths --- diff --git a/source/screen.c b/source/screen.c index e82d1fa..d48921b 100644 --- a/source/screen.c +++ b/source/screen.c @@ -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); diff --git a/source/workdir.c b/source/workdir.c index db748f1..eed6bb4 100644 --- a/source/workdir.c +++ b/source/workdir.c @@ -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); diff --git a/source/workdir.h b/source/workdir.h index ead0994..a325287 100644 --- a/source/workdir.h +++ b/source/workdir.h @@ -7,8 +7,11 @@ #ifndef WORKDIR_H #define WORKDIR_H +#include #include "vec.h" +static bool is_dir(char* path); + void workdir_deinit(void); typedef struct {