1
0
mirror of https://gittea.dev/nova/th.git synced 2025-10-21 18:30:15 -04:00

added copy/paste function

This commit is contained in:
nova
2025-08-16 21:02:13 +02:00
parent 37d82bebf8
commit 9ea82511e6
4 changed files with 90 additions and 2 deletions

View File

@@ -34,12 +34,13 @@ extern char *btm_buffer;
extern unsigned long mid_file_count;
extern unsigned int status;
extern char *start_path;
extern char *input;
unsigned int timeout_time = 0;
extern char *input;
unsigned int input_pass;
int parsed_input_number;
extern char *start_path;
yank yank_files = { 0 };
int read_string(WINDOW *win, int y, int x, char *str);
int strcmp_offset(char *in0, char *in1, char offset);
@@ -658,3 +659,73 @@ void cmd_on_selected(int passes, int index){
free(file_str);
}
}
void yank_file(int passes, int index){
unsigned long i;
if (yank_files.status & YANK_IS_USED) {
free(yank_files.path);
for (i = 0; i < yank_files.count; i++) {
free(yank_files.list[i]);
}
free(yank_files.list);
yank_files.count = 0;
}
yank_files.path=getcwd(NULL, 0);
yank_files.count = 0;
for (i = 0; i < mid_file_count; i++) {
if (mid_content[i].status & FILE_STATUS_SELECTED) {
yank_files.count++;
}
}
if (yank_files.count == 0) {
yank_files.count = 1;
yank_files.list = (char**)malloc(yank_files.count * sizeof(char*));
*yank_files.list = malloc(strlen(mid_content[selected_file_current].file_name)+1);
strcpy(*yank_files.list, mid_content[selected_file_current].file_name);
} else {
yank_files.list = malloc(yank_files.count * sizeof(char*));
for (i = 0; i < mid_file_count && i < yank_files.count; i++) {
if (mid_content[i].status & FILE_STATUS_SELECTED) {
*yank_files.list = malloc(strlen(mid_content[i].file_name)+1);
strcpy(*yank_files.list, mid_content[i].file_name);
yank_files.list += 1;
}
}
yank_files.list -= yank_files.count;
}
yank_files.status |= YANK_IS_USED;
if (strncmp((char*)key_binding[index].black_magic, "cut", 3) == 0) {
yank_files.status |= YANK_CUT;
yank_files.status &= ~YANK_COPY;
} else {
yank_files.status |= YANK_COPY;
yank_files.status &= ~YANK_CUT;
}
}
void paste(){
unsigned long i;
for (i = 0; i < yank_files.count; i++) {
/*TODO(2025-08-14T22:10:44) escape path*/
char *cmd;
if (yank_files.status & YANK_COPY) {
cmd = concat("false | cp -r -i ", yank_files.path);
} else {
cmd = concat("mv ", yank_files.path);
}
cmd = concat(cmd, "/");
cmd = concat(cmd, *yank_files.list);
cmd = concat(cmd, " ./");
mvprintw(i, 0, cmd);
if (system(cmd) != 0) {
cmd = concat(cmd, *yank_files.list);
while (1) {
cmd = concat(cmd, "_");
if (system(cmd) == 0) {
break;
} }
}
yank_files.list++;
}
yank_files.list -= yank_files.count;
status |= (STATUS_RUN_BACKEND | STATUS_UPDATE_SCREEN_MASK | STATUS_RELOAD_DIRECTORY | STATUS_UPDATE_SCREEN_RELOAD_FULL);
}