From 1b3b9f503df5f2e37664a2fb3ca5a069b741e18b Mon Sep 17 00:00:00 2001 From: Arun Prakash Jana Date: Sat, 19 Oct 2019 13:25:50 +0530 Subject: [PATCH] Refactor cp, mv, cp-mv as, rm --- src/.clang-tidy | 2 +- src/nnn.c | 91 +++++++++++++++++++++++++++---------------------- 2 files changed, 52 insertions(+), 41 deletions(-) diff --git a/src/.clang-tidy b/src/.clang-tidy index 9a418ec8..a2815f06 100644 --- a/src/.clang-tidy +++ b/src/.clang-tidy @@ -11,5 +11,5 @@ CheckOptions: - key: fuchsia-restrict-system-includes.Includes value: '*,-stdint.h,-stdbool.h' - key: readability-function-size.StatementThreshold - value: '1000' + value: '950' ... diff --git a/src/nnn.c b/src/nnn.c index cfee8dd0..d10b9435 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -1360,6 +1360,55 @@ finish: return ret; } +static bool cpmvrm_selection(enum action sel, char *path, int *presel) +{ + int r; + + endselection(); + + if (!selsafe()) { + *presel = MSGWAIT; + return FALSE; + } + + switch (sel) { + case SEL_CP: + opstr(g_buf, cp); + break; + case SEL_MV: + opstr(g_buf, mv); + break; + case SEL_CPMVAS: + r = get_input("'c'p / 'm'v as?"); + if (r != 'c' && r != 'm') { + if (cfg.filtermode) + *presel = FILTER; + return FALSE; + } + + if (!cpmv_rename(r, path)) { + printwait(messages[OPERATION_FAILED], presel); + return FALSE; + } + break; + default: /* SEL_RMMUL */ + rmmulstr(g_buf); + break; + } + + if (sel != SEL_CPMVAS) + spawn(utils[SH_EXEC], g_buf, NULL, path, F_CLI); + + /* Clear selection on move or delete */ + if (sel != SEL_CP) + clearselection(); + + if (cfg.filtermode) + *presel = FILTER; + + return TRUE; +} + static bool batch_rename(const char *path) { int fd1, fd2, i; @@ -4592,49 +4641,11 @@ nochange: case SEL_CPMVAS: // fallthrough case SEL_RMMUL: { - endselection(); - - if (!selsafe()) { - presel = MSGWAIT; + if (!cpmvrm_selection(sel, path, &presel)) goto nochange; - } - - switch (sel) { - case SEL_CP: - opstr(g_buf, cp); - break; - case SEL_MV: - opstr(g_buf, mv); - break; - case SEL_CPMVAS: - r = get_input("'c'p / 'm'v as?"); - if (r != 'c' && r != 'm') { - if (cfg.filtermode) - presel = FILTER; - goto nochange; - } - - if (!cpmv_rename(r, path)) { - printwait(messages[OPERATION_FAILED], &presel); - goto nochange; - } - break; - default: /* SEL_RMMUL */ - rmmulstr(g_buf); - break; - } - - if (sel != SEL_CPMVAS) - spawn(utils[SH_EXEC], g_buf, NULL, path, F_CLI); - - /* Clear selection on move or delete */ - if (sel != SEL_CP) - clearselection(); if (ndents) copycurname(); - if (cfg.filtermode) - presel = FILTER; goto begin; } case SEL_RM: @@ -5019,7 +5030,7 @@ nochange: } } return; - case SEL_SESSIONS: + case SEL_SESSIONS: r = get_input("'s'(ave) / 'l'(oad) / 'r'(estore) session?"); if (r == 's') {