github.com/divan/complete@v0.0.0-20170515130636-337e95201af7/cmd/install/zsh.go (about) 1 package install 2 3 import "fmt" 4 5 // (un)install in zsh 6 // basically adds/remove from .zshrc: 7 // 8 // autoload -U +X bashcompinit && bashcompinit" 9 // complete -C </path/to/completion/command> <command> 10 type zsh struct { 11 rc string 12 } 13 14 func (z zsh) Install(cmd, bin string) error { 15 completeCmd := z.cmd(cmd, bin) 16 if lineInFile(z.rc, completeCmd) { 17 return fmt.Errorf("already installed in %s", z.rc) 18 } 19 20 bashCompInit := "autoload -U +X bashcompinit && bashcompinit" 21 if !lineInFile(z.rc, bashCompInit) { 22 completeCmd = bashCompInit + "\n" + completeCmd 23 } 24 25 return appendToFile(z.rc, completeCmd) 26 } 27 28 func (z zsh) Uninstall(cmd, bin string) error { 29 completeCmd := z.cmd(cmd, bin) 30 if !lineInFile(z.rc, completeCmd) { 31 return fmt.Errorf("does not installed in %s", z.rc) 32 } 33 34 return removeFromFile(z.rc, completeCmd) 35 } 36 37 func (zsh) cmd(cmd, bin string) string { 38 return fmt.Sprintf("complete -C %s %s", bin, cmd) 39 }