Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

https://github.com/joknarf/cdhist

cd history (bash / ksh / zsh)
https://github.com/joknarf/cdhist

bash cd-command cd-extension completion directories history interactive ksh locate ncurses plugin powerline pushd scrolling shell shell-extension subdirectories terminal zsh

Last synced: 27 days ago
JSON representation

cd history (bash / ksh / zsh)

Lists

README

        

> 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 |