rupa / j2

python version of z, for experimentation
240 stars 23 forks source link

CAVEAT

Unless you have reasons not to, you should probably use https://github.com/rupa/z/ - which is actually maintained, used, and lovingly cared for.

OVERVIEW

Spend a lot of time cd-ing around a complex directory tree?

j keeps track of where you’ve been and how much time you spend there, and provides a convenient way to jump to the directories you actually use. We use the term "frecency" to refer to how frequent and recent visits to a directory are.

This is a complete rethink of original j. See CHANGES for differences.

NOTE:

I've been using this for ease of experimentation, but prefer a pure shell version. for portability and ease of use.

INSTALLATION

TROUBLESHOOTING

USE

MATCHING ALGORITHM

Look for case sensitive match first, then fall back to case insensitive.

If all matches have a common prefix, and the prefix is one of the matches, and all args are matched in the prefix, go there unconditionally. This attempts to follow the principle of least surprise.

Frecency: alter rank by time of last access.

I'm interested in improving/refining this algorithm, but it's a decent start.

AGING

Rank is recalculated as 0.9*rank when sum of ranks > 1000. When the rank of a directory falls below 1, it will fall off the list.

FAQ

Q) How come j doesn’t work likecd?

A) j is not intended as a substitute for the cd command. You should still cd everywhere as you normally would. When you want to jump somewhere you have been, then type j <args> to jump to a directory in your often used list.

Q) How do i 'source' something? Why?

A) Short answer: instead of running the script as j.sh you type source j.sh or . j.sh in a shell, or to make it available all the time, put a command in your .bashrc that sources it, or just paste the contents of j.sh directly into your .bashrc.

Long answer: sourcing is like importing. When you run a script in a shell, it creates a subshell, runs your script, and returns to your current shell. If you cd in that subshell, it won’t matter to your current shell, because when your script is done running, it exits, and comes back to where you (still) are in your current shell. What we want in this case is to have the function and commands in our script defined in our current shell. Sourcing – rather than executing – the file does exactly that.

CHANGES FROM ORIGINAL j

CREDITS