Fish-shell like prevd
and nextd
for xonsh with keyboard shortcuts
- install using pip
pip install xontrib-hist-navigator
- or xpip (that is installed alongside xonsh)
xpip install xontrib-hist-navigator
- add to list of xontribs loaded.
xontrib load hist_navigator
- it keeps track of
cd
usage per session - Shortcuts
command | description | shortcut |
---|---|---|
prevd | move to previous working directory | Alt + Left Arrow |
nextd | move to next working directory in the history (if prevd is used) |
Alt + Right Arrow |
listd | list cd history | |
cd .. | move to parent directory | Alt + Up Arrow |
By default, all cd history is kept. Let's look at an example. Let's open a new shell:
❯
Now when we change the directory, it's added to the history along with the previous directory where we were (the user's home directory):
❯ cd BASE
❯ listd
['~', '~/BASE']
Let's descend further down:
❯ cd sub
❯ listd
['~', '~/BASE', '~/BASE/sub']
So far, so obvious. Now, when we use prevd
, you'll see that the history
stays intact:
❯ prevd
❯ pwd
~/BASE
❯ listd
['~', '~/BASE', '~/BASE/sub']
This allows you to use nextd
to go back and forth:
❯ nextd
❯ pwd
~/BASE/sub
❯ listd
['~', '~/BASE', '~/BASE/sub']
❯ prevd
❯ pwd
~/BASE
❯ listd
['~', '~/BASE', '~/BASE/sub']
Now, if you change the directory entirely after a prevd
, the entire
previous history is still kept:
❯ pwd
~/BASE
❯ listd
['~', '~/BASE', '~/BASE/sub']
❯ cd /tmp
❯ listd
['~', '~/BASE', '~/BASE/sub', '/tmp']
This means that issuing prevd
now will actually return to ~/BASE/sub
and not to ~/BASE
which was the last seen previous directory.
This is by design to allow you to quickly traverse previously visited
directories using keyboard shortcuts.
If you would rather have the history truncated, so that prevd
always
takes you to the directory you were in just before, set the following
environment variable in your xonshrc:
$XONTRIB_HIST_NAVIGATOR_TRUNCATE="true"
In this case the last example would behave differently:
❯ pwd
~/BASE
❯ listd
['~', '~/BASE', '~/BASE/sub']
❯ cd /tmp
❯ listd
['~', '~/BASE', '/tmp']
As you can see ~/BASE/sub
was dropped from history because it wasn't
the last visited directory at the time of changing the directory to
/tmp
.
semantic-release version && semantic-release publish