> As another project called `cdhist` on github, decided to rename this project `seedee` > Now, the updated tool can be found [here](https://github.com/joknarf/seedee) > This repository won't we updated anymore # cdhist is now [seedee](https://github.com/joknarf/seedee) Navigate interactively through directories / history of visited directories using arrow keys from command line. Compatibility : bash / ksh / zsh (compatible macos / debian / centos / solaris / alpine ...) * rapidily switch to already visited directories using interactive menu * use locate (mlocate/plocate) to rapidly cd to any directory * navigate interactively into directories/history using left/right arrow keys in menu * directly from command line without any cd command using shift-arrow keys (bash/zsh) * cd autocompletion with interactive menu (bash) for a complete next-gen shell experience, see also these projects: * [nerdps1](https://github.com/joknarf/nerdps1) : auto-transportable dynamic PS1 prompt (you can see it in the demo) * [redo](https://github.com/joknarf/redo) : replacement of shell history command search (Ctrl+R or Esc+/) with interactive menu * [complete-ng](https://github.com/joknarf/complete-ng) : nextgen bash completion with interactive menu ![demo](https://github.com/joknarf/cdhist/assets/10117818/ad3dc445-ba78-401e-9e46-ca87e73fdb3b) * using bash/zsh in emacs or vi mode, key binding is available as shortcuts: * default key binding with Shift+Arrows or Ctrl+Arrows (can be overridden using CD*BIND variables)
|Left | Up/Down | Right | |:-----------------------:|:-----------------------------------:|:---------------------------:| | | previous dir in history | | | | | | | | | | | parent dir (..) | dir history browser | dir browser | directory pattern can be put on command line before hitting shortcut to filter result putting on command line : `work` and hitting Shift+⇧ will bring you to last visited directory containing `work` |key | action | |----------------------------------------------|------------------------------------------------------| |Shift+⇩ | cd history menu | |Shift+⇧ | return to last directory in history matching pattern | |Shift+⇨ | navigate from current directory | |Shift+⇦ | go to parent dir (cd ..) | |Ctrl+Shift⇩ | search directories matching pattern in locate db |
* using bash, `` cd auto completion can be enabled for `cd` command: * setting env variable `CDCOMPLETE=y` before sourcing `cdhist` ## keys when in menu |key | action | |--------------------------------|-------------------------------------------------------| |⇩ | select next item | |⇧ | select prev item | |End | select last item | |Home | select first item | |⇨ | browse selected directory | |⇦ | browse parent directory | |Shift+⇨ | browse selected directory with subdirectories depth 4 | |Shift+⇦ | back to only show subdirectories depth 1 | |Shift+⇩/PgUp/Ctl+F| next page | |Shift+⇧/PgDn/Ctl+B| previous page| |Del/F8 | delete directory entry in history | |Esc | exit | |Ctrl+A | use all screen to display menu | |Enter/Tab | go to directory | * filter pattern can be applied entering text * selection can be done entering item number # usage ``` $ . ./cdhist $ cd => change to and add to $CDHISTFILE $ cd -- => display current history / choose dir to change $ cd -- ... => search pattern in current history, change to dir if unique, display / chose dir either $ cd - ... => search pattern in cd history, change to dir first matched $ cd + []... => display immediate subdirectories of cwd, search / choose dir to change (except dot dirs, like .git/*) $ cd ++ []... => display subdirectories until depth 4, search / choose dir to change (except dot dirs, like .git/*) $ cdl ... => use locate -r and get list of directories to switch ``` `cd - ` `cd -- ` `cd + ` `cd ++ ` are aliases to `cd- cd-- cd+ cd++` # environment variables |Variable | Description | |-------------|-------------------------------------------------------------------| |`CDHISTFILE` | path to history file (default to ~/.cd_history) | |`CDNBDIRS` | Number of directories in history to display (default 10) | |`CDINITDIRS` | Directory list (\n separated) to initialize CDHISTFILE if empty | |`CDPOWERLINE`| set to "n" to disable powerline symbol usage | |`CDHISTBIND` | bind key to cdhist | |`CDDOTBIND` | bind key to navigate from current dir | |`CDLBIND` | bind key to cdlocate | |`CDUPIND` | bind key to cd .. | |`CDLASTBIND` | bind key to cdhist last dir matching text |