creating new files and dirs possile, dedicated update screen key

This commit is contained in:
nova
2025-07-03 01:24:57 +02:00
parent f320449572
commit 539af5fd65
3 changed files with 59 additions and 1 deletions

View File

@ -18,8 +18,14 @@ static mimetype mimetype_default_cmd[] = {
static binding key_binding[] = {
/*key action */
/*you cannot add bindings that include other bindings in its entirety
* possible: mk, mf
* not possible: gg, ggg
* trying to use ggg will always fail as it will execute gg first instead, resetting the input buffer, thus never
* reaching ggg */
{ "q", quit_program },
{ " ", toggle_selection }, /* on hovered file/directory */
{ "u", update }, /* executes the entire backend and redrawing of the screen */
{ "h", move_right }, /* moves one dir up */
{ "t", move_down },
@ -34,6 +40,9 @@ static binding key_binding[] = {
{ "gg", jump_top },
{ "G", jump_bottom },
{ "mk", makedir },
{ "mf", makefile },
{ "a", toggle_hidden_files },
};
static unsigned long binding_count = sizeof(key_binding) / sizeof(binding);

View File

@ -355,7 +355,54 @@ void delete(){
}
void makedir(){
mkdir("mk", 755); /*magic number from default permissions as created by mkdir*/
btm_buffer = "create dir: ";
status = STATUS_UPDATE_SCREEN_0;
werase(win_b);
mvwin(win_b, terminal_height-6, 0);
wresize(win_b, 5, terminal_width/3); /*the div3 just looks cool*/
render_pass();
unsigned long local_width;
unsigned long local_height;
getmaxyx(win_b, local_height, local_width);
/* TODO(2025-07-03T01:19:55) fix fixed buffer size */
char *str = malloc(255);
memset(str, ' ', 255);
int err = read_string(win_b, local_height - 1, 0, str);
if (!err) {
btm_buffer = concat(btm_buffer, str);
mkdir(str, 755); /*magic number from default permissions as created by mkdir*/
}
free(str);
status |= (STATUS_RUN_BACKEND | STATUS_UPDATE_SCREEN_MASK | STATUS_RELOAD_DIRECTORY | STATUS_UPDATE_SCREEN_RELOAD_FULL);
}
void makefile(){
btm_buffer = "create file: ";
status = STATUS_UPDATE_SCREEN_0;
werase(win_b);
mvwin(win_b, terminal_height-6, 0);
wresize(win_b, 5, terminal_width/3); /*the div3 just looks cool*/
render_pass();
unsigned long local_width;
unsigned long local_height;
getmaxyx(win_b, local_height, local_width);
/* TODO(2025-07-03T01:19:49) fix fixed buffer size */
char *str = malloc(255);
memset(str, ' ', 255);
int err = read_string(win_b, local_height - 1, 0, str);
if (!err) {
btm_buffer = concat(btm_buffer, str);
FILE *fp;
fp = fopen(str, "w");
fclose(fp);
}
free(str);
status |= (STATUS_RUN_BACKEND | STATUS_UPDATE_SCREEN_MASK | STATUS_RELOAD_DIRECTORY | STATUS_UPDATE_SCREEN_RELOAD_FULL);
}
void update() {
status |= (STATUS_RUN_BACKEND | STATUS_UPDATE_SCREEN_MASK | STATUS_RELOAD_DIRECTORY | STATUS_UPDATE_SCREEN_RELOAD_FULL);
}

View File

@ -20,3 +20,5 @@ void open_with();
void rename_hovered();
void delete();
void makedir();
void makefile();
void update();