{ ... }: { text = '' # CD (back to) directory. # Goes to the exact-match dir first. If no exact match found, it finds first directory that contains the input (case-insensitive). # Usage: cdd function cdd() { local target="''${1}" if [[ "''${target}" = "" ]]; then help cdd return 2 fi local array=($(_cdd_directories)) local result # Check for exact match ELSE look for containing. if _contains ''${target} ''${array[@]}; then local current="''${PWD%/*}" result="''${current%\/$target\/*}/''${target}" else # Make search case-insensitive. shopt -s nocasematch # Find dir name that contains input. local found=1 for (( idx=''${#array[@]}-1 ; idx>=0 ; idx-- )); do dir="''${array[idx]}" [[ "''${dir}" =~ "''${target}" ]] && found=0 [[ ''${found} = 0 ]] && result="/''${dir}''${result}" done # Clean-up??? shopt -u nocasematch fi # Go there! if [[ "''${result}" != "" ]]; then echo "''${result}" cd "''${result}" else return 1 fi } # CLI cd. Opens CLI file manager. function ccd() { local tmp="$(mktemp -t "yazi-cwd.XXXXXX")" yazi "$@" --cwd-file="$tmp" if cwd="$(cat -- "$tmp")" && [ -n "$cwd" ] && [ "$cwd" != "$PWD" ]; then cd -- "$cwd" fi rm -f -- "$tmp" } # Get list of all parent dirs. function _cdd_directories() { local array IFS='/' read -r -a array <<< "''${PWD}" array=("''${array[@]:1}") unset array[-1] printf "%s\n" "''${array[@]}" } function _comp_cdd() { local IFS=$'\n' local dirs=($(_cdd_directories)) _autocomplete ''${dirs[@]} } complete -o nosort -o filenames -F _comp_cdd cdd ''; }