elasticdog / transcrypt

transparently encrypt files within a git repository
MIT License
1.43k stars 102 forks source link

#176 : Correction of zsh completion #177

Open Turiok opened 8 months ago

Turiok commented 8 months ago

I'm new to completion. I read this https://github.com/zsh-users/zsh-completions/blob/master/zsh-completions-howto.org to understand ZSH completion.

It seems to work now :

transcrypt -<TAB>                                                                                                                                                                                                                    
 -- option --
--cipher             -c  -- specify encryption cipher                                                                                                                                                                                       
--display            -d  -- display current credentials                                                                                                                                                                                     
--export-gpg         -e  -- export config to gpg recipient                                                                                                                                                                                  
--flush-credentials  -f  -- flush cached credentials                                                                                                                                                                                        
--force              -F  -- ignore repository clean state                                                                                                                                                                                   
--help               -h  -- view help message                                                                                                                                                                                               
--import-gpg         -i  -- import config from gpg file                                                                                                                                                                                     
--list               -l  -- list encrypted files                                                                                                                                                                                            
--password           -p  -- specify encryption password                                                                                                                                                                                     
--rekey              -r  -- rekey all encrypted files                                                                                                                                                                                       
--set-openssl-path       -- use OpenSSL at this path                                                                                                                                                                                        
--show-raw           -s  -- show raw file                                                                                                                                                                                                   
--uninstall          -u  -- uninstall transcrypt                                                                                                                                                                                            
--upgrade                -- upgrade transcrypt                                                                                                                                                                                              
--version            -v  -- print version                                                                                                                                                                                                   
--yes                -y  -- assume yes and accept defaults

and with the option "--set-openssl-path" it display folder tree for the path. I'm just not sure why when this option is used, the other can't be? the other options :

-c --cipher -d --display -f --flush-credentials -p --password -r --rekey

Try to correct #176

Turiok commented 8 months ago

I added another correction for listing cipher. open ssl version :

$>openssl version                                                                                                                                                                                                                         
OpenSSL 3.0.9 30 May 2023 (Library: OpenSSL 3.0.9 30 May 2023)

The result :

$>transcrypt --cipher=<TAB>                                                                                                                                                                                                                    
 -- available ciphers --
aes-128-cbc       aes-128-ecb       aes-192-cbc       aes-192-ecb         aria-192-cfb8     aria-192-ctr      aria-192-ecb      aria-192-ofb        camellia-256-ecb  des-ede           des-ede-cbc       des-ede-cfb       
aes-256-cbc       aes-256-ecb       aria-128-cbc      aria-128-cfb        aria-256-cbc      aria-256-cfb      aria-256-cfb1     aria-256-cfb8       des-ede3-ofb      des3              sm4-cbc           sm4-cfb           
aria-128-cfb1     aria-128-cfb8     aria-128-ctr      aria-128-ecb        aria-256-ctr      aria-256-ecb      aria-256-ofb      camellia-128-cbc    des-ede-ofb       des-ede3          des-ede3-cbc      des-ede3-cfb      
aria-128-ofb      aria-192-cbc      aria-192-cfb      aria-192-cfb1       camellia-128-ecb  camellia-192-cbc  camellia-192-ecb  camellia-256-cbc    sm4-ctr           sm4-ecb           sm4-ofb
jmurty commented 7 months ago

Hi @Turiok thanks for working to improve the zsh completions, this looks like it could be great.

However I haven't been able to get it to work to test it myself before I merge your improvements. Can you describe how you installed/activated the improved completions to test them?

I have tried these commands from the documentation you linked, but when I try different completions in my zsh I only get a local file list, or nothing.

This is what I have tried, on macOS 14.1.1:

zsh --version
# zsh 5.9 (arm-apple-darwin21.3.0)

openssl version
# OpenSSL 3.1.4 24 Oct 2023 (Library: OpenSSL 3.1.4 24 Oct 2023)

# Try to add repository completions file to 'fpath' to load completions
fpath=(~/x/y/z/transcrypt/contrib/zsh $fpath)

# Try to trigger reload/activation of completions in repository
unfunction _transcrypt
autoload -U _transcrypt

After what I assume is a successful load of the repository's completions (no errors from autoload -U):

transcrypt --cipher=<TAB>
# Nothing

transcrypt --<TAB>
# Nothing

transcrypt <TAB>
# Select from files in current working directory
Turiok commented 7 months ago

Hi @jmurty

In my computer, I use zinit to handle my zsh https://github.com/zdharma-continuum/zinit.

I tried with a clean zsh and your solution and it didn't work :

$> zsh --version
zsh 5.9 (x86_64-pc-linux-gnu)

$> zsh -s -f -i
# To have a clean zsh

$> transcrypt -<TAB><TAB>
# Display nothing

$> fpath=$HOME/.zinit/plugins/elasticdog---transcrypt/contrib/zsh
# Display nothing

$>  unfunction _transcrypt
unfunction: no such hash table element: _transcrypt

$> autoload -U _transcrypt
# Display nothing

$> transcrypt -<TAB><TAB>
# Display nothing

Finally I search another solution without zinit and it works if you can try? :

 $> zsh -s -f -i
# To have a clean zsh

$> fpath=(~/.zinit/plugins/elasticdog---transcrypt/contrib/zsh $fpath)

$> autoload -U compinit; compinit

$> transcrypt -<TAB><TAB>
--cipher             -c  -- specify encryption cipher                                                                                                                                                                                       
--display            -d  -- display current credentials                                                                                                                                                                                     
--export-gpg         -e  -- export config to gpg recipient                                                                                                                                                                                  
--flush-credentials  -f  -- flush cached credentials                                                                                                                                                                                        
--force              -F  -- ignore repository clean state                                                                                                                                                                                   
--help               -h  -- view help message                                                                                                                                                                                               
--import-gpg         -i  -- import config from gpg file                                                                                                                                                                                     
--list               -l  -- list encrypted files                                                                                                                                                                                            
--password           -p  -- specify encryption password                                                                                                                                                                                     
--rekey              -r  -- rekey all encrypted files                                                                                                                                                                                       
--set-openssl-path       -- use OpenSSL at this path                                                                                                                                                                                        
--show-raw           -s  -- show raw file                                                                                                                                                                                                   
--uninstall          -u  -- uninstall transcrypt                                                                                                                                                                                            
--upgrade                -- upgrade transcrypt                                                                                                                                                                                              
--version            -v  -- print version                                                                                                                                                                                                   
--yes                -y  -- assume yes and accept defaults

$> transcrypt --cipher=<TAB><TAB>
aes-128-cbc       aes-128-ecb       aes-192-cbc       aes-192-ecb         aria-192-cfb8     aria-192-ctr      aria-192-ecb      aria-192-ofb        camellia-256-ecb  des-ede           des-ede-cbc       des-ede-cfb       
aes-256-cbc       aes-256-ecb       aria-128-cbc      aria-128-cfb        aria-256-cbc      aria-256-cfb      aria-256-cfb1     aria-256-cfb8       des-ede3-ofb      des3              sm4-cbc           sm4-cfb           
aria-128-cfb1     aria-128-cfb8     aria-128-ctr      aria-128-ecb        aria-256-ctr      aria-256-ecb      aria-256-ofb      camellia-128-cbc    des-ede-ofb       des-ede3          des-ede3-cbc      des-ede3-cfb      
aria-128-ofb      aria-192-cbc      aria-192-cfb      aria-192-cfb1       camellia-128-ecb  camellia-192-cbc  camellia-192-ecb  camellia-256-cbc    sm4-ctr           sm4-ecb           sm4-ofb