diff options
author | Mathieu Duponchelle <mathieu.duponchelle@opencreed.com> | 2015-02-26 13:19:25 +0100 |
---|---|---|
committer | Thibault Saunier <tsaunier@gnome.org> | 2015-03-23 12:41:00 +0100 |
commit | 8e18fd790c8711c0b8829d475d7cf12e7568d446 (patch) | |
tree | dd590602a0c9bd4d4b38b25b488dd972909cf251 | |
parent | d77ad923a6e3c4aa77856a778960d093a0f404d8 (diff) |
bash-completion: Add support for new ges-launch commands.
-rw-r--r-- | data/completions/ges-launch-1.0 | 97 | ||||
-rw-r--r-- | tools/ges-launch.c | 41 |
2 files changed, 129 insertions, 9 deletions
diff --git a/data/completions/ges-launch-1.0 b/data/completions/ges-launch-1.0 index f8a126a3..e660a8a3 100644 --- a/data/completions/ges-launch-1.0 +++ b/data/completions/ges-launch-1.0 @@ -61,6 +61,58 @@ _ges___videosink () { COMPREPLY=( $(compgen -W "$($HELPER --klass=Sink --sinkcaps='video/x-raw')" -- $cur) ) } +_ges_clip () { + if [[ "$prev" == "$command" ]]; + then + _mandatory__argument + else + COMPREPLY=( $(compgen -W "duration= inpoint= start= layer= $(ges-launch-1.0 help all | egrep '^ [a-zA-Z0-9]')" -- $cur) ) + fi +} + +_ges_effect () { + if [[ "$prev" == "$command" ]]; + then + _mandatory__argument + else + COMPREPLY=( $(compgen -W "duration= start= layer= $(ges-launch-1.0 help all | egrep '^ [a-zA-Z0-9]')" -- $cur) ) + fi +} + +_ges_list_options () { + COMPREPLY=( $(compgen -W "$(ges-launch-1.0 --help-all | grep -oh '[[:graph:]]*--[[:graph:]]*' | cut -d'=' -f1)" -- $cur) ) +} + +_ges_list_commands () { + COMPREPLY=( $(compgen -W "$(ges-launch-1.0 help all | egrep '^ [a-zA-Z0-9]')" -- $cur) ) +} + +_ges_list_properties () { + local props + + if [[ "$real_command" == "" ]] + then + _mandatory__argument + elif [[ "$real_command" == "clip" ]] + then + COMPREPLY=( $(compgen -W "set-alpha set-posx set-posy set-width set-height set-volume set-mute" -- $cur) ) + elif [[ "$real_command" == "effect" ]] + then + COMPREPLY=() + effect_bin_description="${effect_bin_description//\"/ }" + array=(${effect_bin_description//!/ }) + for i in "${array[@]}"; do + props=("$($HELPER --element-properties $i)") + for j in $props; do + j="${j//=/ }" + COMPREPLY+=( $(compgen -W "set-$j" -- $cur) ) + done + done + else + _mandatory__argument + fi +} + _ges___exclude_ () { _mandatory__argument; } _ges___encoding_profile () { _mandatory__argument; } _ges___ges_sample_path () { _mandatory__argument; } @@ -69,9 +121,27 @@ _ges___thumbnail () { _mandatory__argument; } _ges___repeat () { _mandatory__argument; } _ges___save () { _mandatory__argument; } +containsElement () { + local e + for e in "${@:2}"; + do + [[ "$e" == "$1" ]] && return 0; + done + return 1 +} + __ges_main () { - local i=1 c=1 command function_exists completion_func + local i=1 c=1 command function_exists completion_func commands real_command effect_bin_description + + commands=($(ges-launch-1.0 help all | egrep '^ [a-zA-Z0-9]')) + real_command="" + effect_bin_description="" + + if [[ "$cur" == "=" ]]; then + _mandatory__argument + return + fi while [[ $i -ne $COMP_CWORD ]]; do @@ -80,15 +150,18 @@ __ges_main () if [[ "$var" == "--"* ]] then command="$var" + elif containsElement "$var" "${commands[@]}"; + then + real_command="$var" + command="$var" + if [[ "$var" == "effect" ]] + then + effect_bin_description="${COMP_WORDS[i+1]}" + fi fi i=$[$i+1] done - if [ -z "$command" ]; then - COMPREPLY=( $(compgen -W "$(ges-launch-1.0 --help-all | grep -oh '[[:graph:]]*--[[:graph:]]*' | cut -d'=' -f1)" -- $cur) ) - return - fi - if [[ "$command" == "--gst"* ]]; then completion_func="_${command//-/_}" else @@ -99,13 +172,19 @@ __ges_main () function_exists=$? - if [[ "$cur" == "--"* ]]; then - COMPREPLY=( $(compgen -W "$(ges-launch-1.0 --help-all | grep -oh '[[:graph:]]*--[[:graph:]]*' | cut -d'=' -f1)" -- $cur) ) + if [[ "$cur" == "-"* ]]; then + _ges_list_options + elif [[ "$cur" == "="* ]] + then + _mandatory__argument + elif [[ "$cur" == "set-"* ]] + then + _ges_list_properties elif [ $function_exists -eq 0 ] then $completion_func else - COMPREPLY=( $(compgen -W "$(ges-launch-1.0 --help-all | grep -oh '[[:graph:]]*--[[:graph:]]*' | cut -d'=' -f1)" -- $cur) ) + _ges_list_commands fi } diff --git a/tools/ges-launch.c b/tools/ges-launch.c index e2f23e54..c1e6a57f 100644 --- a/tools/ges-launch.c +++ b/tools/ges-launch.c @@ -637,6 +637,46 @@ _parse_timeline (int argc, char **argv) return string; } +static void +_print_all_commands (void) +{ + /* Yeah I know very fancy */ + g_print ("Available ges-launch-1.0 commands:\n\n"); + g_print (" %-9s %-11s %-10s\n\n", "+clip", "+effect", "set-"); + g_print ("See ges-launch-1.0 help <command> or ges-launch-1.0 help <guide> " + "to read about a specific command or a given guide\n"); +} + +static void +_check_command_help (int argc, gchar ** argv) +{ +/** + * gchar *page = NULL; + * + * if (argc == 2) + * page = g_strdup ("ges-launch-1.0"); + * else if (!g_strcmp0 (argv[2], "all")) + */ + + if (!g_strcmp0 (argv[1], "help")) { + _print_all_commands (); + exit (0); + } + +/* else + * page = g_strconcat ("ges-launch-1.0", "-", argv[2], NULL); + * + * if (page) { + * execlp ("man", "man", page, NULL); + * g_free (page); + * } + * + * an error is raised by execlp it will be displayed in the terminal + * exit (0); + * } + */ +} + int main (int argc, gchar ** argv) { @@ -716,6 +756,7 @@ main (int argc, gchar ** argv) guint signal_watch_id; #endif + _check_command_help (argc, argv); setlocale (LC_ALL, ""); ctx = g_option_context_new ("- plays or renders a timeline."); |