Current section
Files
Jump to
Current section
Files
lib/jacob_cli/commands/shell/autocomplete.ex
defmodule JacobCli.Commands.Shell.Autocomplete do
use Jacob.Command
@name "_autocomplete"
@desc "list commands for zsh autocompletion"
@hidden true
@moduledoc false
def run(["_autocomplete", "zsh"]), do: list_commands(:zsh)
def run(["_autocomplete", "bash"]), do: list_commands(:bash)
defp list_commands(:zsh) do
get_all_commands()
|> zsh_autocompletion()
end
defp list_commands(:bash) do
get_all_commands()
|> bash_autocompletion()
end
defp bash_autocompletion([]), do: nil
defp bash_autocompletion([{_, command} | next_commands]) do
IO.write(~s'"#{command.name}" ')
bash_autocompletion(next_commands)
end
defp zsh_autocompletion([]), do: nil
defp zsh_autocompletion([{_, command} | next_commands]) do
IO.puts(sanitize(command.name) <> ":" <> sanitize(command.desc))
zsh_autocompletion(next_commands)
end
defp get_all_commands() do
Jacob.Command.Server.all()
|> Enum.filter(fn {_, command} -> !command.hidden? end)
end
defp sanitize(value) do
value |> String.replace(":", "\\:")
end
end