curl / trurl

a command line tool for URL parsing and manipulation.
https://curl.se/trurl/
Other
3.19k stars 101 forks source link

Shell Completions #350

Open jacobmealey opened 2 months ago

jacobmealey commented 2 months ago

As we are moving toward a pretty stable set of command line options, I think it would be nice to provide completions for common shells.

If folks are interested in this I can start working on this soon.

IIRC curl has completions turned off by default, is that something we would want to do as well?

bagder commented 2 months ago

If folks are interested in this I can start working on this soon.

Sounds like a great thing to offer. Do you plan to aim for a specific shell or doing something generic that can be used for multiple shells?

curl has completions turned off by default

I'm not sure what this means. How does curl have completions turned off and where does it do this?

jacobmealey commented 2 months ago

How does curl have completions turned off and where does it do this?

I'm not familiar with what curl does, I have only built it from scratch a handful of times for testing trurl, I was just looking through how curl handles completions. I was referring to a comment in this issue: https://github.com/curl/curl/issues/13255

A standard autoconf build wouldn't have done it it. Now, they will be created when the flag(s) are given.

Maybe what I meant to say is some of the curl completions appear to be behind a flag when configuring the build. would we want the completions for trurl to be an optional step in the install process?

Do you plan to aim for a specific shell or doing something generic that can be used for multiple shells?

I feel like something more generic would be best, I was thinking it would be a script that generates for bash and zsh (these are the ones I am okay with) but is easy to extend it and generate for a different shell. There might also be an existing tool that does this as well.

jacobmealey commented 2 months ago

It seems like it should be pretty straight forward to retrofit this script to work with trurl: https://github.com/curl/curl/blob/master/scripts/completion.pl

bagder commented 2 months ago

The curl project has that completion.pl script that generates setups for two shells. Most notably it does not do it for bash, which I believe is still a very popular shell. (The completions for bash that we see in other places is done by others. It is a little suboptimal but nothing I can do anything about.)

This script has been criticized for requiring the actual executable to run, since it makes it impossible to generate completions when cross-compiling etc so there is a TODO item somewhere to rewrite it to instead based its logic on source code/static files.

jacobmealey commented 2 months ago

Thanks for the context. I will look into something that creates completions without needing to execute trurl. I think a good goal is zsh, bash and fish - and some clever way to add more shells later? It might be across a few PRs, probably one for each shell.

some interesting avenues: https://github.com/nevesnunes/sh-manpage-completions https://github.com/RobSis/zsh-completion-generator https://fishshell.com/docs/current/cmds/fish_update_completions.html

another avenue could be using libclang for python and manually pulling out the string from help(), but that seems like it be annoying if we change what help is doing.