antonmedv/walk

bashrc rename `ll` -> `walk`

budRich opened this issue · 2 comments

I just now saw that this project used to be called llama, and the function ll ... stuff in the readme makes slightly more sense now. But it might be a good idea to change it. For some reason it is extremely common to have an alias in bashrc something like this:
alias ll='ls -l' , i think it originates from debians default bashrc . And it is not 100% clear that you are supposed to start walk by typing ll after it has been set up.

Why not name the function walk ? In bash functions have priority over commands (and i think aliases have priority over functions) if they have the same name. And it is possible to override this by using the command command. So this works as expected:

function walk { cd "$(command walk "$@")" ;}

but it will throw a warning when linting with shellcheck ( ^-- SC2164 (warning): Use 'cd ... || exit' or 'cd ... || return' in case cd fails.)

so even better would be:

function walk { cd "$(command walk "$@")" || return ;}

In my own bashrc i ended up with this:

command -v walk >/dev/null \
  && function walk { command cd "$(command walk "$@")"  || return ;}

command -v walk will print the path to the command (or name if it is a function) or silently fail if it isn't available.
This is good because if i have this bashrc on a system that doesn't have the walk command, or if i uninstall walk, the function
walk() will not be defined either. I also ended up using command cd because i actually have a function called cd that also does ls && pwd and it was annoying to have ls output after selecting a directory with walk.

I never liked terminal filemanagers before, but this walk thing is really neat and integrates a lot more fluently into regular interactive shell usage, keep up the good work!

Thanks!

What about use case like this:

walk | cat

Or other tools what may like to take input from walk.

Maybe we should find a better alias? Like ww. (w is already in use).
Or even lk. 2 letter together. Hmmm.

What about use case like this:

for those cases one could use command walk | cat . But i see what you mean, maybe the best is to let users decide, and clarify how it works more detailed in the readme, like:

By default when walk is terminated normally (by pressing escape), the full path of the last active directory in walk will get printed to stdout. To have walk actually change directory in an interactive shell, you can pass its output as an argument to cd. Example: cd "$(walk "$@")" . If you only intend to use walk like this (changing directory interactively), it can make sense to create a shell function in .bashrc or equivalent:

command -v walk >/dev/null \
  && cdwalk() { command cd "$(command walk "$@")" || return ;}

in the example, the function is named cdwalk, but you can name it anything that makes sense fi. cdw, ww or simply walk