implementation of jump_to_dir
This commit is contained in:
@@ -519,11 +519,56 @@ void not_implemented(int passes, int index){
|
||||
mvaddstr(terminal_height-1, strlen(key_binding[index].comment) + strlen("\t"), "is not yet implemented");
|
||||
}
|
||||
void jump_to_dir(int passes, int index){
|
||||
if ((char*)key_binding[index].black_magic) {
|
||||
if (chdir(getenv((char*)key_binding[index].black_magic+1)) != 0) {
|
||||
FAIL("jump_to_dir", "jumping to black_magic in config.h failed");
|
||||
char *ch = (char*)key_binding[index].black_magic;
|
||||
char slash = 0;
|
||||
unsigned int env_len = 0;
|
||||
while (*ch != '\0') {
|
||||
if (*ch == '/') {
|
||||
slash = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
env_len++;
|
||||
ch++;
|
||||
}
|
||||
char *env_str = NULL;
|
||||
char *env_parsed = NULL;
|
||||
char *path = NULL;
|
||||
ch = (char*)key_binding[index].black_magic;
|
||||
if (*ch == '/') {
|
||||
path = malloc(strlen((char*)key_binding[index].black_magic));
|
||||
strcpy(path, (char*)key_binding[index].black_magic);
|
||||
} else if (slash) {
|
||||
env_str = malloc(env_len * sizeof(char));
|
||||
memcpy(env_str, (char*)key_binding[index].black_magic +1, env_len);
|
||||
env_str[env_len-1] = '\0';
|
||||
env_parsed = getenv(env_str);
|
||||
if (env_parsed) {
|
||||
path = concat(env_parsed, (char*)key_binding[index].black_magic + env_len);
|
||||
} else {
|
||||
path = malloc(strlen((char*)key_binding[index].black_magic));
|
||||
strcpy(path, (char*)key_binding[index].black_magic);
|
||||
}
|
||||
} else {
|
||||
env_parsed = getenv((char*)key_binding[index].black_magic +1);
|
||||
if (env_parsed) {
|
||||
path = malloc(strlen(env_parsed)+1);
|
||||
strcpy(path, env_parsed);
|
||||
} else {
|
||||
path = malloc(strlen((char*)key_binding[index].black_magic));
|
||||
strcpy(path, (char*)key_binding[index].black_magic);
|
||||
}
|
||||
}
|
||||
if (chdir(path) != 0) {
|
||||
FAIL("jump_to_dir", "jumping to black_magic in config.h failed");
|
||||
}
|
||||
|
||||
/*env_parsed shall not be modified (read: free'd) - the man page*/
|
||||
if (env_str) {
|
||||
free(env_str);
|
||||
}
|
||||
if(path) {
|
||||
free(path);
|
||||
}
|
||||
status |= (STATUS_RUN_BACKEND | STATUS_UPDATE_SCREEN_MASK | STATUS_RELOAD_DIRECTORY);
|
||||
}
|
||||
void order_by(int passes, int index){
|
||||
|
Reference in New Issue
Block a user