Date: Fri, 25 May 2012 15:55:39 +0200 From: Frank Dittrich <frank_dittrich@...mail.com> To: john-dev@...ts.openwall.com Subject: Re: Fwd: bash auto-completion for john On 05/24/2012 10:16 PM, magnum wrote: > Thanks, committed now. Thanks. To keep you busy, I changed the script once more. Those --options= with useful completion values can now be specified in an abbreviated form, as long as you use = (and not :) as a sepatator between option name and value. So, instead of $ ./john -ru[tab]=s[tab] to get $ ./john --rules=single You can now use $ ./john -ru=s[tab] to get $ ./john -ru=single This means, type any option (either with just one leading - or with leading --) in an abbreviated form (which is unambiguous), followed by =, optionally followed by more characters, to get a list of all possible completions: $ ./john -i=[tab][tab] all alnum alpha digits digits8 lanman $ ./john -inc=a[tab] completes to $ ./john -inc=al $ ./john -inc=al[tab][tab] lists these possible completions: all alnum alpha Currently, this is hard coded, as you can see from the diff. This means, if john gets a new option named --i<something>, I have to adjust the script to require --in= or -in= to complete incremental mode names. And if I do that, the script will require -in= even for older john versions where -i= would be unambiguous. So, a generic implementation instead of a hard coded one would be preferable. Another change I made: If I provide completions for --external=, --incremental=, --rules= or --session= using the --list option instead of a hard coded list, I convert the user input to lower case before completion. $ ./john -i=D[tab] results in $ ./john -i=digits The idea is to help users who used completion for an older john version and remember that the section names start with an upper case letter. Otherwise something that worked for older john versions will stop working once they switch to a newer one. $ ./john -i=X[tab][tab] doesn't change anything, because there is no possible completion starting with x or X. For an older john version (without --list), $ john -i=D[tab] becomes $ john -i=Digits To translate to lower case, I used tr.But I think it can be assumed tr exists on every system with bash. (I preferred tr over requiring a certain new bash version.) Frank View attachment "john.bash_completion.diff" of type "text/x-patch" (8171 bytes)
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.