Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Shell Completions #350

Open
jacobmealey opened this issue Sep 4, 2024 · 8 comments
Open

Shell Completions #350

jacobmealey opened this issue Sep 4, 2024 · 8 comments
Labels
enhancement New feature or request

Comments

@jacobmealey
Copy link
Contributor

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
Copy link
Member

bagder commented Sep 4, 2024

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
Copy link
Contributor Author

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: curl/curl#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
Copy link
Contributor Author

jacobmealey commented Sep 4, 2024

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
Copy link
Member

bagder commented Sep 5, 2024

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
Copy link
Contributor Author

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.

@bagder bagder added the enhancement New feature or request label Oct 21, 2024
@jacobmealey
Copy link
Contributor Author

jacobmealey commented Dec 11, 2024

I've been playing around with this a bit more, and have it working pretty well for ZSH. The script I wrote to generates the completions uses the trurl.1 file. Is there any appetite to bring the cd2nroff script into the trurl repo so we can have all the scripts for cutting releases / generating install artifacts?

making it work with the markdown wouldn't be too much work, but I just thought it would be worth bringing up
EDIT:
Making it work with the md file was a 3 line change.

@bagder
Copy link
Member

bagder commented Dec 13, 2024

Making it work with the md file was a 3 line change.

😀 I think that is a better approach since the .md is the source. That said, I'm certainly not against bringing over the cd2nroff script if it helps us.

@jacobmealey
Copy link
Contributor Author

Perfect, its shaping up pretty well with the .md file. Ive got the day off so I'm hoping to get it PR ready by this evening!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants