caveats: Differentiate zsh completion files and function files

When installing a file to zsh/site-functions directory, it is assumed this is a zsh completion file,
and the zsh completion caveat is printed after installation.

But not all files in the zsh/site-functions directory are completion files.
Some are files for functions that can be loaded on demand with zsh's autoload command.

- Edit Keg.completion_installed to search specifically for files in the zsh/site-functions
  directory starting with an underscore only (By convention, zsh completion files start with an underscore)
- Add Keg.zsh_functions_installed to search for non-completion files in the zsh/site-functions
- Add Caveats.zsh_function_caveats to print a caveat if non-completion files have been installed
  to zsh/site-functions
This commit is contained in:
Zach Whaley 2016-12-03 20:45:54 -06:00
parent 95688cd72e
commit 14f46625a3
2 changed files with 21 additions and 1 deletions

View File

@ -19,6 +19,7 @@ class Caveats
caveats << bash_completion_caveats caveats << bash_completion_caveats
caveats << zsh_completion_caveats caveats << zsh_completion_caveats
caveats << fish_completion_caveats caveats << fish_completion_caveats
caveats << zsh_function_caveats
caveats << fish_function_caveats caveats << fish_function_caveats
caveats << plist_caveats caveats << plist_caveats
caveats << python_caveats caveats << python_caveats
@ -100,6 +101,16 @@ class Caveats
EOS EOS
end end
def zsh_function_caveats
return unless keg
return unless keg.zsh_functions_installed?
<<-EOS.undent
zsh functions have been installed to:
#{HOMEBREW_PREFIX}/share/zsh/site-functions
EOS
end
def fish_function_caveats def fish_function_caveats
return unless keg return unless keg
return unless keg.fish_functions_installed? return unless keg.fish_functions_installed?

View File

@ -297,12 +297,21 @@ class Keg
def completion_installed?(shell) def completion_installed?(shell)
dir = case shell dir = case shell
when :bash then path.join("etc", "bash_completion.d") when :bash then path.join("etc", "bash_completion.d")
when :zsh then path.join("share", "zsh", "site-functions") when :zsh
dir = path.join("share", "zsh", "site-functions")
dir if dir && dir.directory? && dir.children.any? { |f| f.basename.to_s.start_with?("_") }
when :fish then path.join("share", "fish", "vendor_completions.d") when :fish then path.join("share", "fish", "vendor_completions.d")
end end
dir && dir.directory? && !dir.children.empty? dir && dir.directory? && !dir.children.empty?
end end
def zsh_functions_installed?
# Check for non completion functions (i.e. files not started with an underscore),
# since those can be checked separately
dir = path.join("share", "zsh", "site-functions")
dir && dir.directory? && dir.children.any? { |f| !f.basename.to_s.start_with?("_") }
end
def fish_functions_installed? def fish_functions_installed?
dir = path.join("share", "fish", "vendor_functions.d") dir = path.join("share", "fish", "vendor_functions.d")
dir && dir.directory? && !dir.children.empty? dir && dir.directory? && !dir.children.empty?