How to exit the Ranger file explorer back to command prompt but keep the current directory?
Solution 1
According to its manual
--choosedir=targetfile
Allows you to pick a directory with ranger. When you exit ranger, it will write the last visited directory into targetfile.
So all you need to do is create an alias like this:
alias ranger='ranger --choosedir=$HOME/.rangerdir; LASTDIR=`cat $HOME/.rangerdir`; cd "$LASTDIR"'
And writing this alias into the rc of your favoured shell is recommended.
Solution 2
Shift + S
If you hit Shift + S
, it opens a new shell on the current directory.
Then if you hit Ctrl + D
on the shell, it goes back to ranger
.
This workaround is often good enough.
By the way, I've given up on file managers for a few years now, I just have this in my bashrc instead and I navigate directories simply with tab complete, it's good enough for me:
c() {
if [ -n "$1" ]; then
cd "$1" || return 1
else
cd ..
fi
ll
}
ll() ( ls -hl --time-style="+%Y-%m-%d_%H:%M:%S" "$@"; )
Solution 3
I found an easier solution. When you install ranger, it will put a script in your bin folder which, if executed, will start the program. But if you source it, with
$ source ranger
it will launch ranger and drop you in the last visited folder when you exit.
so if you want this behavior by default, just do
$ alias ranger='source ranger'
or even better put it into your .bashrc file.
To see the documentation and implementation for this feature, read the ranger script in your bin folder.
Solution 4
To piggy back of of Gombai Sándor's answer, i suggest making a minor adjustment to the alias:
alias ranger='ranger --choosedir=$HOME/.rangerdir; LASTDIR=`cat $HOME/.rangerdir`; cd "$LASTDIR"'
By changing "$Home/rangerdir" to "$Home/.rangerdir" you make the file created by the alias hidden. just makes it so it is not annoyingly cluttering up the home folder. it makes no functional difference to how it works.
Solution 5
I stumbled upon a similar question elsewhere with better answer compared to Gambai and its other proposed variants. It is better since.
- it will take care of the created file by putting it into the tmp folder so that it can be deleted by the system
- it is more clean code (although the Gambai's answer can be converted to a function)
There is a function in a shell file already in ranger's git repo:
https://github.com/ranger/ranger/blob/master/examples/bash_automatic_cd.sh
function ranger-cd {
# create a temp file and store the name
tempfile="$(mktemp -t tmp.XXXXXX)"
# run ranger and ask it to output the last path into the
# temp file
ranger --choosedir="$tempfile" "${@:-$(pwd)}"
# if the temp file exists read and the content of the temp
# file was not equal to the current path
test -f "$tempfile" &&
if [ "$(cat -- "$tempfile")" != "$(echo -n `pwd`)" ]; then
# change directory to the path in the temp file
cd -- "$(cat "$tempfile")"
fi
# its not super necessary to have this line for deleting
# the temp file since Linux should handle it on the next
# boot
rm -f -- "$tempfile"
}
You can put this function in your favorite's shell rc (for example ~/.zshrc
) file and either create alias and/or bind it to a key combination (again both can go in the rc file):
alias nav=ranger-cd
and/or
# This will run the function by Ctrl+O through returning
# the string "ranger-cd" in addition to a new-line character
# to act as Enter key-press
bindkey -s "^o" "ranger-cd\n"
Disclaimer: the bindkey
above works in ZSH and you should change it based on your preferred shell
Related videos on Youtube
the_velour_fog
Updated on September 18, 2022Comments
-
the_velour_fog almost 2 years
I am using Ranger terminal file explorer from within a linux terminal.
Say I start from command prompt in home directory and launch rangeruser@/home/user $ ranger
ranger opens..... and within the ranger program I explore to:
/media/ubuntu/sdf675d7sf5sdfs7/some_directory
If I then hit q to quit ranger, I am dropped back to the same folder I launched ranger from. i.e.
user@/home/user $
Is it possible to quit ranger, and remain in the directory I was in with ranger, i.
user@/media/ubuntu/sdf675d7sf5sdfs7/some_directory $
-
the_velour_fog over 8 yearswow thats pretty clever, It never occurred to me you could issue a command to a program, terminate it with a
;
and then specify more commands after the semi-colon which - Im assuming are run at the point you closeranger
, thanks! -
Mateen Ulhaq over 6 yearsConsider using
.rangerdir
instead to make it hidden. Or delete it at the end,rm -d $HOME/rangerdir
. -
neverfox over 6 yearsThis is great but it if I understand it correctly, this would mean that you have that behavior permanently. If would be nice if there was a way to have the option to exit into current ranger directory OR the directory you were in when you started ranger.
-
Gombai Sándor over 6 yearsneverfox Once you create an alias, it's up to you if you offer the selection of the directory to land in inside that alias. The selection can be made before the binary is called or after it's finished.
-
rockzombie2 over 5 yearsThank you for this awesome solution! I happen to be using the fish shell, so to set my alias, I used
fish_config
and added an abbreviation forranger --choosedir="$HOME/.rangerdir"; cd (cat $HOME/.rangerdir)
-
Scott - Слава Україні about 5 years(1) It looks like you have some problems with quoting. (2) What do you mean by ‘‘on demand’’?
-
cjauvin over 4 yearsApparently this technique (which can be shortened to just executing
. ranger
) is mentioned in the wiki -
Atcold about 4 yearsYou need to hit
<Shift> S
, not justS
. -
Ciro Santilli Путлер Капут 六四事 about 4 years@Atcold thanks, that's what I meant by the upper case
S
, but clarified now. -
Atcold about 4 yearsSweet. The keys on a keyboard are already capitalised 😉, so if you want to press two keys it's fundamental to write it down.
-
iFreilicht about 4 years@Atcold depends. For VIM (which ranger's keybindings are heavily inspired by), it is convention is to write lower case letters if just a key is to be pressed, and uppercase if it is to be pressed with shift. For example, the shortcut for "Go to next occurrence" is
n
, and the shortcut for "Go to previous occurence" isN
. -
Merlin almost 4 yearsThis is the way to go!
-
Broper over 3 years@neverfox The way I handled this was simply naming the alias
rangercd
, so that I could either issue the commandranger
orrangercd
-
Kankaristo over 3 yearsThis was exactly what I was looking for. Similar to
Shift+S
(start shell in current folder), but much faster, since creating a new shell may load zsh plugins, etc.