Requests for Comments-11: Bash completion for command line OTB Applications
Contents
Status
- Submitted by Guillaume Pasero (16/09/15 15:11)
- Open for comments
Content
What changes will be made and why they will make a better Orfeo ToolBox
The OTB Applications are a simple way to use the Orfeo Toolbox library. They offer at least 2 types of interface : a command line interface and a graphical interface. The command line interface requires to know the different keys to set the parameters (for instance : '-in' , '-out' , '-classifier.svm.type' ). This is displayed by the help message, but it would be very convenient to use bash completion to set the keys faster.
The bash completion doesn't impact the OTB library, it relies on external shell scripts, deployed usually in /etc/bash_completion.d (or a similar path). They impact the packaging of OTB. However, using the library to produce the completion scripts would be simple :
- create an executable that loads each OTB application
- for each application, get its keys
- produce the completion script of this application in the build directory
- optionnaly, when a choice parameter is detected, it is possible to use completion on the following token among the possible choice values (see example below)
I have made a small test for one application : Convert. The completion script is the following :
_otbcli_Convert() { local cur prev COMPREPLY=() _get_comp_words_by_ref cur prev case "$cur" in -*) key_list="-in -type -type.none -type.linear -type.log2 -type.linear.gamma -out -hcp -hcp.low -hcp.high -progress -ram -inxml" COMPREPLY=( $( compgen -W '$key_list' -- $cur) ) return 0 ;; esac case "$prev" in -type) key_list="none linear log2" COMPREPLY=( $( compgen -W '$key_list' -- $cur) ) ;; esac return 0 } complete -o default -F _otbcli_Convert otbcli_Convert
'cur' is the current token to be guessed, 'prev' is the previous token.
I have tested this script successfully. Its generation can be automated without much efforts. It is also possible to use only one file to store the scripts for all the applications (to avoid flooding the bash_completion folder).
When will those changes be available (target release or date)
No planned release, but development effort is small.
Who will be developing the proposed changes?
Community
Comments
- The completion could also work with the following calls :
$ otbcli $ otbcli Convert
The first call would be completed with available applications. The second call would be completed with the application parameters. This usage of otbcli is a different feature though. See [1]
- The completion could be made "dynamic" : calling otbcli in the completion script and parsing results. This could impact the performance as otbcli would actually load the application. See [2]
- In the same spirit, patch for manpage proposed by Philippe should be integrated as well, since its purpose was to get completion from fish (friendly interactive shell). See [3]
Support
This RFComments has received support from :
- Julien Michel
- Julien Malik
- Conrad Bielski
Corresponding Requests for Changes
(none)