DylanSale opened a new issue #2622:
URL: https://github.com/apache/camel-k/issues/2622


   I did `brew install kamel`:
   
   ```
   ==> Downloading https://ghcr.io/v2/homebrew/core/kamel/manifests/1.5.1
   Already downloaded: 
/Users/dylan/Library/Caches/Homebrew/downloads/9342e8dbc1d75c099d6e3bcada1150e31f2a0176c62de74b73bfbcc30727b413--kamel-1.5.1.bottle_manifest.json
   ==> Downloading 
https://ghcr.io/v2/homebrew/core/kamel/blobs/sha256:247f124ed56b
   Already downloaded: 
/Users/dylan/Library/Caches/Homebrew/downloads/2221fae4f84c4f4d2c4cfcfe5c49137c79e561229b6247f774b630c8bea07a54--kamel--1.5.1.big_sur.bottle.tar.gz
   ==> Reinstalling kamel
   ==> Pouring kamel--1.5.1.big_sur.bottle.tar.gz
   ==> Caveats
   zsh completions have been installed to:
     /usr/local/share/zsh/site-functions
   ==> Summary
   🍺  /usr/local/Cellar/kamel/1.5.1: 9 files, 67.3MB
   ```
   
   then when I type `kamel <TAB>` it outputs: `kamel Error:\ unknown\ command\ 
\"__complete\"\ for\ \"kamel\"`
   
   Here is the debug log file:
   ```
   ========= starting completion logic ==========
   CURRENT: 2, words[*]: kamel __complete
   Truncated words[*]: kamel __complete,
   lastParam: __complete, lastChar: e
   About to call: eval kamel __complete __complete
   completion output: Error: unknown command "__complete" for "kamel"
   last line: Error: unknown command "__complete" for "kamel"
   No directive found.  Setting do default
   directive: 0
   completions: Error: unknown command "__complete" for "kamel"
   flagPrefix:
   Adding completion: Error\: unknown command "__complete" for "kamel"
   ```
   
   
   This is my generated _kamel completion file:
   
   ```
   > cat /usr/local/share/zsh/site-functions/_kamel                             
                                                                                
                                                                                
                                                      
   #compdef _kamel kamel
   
   # zsh completion for kamel                                -*- shell-script 
-*-
   
   __kamel_debug()
   {
       local file="$BASH_COMP_DEBUG_FILE"
       if [[ -n ${file} ]]; then
           echo "$*" >> "${file}"
       fi
   }
   
   _kamel()
   {
       local shellCompDirectiveError=1
       local shellCompDirectiveNoSpace=2
       local shellCompDirectiveNoFileComp=4
       local shellCompDirectiveFilterFileExt=8
       local shellCompDirectiveFilterDirs=16
   
       local lastParam lastChar flagPrefix requestComp out directive compCount 
comp lastComp
       local -a completions
   
       __kamel_debug "\n========= starting completion logic =========="
       __kamel_debug "CURRENT: ${CURRENT}, words[*]: ${words[*]}"
   
       # The user could have moved the cursor backwards on the command-line.
       # We need to trigger completion from the $CURRENT location, so we need
       # to truncate the command-line ($words) up to the $CURRENT location.
       # (We cannot use $CURSOR as its value does not work when a command is an 
alias.)
       words=("${=words[1,CURRENT]}")
       __kamel_debug "Truncated words[*]: ${words[*]},"
   
       lastParam=${words[-1]}
       lastChar=${lastParam[-1]}
       __kamel_debug "lastParam: ${lastParam}, lastChar: ${lastChar}"
   
       # For zsh, when completing a flag with an = (e.g., kamel -n=<TAB>)
       # completions must be prefixed with the flag
       setopt local_options BASH_REMATCH
       if [[ "${lastParam}" =~ '-.*=' ]]; then
           # We are dealing with a flag with an =
           flagPrefix="-P ${BASH_REMATCH}"
       fi
   
       # Prepare the command to obtain completions
       requestComp="${words[1]} __complete ${words[2,-1]}"
       if [ "${lastChar}" = "" ]; then
           # If the last parameter is complete (there is a space following it)
           # We add an extra empty parameter so we can indicate this to the go 
completion code.
           __kamel_debug "Adding extra empty parameter"
           requestComp="${requestComp} \"\""
       fi
   
       __kamel_debug "About to call: eval ${requestComp}"
   
       # Use eval to handle any environment variables and such
       out=$(eval ${requestComp} 2>/dev/null)
       __kamel_debug "completion output: ${out}"
   
       # Extract the directive integer following a : from the last line
       local lastLine
       while IFS='\n' read -r line; do
           lastLine=${line}
       done < <(printf "%s\n" "${out[@]}")
       __kamel_debug "last line: ${lastLine}"
   
       if [ "${lastLine[1]}" = : ]; then
           directive=${lastLine[2,-1]}
           # Remove the directive including the : and the newline
           local suffix
           (( suffix=${#lastLine}+2))
           out=${out[1,-$suffix]}
       else
           # There is no directive specified.  Leave $out as is.
           __kamel_debug "No directive found.  Setting do default"
           directive=0
       fi
   
       __kamel_debug "directive: ${directive}"
       __kamel_debug "completions: ${out}"
       __kamel_debug "flagPrefix: ${flagPrefix}"
   
       if [ $((directive & shellCompDirectiveError)) -ne 0 ]; then
           __kamel_debug "Completion received error. Ignoring completions."
           return
       fi
   
       compCount=0
       while IFS='\n' read -r comp; do
           if [ -n "$comp" ]; then
               # If requested, completions are returned with a description.
               # The description is preceded by a TAB character.
               # For zsh's _describe, we need to use a : instead of a TAB.
               # We first need to escape any : as part of the completion itself.
               comp=${comp//:/\\:}
   
               local tab=$(printf '\t')
               comp=${comp//$tab/:}
   
               ((compCount++))
               __kamel_debug "Adding completion: ${comp}"
               completions+=${comp}
               lastComp=$comp
           fi
       done < <(printf "%s\n" "${out[@]}")
   
       if [ $((directive & shellCompDirectiveFilterFileExt)) -ne 0 ]; then
           # File extension filtering
           local filteringCmd
           filteringCmd='_files'
           for filter in ${completions[@]}; do
               if [ ${filter[1]} != '*' ]; then
                   # zsh requires a glob pattern to do file filtering
                   filter="\*.$filter"
               fi
               filteringCmd+=" -g $filter"
           done
           filteringCmd+=" ${flagPrefix}"
   
           __kamel_debug "File filtering command: $filteringCmd"
           _arguments '*:filename:'"$filteringCmd"
       elif [ $((directive & shellCompDirectiveFilterDirs)) -ne 0 ]; then
           # File completion for directories only
           local subDir
           subdir="${completions[1]}"
           if [ -n "$subdir" ]; then
               __kamel_debug "Listing directories in $subdir"
               pushd "${subdir}" >/dev/null 2>&1
           else
               __kamel_debug "Listing directories in ."
           fi
   
           _arguments '*:dirname:_files -/'" ${flagPrefix}"
           if [ -n "$subdir" ]; then
               popd >/dev/null 2>&1
           fi
       elif [ $((directive & shellCompDirectiveNoSpace)) -ne 0 ] && [ 
${compCount} -eq 1 ]; then
           __kamel_debug "Activating nospace."
           # We can use compadd here as there is no description when
           # there is only one completion.
           compadd -S '' "${lastComp}"
       elif [ ${compCount} -eq 0 ]; then
           if [ $((directive & shellCompDirectiveNoFileComp)) -ne 0 ]; then
               __kamel_debug "deactivating file completion"
           else
               # Perform file completion
               __kamel_debug "activating file completion"
               _arguments '*:filename:_files'" ${flagPrefix}"
           fi
       else
           _describe "completions" completions $(echo $flagPrefix)
       fi
   }
   
   # don't run the completion function when being source-ed or eval-ed
   if [ "$funcstack[1]" = "_kamel" ]; then
        _kamel
   fi
   ```
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@camel.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


Reply via email to