Skip to content

joknarf/cdhist

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

As another project called cdhist on github, decided to rename this project seedee
Now, the updated tool can be found here
This repository won't we updated anymore

cdhist is now 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 : auto-transportable dynamic PS1 prompt (you can see it in the demo)
  • redo : replacement of shell history command search (Ctrl+R or Esc+/) with interactive menu
  • complete-ng : nextgen bash completion with interactive menu

demo

  • 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, <tab> 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 <dir>
=> change to <dir> and add <dir> to $CDHISTFILE
$ cd --
=> display current history / choose dir to change
$ cd -- <pat>...
=> search pattern <pat> in current history, change to dir if unique, display / chose dir either
$ cd - <pat>...
=> search pattern <pat> in cd history, change to dir first matched
$ cd + [<pat>]...
=> display immediate subdirectories of cwd, search / choose dir to change (except dot dirs, like .git/*)
$ cd ++ [<pat>]...
=> display subdirectories until depth 4, search / choose dir to change (except dot dirs, like .git/*)
$ cdl <pat>...
=> use locate -r and get list of directories to switch

cd - <opts> cd -- <opts> cd + <opts> cd ++ <opts> 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