seedee

January 9, 2026 · View on GitHub

Joknarf Tools bash Licence

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

features

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

demo

demo

install

You can install through a shell plugin manager like the famous thefly (plugin/dotfiles manager and teleporter)

fly add joknarf/seedee

for a complete next-gen shell experience, see also these projects:

  • shell-ng : compilation of joknarf shell plugins which include seede and the following
  • nerdp : auto-transportable dynamic PS1 prompt (you can see it in the demo)
  • redo : replacement of shell history command search (CtrlR or Esc/) with interactive menu
  • complete-ng : nextgen bash/zsh Tab completion with interactive menu

key binding

  • using bash/zsh in emacs or vi mode, key binding is available as shortcuts:
    • default key binding with ShiftArrows or CtrlArrows (can be overridden using CD*BIND variables)
LeftUp/DownRight
previous dir in history
parent dir (..)dir history browserdir 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
(all ShiftArrow are also binded to CtrlArrow)

keyaction
Shiftcd history menu
Shiftreturn to last directory in history matching pattern
Shiftnavigate from current directory
Shiftgo to parent dir (cd ..)
CtrlShiftsearch 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 seedee

keys when in menu

keyaction
select next item
select prev item
Endselect last item
Homeselect first item
browse selected directory
browse parent directory
Shiftbrowse selected directory with subdirectories depth 4
Shiftback to only show subdirectories depth 1
Shift/PgUp/CtlFnext page
Shift/PgDn/CtlBprevious page
Del/F8delete directory entry in history
Escexit
CtrlAuse all screen to display menu
Enter/Tabgo to directory
  • filter pattern can be applied entering text
  • selection can be done entering item number

usage

$ . ./seedee
$ 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

VariableDescription
CDHISTFILEpath to history file (default to ~/.cd_history)
CDNBDIRSNumber of directories in history to display (default 10)
CDINITDIRSDirectory list (\n separated) to initialize CDHISTFILE if empty
CDPOWERLINEset to "n" to disable powerline symbol usage
CDHISTBINDbind key to cdhist
CDDOTBINDbind key to navigate from current dir
CDLBINDbind key to cdlocate
CDUPINDbind key to cd ..
CDLASTBINDbind key to cdhist last dir matching text