Fix #777: input stream ishould trump -s/-S

If an input stream is available, prioritize that over sessions. find/grep
syntax can be very complex and can be scripted. On the contrary, sessions
can be loaded at runtime and the persistent session can be "restored".

An interesting use case is the listing is done in picker mode from a script
and the user expects to "pick" some entries among the listed search results.

Another important change is - if the user tries to load the "last session"
explicitly by name instead of using the session option _restore_, we should
not overwrite the "last session" ("@") before loading the it.
This commit is contained in:
Arun Prakash Jana 2020-11-13 11:31:11 +05:30
parent 1c4bc318f5
commit 7afc3eeedd
No known key found for this signature in database
GPG key ID: A75979F35C080412
2 changed files with 12 additions and 2 deletions

7
nnn.1
View file

@ -197,6 +197,9 @@ When a session is loaded dynamically, the last working session is saved
automatically to a dedicated -- "last session" -- session file. The "last automatically to a dedicated -- "last session" -- session file. The "last
session" is also used in persistent session mode. session" is also used in persistent session mode.
.Pp .Pp
Listing input stream is given a higher priority to persistent sessions. Use
session option \fIrestore\fR to restore the persistent session at runtime.
.Pp
All the session files are located by session name in the directory All the session files are located by session name in the directory
.Pp .Pp
\fB${XDG_CONFIG_HOME:-$HOME/.config}/nnn/sessions\fR \fB${XDG_CONFIG_HOME:-$HOME/.config}/nnn/sessions\fR
@ -345,8 +348,8 @@ A temporary directory will be created containing symlinks to the given
paths. Any action performed on these symlinks will be performed only on their paths. Any action performed on these symlinks will be performed only on their
targets, after which they might become invalid. targets, after which they might become invalid.
.Pp .Pp
Right arrow or 'l' on a symlink in the listing dir takes to the target file. Right arrow or 'l' on a symlink in the listing dir takes to the target
Press '-' to return to the listing dir. Press 'Enter' to open the symlink. file. Press '-' to return to the listing dir. Press 'Enter' to open the symlink.
.Sh UNITS .Sh UNITS
The minimum file size unit is byte (B). The rest are K, M, G, T, P, E, Z, Y The minimum file size unit is byte (B). The rest are K, M, G, T, P, E, Z, Y
(powers of 1024), same as the default units in \fIls\fR. (powers of 1024), same as the default units in \fIls\fR.

View file

@ -3955,6 +3955,10 @@ static bool load_session(const char *sname, char **path, char **lastdir, char **
return FALSE; return FALSE;
mkpath(ssnpath, sname, spath); mkpath(ssnpath, sname, spath);
/* If user is explicitly loading the "last session", skip auto-save */
if ((sname[0] == '@') && !sname[1])
has_loaded_dynamically = FALSE;
} else } else
mkpath(ssnpath, "@", spath); mkpath(ssnpath, "@", spath);
@ -7687,6 +7691,9 @@ int main(int argc, char *argv[])
/* We return to tty */ /* We return to tty */
dup2(STDOUT_FILENO, STDIN_FILENO); dup2(STDOUT_FILENO, STDIN_FILENO);
if (session)
session = NULL;
} }
home = getenv("HOME"); home = getenv("HOME");