Reminds of of Project Hail Mary. Never heard the word "carapace" before that book...
In Romanian "carapace" means shell. It seems to mean the same in English, too, but I presume is seldom used: https://en.wikipedia.org/wiki/Carapace
Carapace: A multi-shell completion library and binary
21–30 of 30 posts
Re: Carapace: A multi-shell completion library and binary
#22Earlier quoted context omitted.
It's not uncommon in English, though I suspect it's most often used in technical fields like entomology.
I'm pretty sure you encounter in in science fiction as well, where some bug like alien has a carapace or a soldier has some armored exo-skeleton described by the word. Though I cannot think of any specific examples.
A specific example would be the Carapace (armor) upgrades in Starcraft 2 (one faction, the Zerg, are basically insects).
Also sometimes used for (humanoid) armor crafted from shells (fantasy settings).
I think this is MUCH more prevalent in scifi/fantasy targeted at male audiences, and the data confirms it [1]
[1]: https://osf.io/g4xrt/#!
Re: Carapace: A multi-shell completion library and binary
#23Earlier quoted context omitted.
I'm pretty sure you encounter in in science fiction as well, where some bug like alien has a carapace or a soldier has some armored exo-skeleton described by the word. Though I cannot think of any specific examples.
Quite common in videogames, too. A specific example would be the Carapace (armor) upgrades in Starcraft 2 (one faction, the Zerg, are basically insects). Also sometimes used for (humanoid) armor crafted from shells (fantasy settings). I think this is MUCH more prevalent in scifi/fantasy targeted at male audiences, and the data confirms it [1] [1]: https://osf.io/g4xrt/# !
Re: Carapace: A multi-shell completion library and binary
#24To me it make sense that completion for program P should be handled by program P itself. That way, completions are unlikely to get out of sync with the application, and the completion handler can use the same option parser as the application. A way to do this is to use a special "hidden" switch to request completion.
Specifically the DomTerm terminal emulator (https://domterm.org) handles its own completions. Bash allows you to register a command that handles completions for some other command. The following tells bash that to handle completions for the domterm command it should call domterm with the magic "#complete-for-bash" option followed by the existing line and position.
complete -o nospace -C 'domterm "#complete-for-bash" "$COMP_LINE" "$COMP_POINT"' domterm
When domterm is run with "#complete-for-bash" as the first argument (chosen to avoids accidental use) it processes the remaining arguments, and prints out the completion suggestions to bash.I don't know how to do something similar for other shells; suggestions welcome. Some other shells (such as Fish) include help text as part of the suggested completions. Handling that would require a more complex protocol. Perhaps one that returs a result in JSON format?
If a such a protocol were standardized (perhaps invoked by a "#completions-as-json" option?), we just need to solve a final piece of the puzzle: How does a shell know if a command understands the "#completions-as-json" option? My suggestion is that we define a new keyword-value pair in the "desktop" file specification; the shell would search for a P.desktop file,
Re: Carapace: A multi-shell completion library and binary
#25Earlier quoted context omitted.
> much faster than zsh script completions I'm curious where did you get that from. Edit: I read the note in your dotfiles repo. Yes calling `compinit` on each shell invocation is going to be really slow. That's not how you're supposed to do it, you could at least add the `-C` flag to cache the completions. Ideally you'd also use `zcompile` to compile the cache to ZSH word code. This puts my completions initializing t…
I have had this snippet in my .zshrc for years, autoload -U compinit && compinit { # Compile the completion dump to increase startup speed. Run in background. zcompdump="${ZDOTDIR:-$HOME}/.zcompdump" if [[ -s "$zcompdump" && (! -s "${zcompdump}.zwc" || "$zcompdump" -nt "${zcompdump}.zwc") ]]; then # if zcompdump file exists, and we don't have a compiled version or the # dump file is newer than the compiled file zcomp…
{
# load compinit and rebind ^I (tab) to expand-or-complete, then compile
# completions as bytecode if needed.
lazyload-compinit() {
autoload -Uz compinit
# compinit will automatically cache completions to ~/.zcompdump
compinit
bindkey "^I" expand-or-complete
{
zcompdump="${ZDOTDIR:-$HOME}/.zcompdump"
# if zcompdump file exists, and we don't have a compiled version or the
# dump file is newer than the compiled file, update the bytecode.
if [[ -s "$zcompdump" && (! -s "${zcompdump}.zwc" || "$zcompdump" -nt "${zcompdump}.zwc") ]]; then
zcompile "$zcompdump"
fi
} &!
# pretend we called this directly, instead of the lazy loader
zle expand-or-complete
}
# mark the function as a zle widget
zle -N lazyload-compinit
bindkey "^I" lazyload-compinit
}Re: Carapace: A multi-shell completion library and binary
#26Earlier quoted context omitted.
I have had this snippet in my .zshrc for years, autoload -U compinit && compinit { # Compile the completion dump to increase startup speed. Run in background. zcompdump="${ZDOTDIR:-$HOME}/.zcompdump" if [[ -s "$zcompdump" && (! -s "${zcompdump}.zwc" || "$zcompdump" -nt "${zcompdump}.zwc") ]]; then # if zcompdump file exists, and we don't have a compiled version or the # dump file is newer than the compiled file zcomp…
I just want to say - thank you! I've been using ZSH since it became the default on macOS and one thing that started annoying me recently is the slow startup time. Your snippet tangibly improved that. Do you by chance have any good resources on optimising my config further?
Re: Carapace: A multi-shell completion library and binary
#27Earlier quoted context omitted.
> much faster than zsh script completions I'm curious where did you get that from. Edit: I read the note in your dotfiles repo. Yes calling `compinit` on each shell invocation is going to be really slow. That's not how you're supposed to do it, you could at least add the `-C` flag to cache the completions. Ideally you'd also use `zcompile` to compile the cache to ZSH word code. This puts my completions initializing t…
I have had this snippet in my .zshrc for years, autoload -U compinit && compinit { # Compile the completion dump to increase startup speed. Run in background. zcompdump="${ZDOTDIR:-$HOME}/.zcompdump" if [[ -s "$zcompdump" && (! -s "${zcompdump}.zwc" || "$zcompdump" -nt "${zcompdump}.zwc") ]]; then # if zcompdump file exists, and we don't have a compiled version or the # dump file is newer than the compiled file zcomp…
You're right, my memory has let me down.
> Do you have any pointers for the "load on tab" idea? I didn't turn up any good results in DDG and LLMs were just hallucinating.
The simplest implementation would be something like
bindkey ^I init_completions
init_completions () {
# ... init logic here ...
# rebind tab to complete
bindkey ^I complete-word
# actually do complete the initial request
zle complete-word
}
Edit: I see now you already figured it out, yeah that's exactly what I meantRe: Carapace: A multi-shell completion library and binary
#28I tried to use this to get better completions with nushell, but it just doesn't have the breadth and depth of completions that fish has as of yet, nor does it have automatic completion generation from manages (although it does have a tool for that) so I eventually gave up and just made fish itself my nushell's completion engine. However I'll be keeping my eye on it, because it's a really cool idea to have a shared co…
That's an interesting idea. Do you have a link to show how you did this?
Re: Carapace: A multi-shell completion library and binary
#29I tried to use this to get better completions with nushell, but it just doesn't have the breadth and depth of completions that fish has as of yet, nor does it have automatic completion generation from manages (although it does have a tool for that) so I eventually gave up and just made fish itself my nushell's completion engine. However I'll be keeping my eye on it, because it's a really cool idea to have a shared co…
> so I eventually gave up and just made fish itself my nushell's completion engine That's an interesting idea. Do you have a link to show how you did this?
The completions don't work sometimes (for instance you don't get completion for some commands when running them with sudo) and it doesn't fall back on providing file completions if it doesn't know what other completions to provide, which is a bit annoying, but it generally works and I'm sure there are ways to fix that too.
Re: Carapace: A multi-shell completion library and binary
#30Reminds of of Project Hail Mary. Never heard the word "carapace" before that book...