- Batch rename/move/delete (needs vidir)
- Show directories in custom color (default: blue)
- Spawn a subshell in the current directory
+ - Run a command
- Run custom scripts in the current directory
- Run current file as executable
- Change directory at exit (*easy* shell integration)
t Modification time s Size
MISC
!, ^] Spawn SHELL in dir o Launch app
- R Run custom script ^S Execute entry
- L Lock terminal
+ ^S Run a command R Run custom script
+ C Execute entry L Lock terminal
```
Help & settings, file details, media info and archive listing are shown in the PAGER. Please use the PAGER-specific keys in these screens.
}
/* Show a prompt with input string and return the changes */
-static char *xreadline(char *fname, char *prompt)
+static char *xreadline(char *prefill, char *prompt)
{
size_t len, pos;
int x, y, r;
cleartimeout();
printprompt(prompt);
- if (fname) {
- DPRINTF_S(fname);
- len = pos = mbstowcs(buf, fname, NAME_MAX);
+ if (prefill) {
+ DPRINTF_S(prefill);
+ len = pos = mbstowcs(buf, prefill, NAME_MAX);
} else
len = (size_t)-1;
"et Modification time s Size\n"
"1MISC\n"
"a!, ^] Spawn SHELL in dir o Launch app\n"
- "eR Run custom script ^S Execute entry\n"
- "eL Lock terminal\n"};
+ "d^S Run a command R Run custom script\n"
+ "eC Execute entry L Lock terminal\n"};
if (fd == -1)
return FALSE;
if (!ndents)
goto nochange; // fallthrough
case SEL_SHELL: // fallthrough
- case SEL_SCRIPT:
+ case SEL_SCRIPT: // fallthrough
+ case SEL_RUNCMD:
if (sel == SEL_EXEC) {
/* Check if this is a directory */
if (S_ISDIR(dents[cur].mode)) {
spawn(newpath, NULL, NULL, path, F_NORMAL | F_SIGINT);
} else if (sel == SEL_SCRIPT) {
tmp = getenv("NNN_SCRIPT");
- if (tmp) {
- if (getenv("NNN_MULTISCRIPT")) {
- size_t _len = xstrlcpy(newpath, tmp, PATH_MAX);
-
- tmp = xreadline(NULL, "script suffix: ");
- if (tmp && tmp[0])
- xstrlcpy(newpath + _len - 1, tmp, PATH_MAX - _len);
- tmp = newpath;
- }
+ if (!tmp) {
+ printmsg("set NNN_SCRIPT");
+ goto nochange;
+ }
- if (lstat(tmp, &sb) == -1) {
- printwarn();
- goto nochange;
- }
+ if (getenv("NNN_MULTISCRIPT")) {
+ size_t _len = xstrlcpy(newpath, tmp, PATH_MAX);
- /* Check if it's a directory */
- if (S_ISDIR(sb.st_mode)) {
- printmsg("directory");
- goto nochange;
- }
+ tmp = xreadline(NULL, "script suffix: ");
+ if (tmp && tmp[0])
+ xstrlcpy(newpath + _len - 1, tmp, PATH_MAX - _len);
+ tmp = newpath;
+ }
- dir = NULL; /* dir used as temp var */
- if (ndents)
- dir = dents[cur].name;
- spawn(shell, tmp, dir, path, F_NORMAL | F_SIGINT);
- } else {
- printmsg("set NNN_SCRIPT");
+ if (lstat(tmp, &sb) == -1) {
+ printwarn();
goto nochange;
}
+
+ /* Check if it's a directory */
+ if (S_ISDIR(sb.st_mode)) {
+ printmsg("directory");
+ goto nochange;
+ }
+
+ dir = NULL; /* dir used as temp var */
+ if (ndents)
+ dir = dents[cur].name;
+ spawn(shell, tmp, dir, path, F_NORMAL | F_SIGINT);
+ } else if (sel == SEL_RUNCMD) {
+ tmp = xreadline(NULL, "> ");
+ if (!tmp || !tmp[0])
+ goto nochange;
+ spawn(shell, "-c", tmp, path, F_NORMAL | F_SIGINT);
} else
spawn(shell, shell_arg, NULL, path, F_NORMAL | F_MARKER);