mirror of
https://gittea.dev/nova/th.git
synced 2025-10-21 10:20:15 -04:00
fixed copy/paste
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
#include <curses.h>
|
||||
#include <pthread.h>
|
||||
#include <dirent.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
@@ -751,12 +752,13 @@ void yank_file(unsigned long 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);
|
||||
free(yank_files.path);
|
||||
yank_files.count = 0;
|
||||
yank_files.status = 0;
|
||||
}
|
||||
yank_files.path=getcwd(NULL, 0);
|
||||
yank_files.count = 0;
|
||||
@@ -773,7 +775,7 @@ void yank_file(unsigned long passes, int index){
|
||||
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++) {
|
||||
for (i = 0; i < mid_file_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);
|
||||
@@ -797,32 +799,41 @@ void paste(){
|
||||
/*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);
|
||||
cmd = concat("false | cp -riv ", 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);
|
||||
char *line = NULL;
|
||||
size_t size = 0;
|
||||
FILE *cmd_open;
|
||||
while (1) {
|
||||
cmd_open = popen(cmd, "r");
|
||||
int val = getline(&line, &size, cmd_open);
|
||||
|
||||
if (pclose(cmd_open) == 0) {
|
||||
break;
|
||||
} else if (val == 0 || val == -1) {
|
||||
break;
|
||||
}
|
||||
cmd = concat(cmd, "_");
|
||||
cmd = concat(cmd, *yank_files.list);
|
||||
cmd = concat(cmd, " 2>&1");
|
||||
char *line = malloc(255);
|
||||
FILE *cmd_open;
|
||||
while (1) {
|
||||
cmd_open = popen(cmd, "r");
|
||||
if (fgets(line, 255, cmd_open) == 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (strstr(line, "are the same file")) {
|
||||
cmd[strlen(cmd)-strlen(" 2>&1")] = '\0';
|
||||
cmd = concat(cmd, "_");
|
||||
cmd = concat(cmd, " 2>&1");
|
||||
} else if ((strstr(line, "overwrite"))) {
|
||||
cmd[strlen(cmd)-strlen(" 2>&1")] = '\0';
|
||||
cmd = concat(cmd, "_");
|
||||
cmd = concat(cmd, " 2>&1");
|
||||
} else if ((strstr(line, "No such file or directory"))) {
|
||||
pclose(cmd_open);
|
||||
break;
|
||||
} else if (pclose(cmd_open) == 0) {
|
||||
break;
|
||||
}
|
||||
pclose(cmd_open);
|
||||
}
|
||||
|
||||
free(cmd);
|
||||
|
||||
yank_files.list++;
|
||||
}
|
||||
yank_files.list -= yank_files.count;
|
||||
|
Reference in New Issue
Block a user