Преглед изворни кода

Merge topic 'preset-bash-completion'

f7a6e036ad bash-completion: Support CMakePresets in cmake and ctest completion

Acked-by: Kitware Robot <[email protected]>
Acked-by: Craig Scott <[email protected]>
Merge-request: !7148
Craig Scott пре 3 година
родитељ
комит
c33c389f71
2 измењених фајлова са 48 додато и 1 уклоњено
  1. 37 1
      Auxiliary/bash-completion/cmake
  2. 11 0
      Auxiliary/bash-completion/ctest

+ 37 - 1
Auxiliary/bash-completion/cmake

@@ -96,7 +96,15 @@ _cmake()
             _filedir
             return
             ;;
-        --build|--install|--open)
+        --build)
+            # Seed the reply with non-directory arguments that we know are
+            # allowed to follow --build. _filedir will then prepend any valid
+            # directory matches to these.
+            COMPREPLY=( $( compgen -W "--preset --list-presets" -- "$cur" ) )
+            _filedir -d
+            return
+            ;;
+        --install|--open)
             _filedir -d
             return
             ;;
@@ -149,6 +157,34 @@ _cmake()
                 2>/dev/null | grep -v "^cmake version " )' -- "$cur" ) )
             return
             ;;
+        --list-presets)
+            local IFS=$'\n'
+            local quoted
+            printf -v quoted %q "$cur"
+
+            if [[ ! "${IFS}${COMP_WORDS[*]}${IFS}" =~ "${IFS}--build${IFS}" ]]; then
+                COMPREPLY=( $( compgen -W "configure${IFS}build${IFS}test${IFS}all" -- "$quoted" ) )
+            fi
+            return
+            ;;
+         --preset)
+            local IFS=$'\n'
+            local quoted
+            printf -v quoted %q "$cur"
+
+            local build_or_configure="configure"
+            if [[ "${IFS}${COMP_WORDS[*]}${IFS}" =~ "${IFS}--build${IFS}" ]]; then
+                build_or_configure="build"
+            fi
+
+            local presets=$( cmake --list-presets="$build_or_configure" 2>/dev/null |
+                grep -o "^  \".*\"" | sed \
+                -e "s/^  //g" \
+                -e "s/\"//g" \
+                -e 's/ /\\\\ /g' )
+            COMPREPLY=( $( compgen -W "$presets" -- "$quoted" ) )
+            return
+            ;;
     esac
 
     $split && return

+ 11 - 0
Auxiliary/bash-completion/ctest

@@ -103,6 +103,17 @@ _ctest()
                 2>/dev/null | grep -v "^ctest version " )' -- "$cur" ) )
             return
             ;;
+         --preset)
+            local IFS=$'\n'
+            local quoted
+            printf -v quoted %q "$cur"
+            COMPREPLY=( $( compgen -W '$( ctest --list-presets 2>/dev/null |
+                grep -o "^  \".*\"" | sed \
+                -e "s/^  //g" \
+                -e "s/\"//g" \
+                -e "s/ /\\\\ /g" )' -- "$quoted" ) )
+            return
+            ;;
     esac
 
     if [[ "$cur" == -* ]]; then