init.zsh 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. fasd --init env
  2. # function to execute built-in cd
  3. fasd_cd() {
  4. if [ $# -le 1 ]; then
  5. fasd "$@"
  6. else
  7. local _fasd_ret="$(fasd -e 'printf %s' "$@")"
  8. [ -z "$_fasd_ret" ] && return
  9. [ -d "$_fasd_ret" ] && cd "$_fasd_ret" || printf %s\n "$_fasd_ret"
  10. fi
  11. }
  12. alias a='fasd -a'
  13. alias s='fasd -si'
  14. alias sd='fasd -sid'
  15. alias sf='fasd -sif'
  16. alias d='fasd -d'
  17. alias f='fasd -f'
  18. alias v='f -e vim -b viminfo'
  19. alias z='fasd_cd -d'
  20. alias zz='fasd_cd -d -i'
  21. # add zsh hook
  22. _fasd_preexec() {
  23. { eval "fasd --proc $(fasd --sanitize $2)"; } >> "/dev/null" 2>&1
  24. }
  25. autoload -Uz add-zsh-hook
  26. add-zsh-hook preexec _fasd_preexec
  27. # zsh command mode completion
  28. _fasd_zsh_cmd_complete() {
  29. local compl
  30. read -c compl
  31. (( $+compstate )) && compstate[insert]=menu # no expand if compsys loaded
  32. reply=(${(f)"$(fasd --complete "$compl")"})
  33. }
  34. # enable command mode completion
  35. compctl -U -K _fasd_zsh_cmd_complete -V fasd -x 'C[-1,-*e],s[-]n[1,e]' -c - \
  36. 'c[-1,-A][-1,-D]' -f -- fasd fasd_cd
  37. (( $+functions[compdef] )) && {
  38. # zsh word mode completion
  39. _fasd_zsh_word_complete() {
  40. [ "$2" ] && local _fasd_cur="$2"
  41. [ -z "$_fasd_cur" ] && local _fasd_cur="${words[CURRENT]}"
  42. local fnd="${_fasd_cur//,/ }"
  43. local typ=${1:-e}
  44. fasd --query $typ "$fnd" 2>> "/dev/null" | \
  45. sort -nr | sed 's/^[^ ]*[ ]*//' | while read -r line; do
  46. compadd -U -V fasd "$line"
  47. done
  48. compstate[insert]=menu # no expand
  49. }
  50. _fasd_zsh_word_complete_f() { _fasd_zsh_word_complete f ; }
  51. _fasd_zsh_word_complete_d() { _fasd_zsh_word_complete d ; }
  52. _fasd_zsh_word_complete_trigger() {
  53. local _fasd_cur="${words[CURRENT]}"
  54. eval $(fasd --word-complete-trigger _fasd_zsh_word_complete $_fasd_cur)
  55. }
  56. # define zle widgets
  57. zle -C fasd-complete complete-word _generic
  58. zstyle ':completion:fasd-complete:*' completer _fasd_zsh_word_complete
  59. zstyle ':completion:fasd-complete:*' menu-select
  60. zle -C fasd-complete-f complete-word _generic
  61. zstyle ':completion:fasd-complete-f:*' completer _fasd_zsh_word_complete_f
  62. zstyle ':completion:fasd-complete-f:*' menu-select
  63. zle -C fasd-complete-d complete-word _generic
  64. zstyle ':completion:fasd-complete-d:*' completer _fasd_zsh_word_complete_d
  65. zstyle ':completion:fasd-complete-d:*' menu-select
  66. }
  67. (( $+functions[compdef] )) && {
  68. # enable word mode completion
  69. orig_comp="$(zstyle -L ':completion:\*' completer 2>> "/dev/null")"
  70. if [ "$orig_comp" ]; then
  71. case $orig_comp in
  72. *_fasd_zsh_word_complete_trigger*);;
  73. *) eval "$orig_comp _fasd_zsh_word_complete_trigger";;
  74. esac
  75. else
  76. zstyle ':completion:*' completer _complete _fasd_zsh_word_complete_trigger
  77. fi
  78. unset orig_comp
  79. }