From 12fa5344cffcfd7aba726d4c594d3995d5edc840 Mon Sep 17 00:00:00 2001 From: Arun Prakash Jana Date: Tue, 19 Oct 2021 15:35:57 +0530 Subject: [PATCH] Fix #1201: accept link name for single target When creating new sym/hard link, accept link name if the current file is being linked or 1 file selected. --- src/nnn.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/nnn.c b/src/nnn.c index a79387be..8499489a 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -3685,14 +3685,15 @@ static int xlink(char *prefix, char *path, char *curfname, char *buf, int *prese else /* hard link */ link_fn = &link; - if (choice == 'c') { - r = xstrsncpy(buf, prefix, NAME_MAX + 1); /* Copy prefix */ - xstrsncpy(buf + r - 1, curfname, NAME_MAX - r); /* Suffix target file name */ - mkpath(path, buf, lnpath); /* Generate link path */ - mkpath(path, curfname, buf); /* Generate target file path */ + if (choice == 'c' || (nselected == 1)) { + mkpath(path, prefix, lnpath); /* Generate link path */ + mkpath(path, (choice == 'c') ? curfname : pselbuf, buf); /* Generate target file path */ - if (!link_fn(buf, lnpath)) + if (!link_fn(buf, lnpath)) { + if (choice == 's') + clearselection(); return 1; /* One link created */ + } printwarn(presel); return -1; @@ -7442,7 +7443,8 @@ nochange: if (r == 'f' || r == 'd') tmp = xreadline(NULL, messages[MSG_NEW_PATH]); else if (r == 's' || r == 'h') - tmp = xreadline(NULL, messages[MSG_LINK_PREFIX]); + tmp = xreadline(NULL, + messages[nselected <= 1?MSG_NEW_PATH:MSG_LINK_PREFIX]); else tmp = NULL; break; -- 2.48.1