mirror of
https://github.com/jarun/nnn.git
synced 2024-11-24 11:51:27 +00:00
Lazy unmount, umount (macOS) support
This commit is contained in:
parent
d224016011
commit
de4b817998
|
@ -78,7 +78,7 @@ It runs smoothly on the Pi, [Termux](https://www.youtube.com/watch?v=AbaauM7gUJw
|
||||||
- Cross-dir file/all/range selection
|
- Cross-dir file/all/range selection
|
||||||
- Batch renamer (feature-limited) for selection or dir
|
- Batch renamer (feature-limited) for selection or dir
|
||||||
- Copy (as), move (as), delete, archive, link selection
|
- Copy (as), move (as), delete, archive, link selection
|
||||||
- Notification on cp, mv, rm completion
|
- Dir updates, notification on cp, mv, rm completion
|
||||||
- Copy file paths to system clipboard on select
|
- Copy file paths to system clipboard on select
|
||||||
- Create (with parents), rename, duplicate (anywhere) files and dirs
|
- Create (with parents), rename, duplicate (anywhere) files and dirs
|
||||||
- Launch GUI apps, run commands, spawn a shell, toggle executable
|
- Launch GUI apps, run commands, spawn a shell, toggle executable
|
||||||
|
|
53
src/nnn.c
53
src/nnn.c
|
@ -473,8 +473,9 @@ static char * const utils[] = {
|
||||||
#define MSG_BOOKMARK_KEYS 35
|
#define MSG_BOOKMARK_KEYS 35
|
||||||
#define MSG_INVALID_REG 36
|
#define MSG_INVALID_REG 36
|
||||||
#define MSG_ORDER 37
|
#define MSG_ORDER 37
|
||||||
|
#define MSG_LAZY 38
|
||||||
#ifndef DIR_LIMITED_SELECTION
|
#ifndef DIR_LIMITED_SELECTION
|
||||||
#define MSG_DIR_CHANGED 38 /* Must be the last entry */
|
#define MSG_DIR_CHANGED 39 /* Must be the last entry */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static const char * const messages[] = {
|
static const char * const messages[] = {
|
||||||
|
@ -516,6 +517,7 @@ static const char * const messages[] = {
|
||||||
"bookmark keys:",
|
"bookmark keys:",
|
||||||
"invalid regex",
|
"invalid regex",
|
||||||
"toggle 'a'u / 'd'u / 'e'xtn / 'r'everse / 's'ize / 't'ime / 'v'ersion?",
|
"toggle 'a'u / 'd'u / 'e'xtn / 'r'everse / 's'ize / 't'ime / 'v'ersion?",
|
||||||
|
"unmount failed! try lazy?",
|
||||||
#ifndef DIR_LIMITED_SELECTION
|
#ifndef DIR_LIMITED_SELECTION
|
||||||
"dir changed, range sel off", /* Must be the last entry */
|
"dir changed, range sel off", /* Must be the last entry */
|
||||||
#endif
|
#endif
|
||||||
|
@ -3518,18 +3520,24 @@ static bool remote_mount(char *newpath, int *presel)
|
||||||
*/
|
*/
|
||||||
static bool unmount(char *name, char *newpath, int *presel, char *currentpath)
|
static bool unmount(char *name, char *newpath, int *presel, char *currentpath)
|
||||||
{
|
{
|
||||||
|
#ifdef __APPLE__
|
||||||
|
static char cmd[] = "umount";
|
||||||
|
#else
|
||||||
static char cmd[] = "fusermount3"; /* Arch Linux utility */
|
static char cmd[] = "fusermount3"; /* Arch Linux utility */
|
||||||
static bool found = FALSE;
|
static bool found = FALSE;
|
||||||
|
#endif
|
||||||
char *tmp = name;
|
char *tmp = name;
|
||||||
struct stat sb, psb;
|
struct stat sb, psb;
|
||||||
bool child = FALSE;
|
bool child = FALSE;
|
||||||
bool parent = FALSE;
|
bool parent = FALSE;
|
||||||
|
|
||||||
|
#ifndef __APPLE__
|
||||||
/* On Ubuntu it's fusermount */
|
/* On Ubuntu it's fusermount */
|
||||||
if (!found && !getutil(cmd)) {
|
if (!found && !getutil(cmd)) {
|
||||||
cmd[10] = '\0';
|
cmd[10] = '\0';
|
||||||
found = TRUE;
|
found = TRUE;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (tmp && strcmp(cfgdir, currentpath) == 0) {
|
if (tmp && strcmp(cfgdir, currentpath) == 0) {
|
||||||
mkpath(cfgdir, tmp, newpath);
|
mkpath(cfgdir, tmp, newpath);
|
||||||
|
@ -3554,9 +3562,24 @@ static bool unmount(char *name, char *newpath, int *presel, char *currentpath)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef __APPLE__
|
||||||
|
if (spawn(cmd, newpath, NULL, NULL, F_NORMAL)) {
|
||||||
|
#else
|
||||||
if (spawn(cmd, "-u", newpath, NULL, F_NORMAL)) {
|
if (spawn(cmd, "-u", newpath, NULL, F_NORMAL)) {
|
||||||
printwait(messages[MSG_FAILED], presel);
|
#endif
|
||||||
return FALSE;
|
int r = get_input(messages[MSG_LAZY]);
|
||||||
|
|
||||||
|
if (r != 'y' && r != 'Y')
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
#ifdef __APPLE__
|
||||||
|
if (spawn(cmd, "-l", newpath, NULL, F_NORMAL)) {
|
||||||
|
#else
|
||||||
|
if (spawn(cmd, "-uz", newpath, NULL, F_NORMAL)) {
|
||||||
|
#endif
|
||||||
|
printwait(messages[MSG_FAILED], presel);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -5877,16 +5900,8 @@ int main(int argc, char *argv[])
|
||||||
char *session = NULL;
|
char *session = NULL;
|
||||||
int opt;
|
int opt;
|
||||||
|
|
||||||
while ((opt = getopt(argc, argv, "HSKaAb:cdeEgnop:QrRs:t:vVxh")) != -1) {
|
while ((opt = getopt(argc, argv, "aAb:cdeEgHKnop:QrRs:St:vVxh")) != -1) {
|
||||||
switch (opt) {
|
switch (opt) {
|
||||||
case 'S':
|
|
||||||
cfg.blkorder = 1;
|
|
||||||
nftw_fn = sum_bsize;
|
|
||||||
blk_shift = ffs(S_BLKSIZE) - 1; // fallthrough
|
|
||||||
case 'd':
|
|
||||||
cfg.showdetail = 1;
|
|
||||||
printptr = &printent_long;
|
|
||||||
break;
|
|
||||||
case 'a':
|
case 'a':
|
||||||
cfg.mtime = 0;
|
cfg.mtime = 0;
|
||||||
break;
|
break;
|
||||||
|
@ -5899,6 +5914,14 @@ int main(int argc, char *argv[])
|
||||||
case 'c':
|
case 'c':
|
||||||
cfg.cliopener = 1;
|
cfg.cliopener = 1;
|
||||||
break;
|
break;
|
||||||
|
case 'S':
|
||||||
|
cfg.blkorder = 1;
|
||||||
|
nftw_fn = sum_bsize;
|
||||||
|
blk_shift = ffs(S_BLKSIZE) - 1; // fallthrough
|
||||||
|
case 'd':
|
||||||
|
cfg.showdetail = 1;
|
||||||
|
printptr = &printent_long;
|
||||||
|
break;
|
||||||
case 'e':
|
case 'e':
|
||||||
cfg.useeditor = 1;
|
cfg.useeditor = 1;
|
||||||
break;
|
break;
|
||||||
|
@ -5912,6 +5935,9 @@ int main(int argc, char *argv[])
|
||||||
case 'H':
|
case 'H':
|
||||||
cfg.showhidden = 1;
|
cfg.showhidden = 1;
|
||||||
break;
|
break;
|
||||||
|
case 'K':
|
||||||
|
check_key_collision();
|
||||||
|
return _SUCCESS;
|
||||||
case 'n':
|
case 'n':
|
||||||
cfg.filtermode = 1;
|
cfg.filtermode = 1;
|
||||||
break;
|
break;
|
||||||
|
@ -5953,9 +5979,6 @@ int main(int argc, char *argv[])
|
||||||
case 't':
|
case 't':
|
||||||
idletimeout = xatoi(optarg);
|
idletimeout = xatoi(optarg);
|
||||||
break;
|
break;
|
||||||
case 'K':
|
|
||||||
check_key_collision();
|
|
||||||
return _SUCCESS;
|
|
||||||
case 'v':
|
case 'v':
|
||||||
namecmpfn = &xstrverscasecmp;
|
namecmpfn = &xstrverscasecmp;
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in a new issue