function __fastdir_dirhist --description "Print the current directory history (the back- and fwd- lists)" if count $argv > /dev/null switch $argv[1] case -h --h --he --hel --help __fish_print_help dirh return 0 end end # Avoid set comment set -l current (command pwd) set -l separator " " set -l line_len (math (count $dirprev) + (echo $dirprev $current $dirnext | wc -m) ) set -l line_num false if test $line_len -gt $COLUMNS # Print one entry per line if history is long set separator "\n" end if count $argv > /dev/null for i in (seq (count $argv)) switch $argv[$i] case '-l' --l --lo --lon --long set separator "\n" continue case '-n' --n --nu --num --numb --numbe --number set line_num true continue case '-*' printf (_ "%s: Unknown option %s\n" ) nextd $argv[$i] return 1 end end end set -l current_line 0 # BSD seq 0 outputs '1 0' instead of nothing if count $dirprev > /dev/null for i in (seq (count $dirprev)) if test $line_num = true echo -n "$i " end echo -n -e $dirprev[$i]$separator set current_line $i end end set_color $fish_color_history_current if test $line_num = true set current_line (math $current_line + 1) echo -n "$current_line " end echo -n -e $current$separator set_color normal # BSD seq 0 outputs '1 0' instead of nothing if count $dirnext > /dev/null for i in (seq (echo (count $dirnext)) -1 1) if test $line_num = true set -l line (math (count $dirnext) - $i + $current_line + 1) echo -n "$line " end echo -n -e $dirnext[$i]$separator end end if test $separator != "\n" echo end end