Use fzf by default for build-dir selector
This commit is contained in:
		
							parent
							
								
									f50db402af
								
							
						
					
					
						commit
						0efb635f02
					
				@ -85,97 +85,110 @@ EOF
 | 
			
		||||
    if [[ ${#local_build_dirs} -eq 0 ]]; then
 | 
			
		||||
      error "no build directories found"; return 1
 | 
			
		||||
    elif [[ ${#local_build_dirs} -gt 1 ]]; then
 | 
			
		||||
      zmodload zsh/curses && {
 | 
			
		||||
        # Get the size of the terminal
 | 
			
		||||
        local size=`stty size`
 | 
			
		||||
        integer height=${size% *}
 | 
			
		||||
        integer width=${size#* }
 | 
			
		||||
      if command -v fzf &> /dev/null; then
 | 
			
		||||
        # Use fzf to select a build directory
 | 
			
		||||
        local_build_dir=$(
 | 
			
		||||
          printf '%s\n' "${local_build_dir[@]}" $local_build_dirs |
 | 
			
		||||
          fzf --layout=reverse --info=hidden --border=rounded \
 | 
			
		||||
              --height=$(( ${#local_build_dirs} + 5 ))
 | 
			
		||||
        )
 | 
			
		||||
        if [[ $? -ne 0 ]]; then
 | 
			
		||||
          return 1
 | 
			
		||||
        fi
 | 
			
		||||
      else
 | 
			
		||||
        # Fallback to zcurses selector when fzf is not available
 | 
			
		||||
        zmodload zsh/curses && {
 | 
			
		||||
          # Get the size of the terminal
 | 
			
		||||
          local size=`stty size`
 | 
			
		||||
          integer height=${size% *}
 | 
			
		||||
          integer width=${size#* }
 | 
			
		||||
 | 
			
		||||
        # Create the window and hide the cursor
 | 
			
		||||
        zcurses init
 | 
			
		||||
        zcurses addwin build-dir $height $width 0 0
 | 
			
		||||
          # Create the window and hide the cursor
 | 
			
		||||
          zcurses init
 | 
			
		||||
          zcurses addwin build-dir $height $width 0 0
 | 
			
		||||
 | 
			
		||||
        # Hide the cursor for zcurses, trap SIGINT to ensure cleanup in
 | 
			
		||||
        # always-list occurs below
 | 
			
		||||
        tput civis; trap 'return 130' INT
 | 
			
		||||
          # Hide the cursor for zcurses, trap SIGINT to ensure cleanup in
 | 
			
		||||
          # always-list occurs below
 | 
			
		||||
          tput civis; trap 'return 130' INT
 | 
			
		||||
 | 
			
		||||
        # Enter display loop
 | 
			
		||||
        local key keypad
 | 
			
		||||
        while (( 1 )); do
 | 
			
		||||
          zcurses clear build-dir
 | 
			
		||||
          # Enter display loop
 | 
			
		||||
          local key keypad
 | 
			
		||||
          while (( 1 )); do
 | 
			
		||||
            zcurses clear build-dir
 | 
			
		||||
 | 
			
		||||
          # Add the prompt text
 | 
			
		||||
          zcurses move build-dir 1 1
 | 
			
		||||
          zcurses string build-dir 'Select a build directory:'
 | 
			
		||||
            # Add the prompt text
 | 
			
		||||
            zcurses move build-dir 1 1
 | 
			
		||||
            zcurses string build-dir 'Select a build directory:'
 | 
			
		||||
 | 
			
		||||
          # Add the selections text
 | 
			
		||||
          for (( i = 0; i < ${#local_build_dirs}; i++ )); do
 | 
			
		||||
            integer line=$i+3
 | 
			
		||||
            zcurses move build-dir $line 1
 | 
			
		||||
            [[ $index -eq $i ]] &&
 | 
			
		||||
              zcurses string build-dir "* " ||
 | 
			
		||||
              zcurses string build-dir "  "
 | 
			
		||||
            zcurses string build-dir ${local_build_dirs[$i+1]}
 | 
			
		||||
            # Add the selections text
 | 
			
		||||
            for (( i = 0; i < ${#local_build_dirs}; i++ )); do
 | 
			
		||||
              integer line=$i+3
 | 
			
		||||
              zcurses move build-dir $line 1
 | 
			
		||||
              [[ $index -eq $i ]] &&
 | 
			
		||||
                zcurses string build-dir "* " ||
 | 
			
		||||
                zcurses string build-dir "  "
 | 
			
		||||
              zcurses string build-dir ${local_build_dirs[$i+1]}
 | 
			
		||||
            done
 | 
			
		||||
 | 
			
		||||
            # Display the text the and wait for input
 | 
			
		||||
            zcurses refresh build-dir
 | 
			
		||||
            zcurses input build-dir key keypad
 | 
			
		||||
 | 
			
		||||
            # Handle user input
 | 
			
		||||
            case $key in
 | 
			
		||||
              (UP|k|$'\C-P')
 | 
			
		||||
                [[ $index -gt 0 ]] && index=$index-1 ;;
 | 
			
		||||
              (DOWN|j|$'\C-N')
 | 
			
		||||
                [[ $index -lt ${#local_build_dirs}-1 ]] && index=$index+1 ;;
 | 
			
		||||
              (ENTER|$'\n')
 | 
			
		||||
                break ;;
 | 
			
		||||
            esac
 | 
			
		||||
          done
 | 
			
		||||
        } always {
 | 
			
		||||
          # Restore the cursor and cleanup zcurses
 | 
			
		||||
          tput cvvis; tput cnorm
 | 
			
		||||
          zcurses delwin build-dir
 | 
			
		||||
          zcurses end
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
          # Display the text the and wait for input
 | 
			
		||||
          zcurses refresh build-dir
 | 
			
		||||
          zcurses input build-dir key keypad
 | 
			
		||||
 | 
			
		||||
          # Handle user input
 | 
			
		||||
          case $key in
 | 
			
		||||
            (UP|k|$'\C-P')
 | 
			
		||||
              [[ $index -gt 0 ]] && index=$index-1 ;;
 | 
			
		||||
            (DOWN|j|$'\C-N')
 | 
			
		||||
              [[ $index -lt ${#local_build_dirs}-1 ]] && index=$index+1 ;;
 | 
			
		||||
            (ENTER|$'\n')
 | 
			
		||||
              break ;;
 | 
			
		||||
          esac
 | 
			
		||||
        done
 | 
			
		||||
      } always {
 | 
			
		||||
        # Restore the cursor and cleanup zcurses
 | 
			
		||||
        tput cvvis; tput cnorm
 | 
			
		||||
        zcurses delwin build-dir
 | 
			
		||||
        zcurses end
 | 
			
		||||
      }
 | 
			
		||||
        # On success setup the build directory for use
 | 
			
		||||
        if [[ $? -eq 0 ]]; then
 | 
			
		||||
          # Set the build directory from selection if empty
 | 
			
		||||
          [[ -z $local_build_dir ]] && \
 | 
			
		||||
            local_build_dir=${local_build_dirs[$index+1]}
 | 
			
		||||
        fi
 | 
			
		||||
      fi
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # On success setup the build directory for use
 | 
			
		||||
  if [[ $? -eq 0 ]]; then
 | 
			
		||||
    # Set the build directory from selection if empty
 | 
			
		||||
    [[ -z $local_build_dir ]] && \
 | 
			
		||||
      local_build_dir=${local_build_dirs[$index+1]}
 | 
			
		||||
  # If `build.ninja` exists in alias `ninja`, return.
 | 
			
		||||
  local build
 | 
			
		||||
  [ -f $local_build_dir/build.ninja ] && \
 | 
			
		||||
    build="ninja -C $local_build_dir"
 | 
			
		||||
 | 
			
		||||
    # If `build.ninja` exists in alias `ninja`, return.
 | 
			
		||||
    local build
 | 
			
		||||
    [ -f $local_build_dir/build.ninja ] && \
 | 
			
		||||
      build="ninja -C $local_build_dir"
 | 
			
		||||
  # If `Makefile` exists in alias `make`, return.
 | 
			
		||||
  if [ -f $local_build_dir/Makefile ]; then
 | 
			
		||||
    [ `uname` = Darwin ] && \
 | 
			
		||||
      local cpu_count=`sysctl -n hw.ncpu` ||
 | 
			
		||||
      local cpu_count=`grep -c '^processor' /proc/cpuinfo`
 | 
			
		||||
    build="make -j $cpu_count -C $local_build_dir"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
    # If `Makefile` exists in alias `make`, return.
 | 
			
		||||
    if [ -f $local_build_dir/Makefile ]; then
 | 
			
		||||
      [ `uname` = Darwin ] && \
 | 
			
		||||
        local cpu_count=`sysctl -n hw.ncpu` ||
 | 
			
		||||
        local cpu_count=`grep -c '^processor' /proc/cpuinfo`
 | 
			
		||||
      build="make -j $cpu_count -C $local_build_dir"
 | 
			
		||||
    fi
 | 
			
		||||
  # If the build variable is not defined the command could not be determined
 | 
			
		||||
  if [ -z $build ]; then
 | 
			
		||||
    warning "build command detection failed: $local_build_dir"
 | 
			
		||||
    # Prompt user to enter a build command
 | 
			
		||||
    vared -p 'enter comand: ' build
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
    # If the build variable is not defined the command could not be determined
 | 
			
		||||
    if [ -z $build ]; then
 | 
			
		||||
      warning "build command detection failed: $local_build_dir"
 | 
			
		||||
      # Prompt user to enter a build command
 | 
			
		||||
      vared -p 'enter comand: ' build
 | 
			
		||||
    fi
 | 
			
		||||
  # Redefine the `build` alias and update the `~build` hash directory
 | 
			
		||||
  alias build="$build"
 | 
			
		||||
  hash -d build=$local_build_dir
 | 
			
		||||
  export build_dir=$local_build_dir
 | 
			
		||||
 | 
			
		||||
    # Redefine the `build` alias and update the `~build` hash directory
 | 
			
		||||
    alias build="$build"
 | 
			
		||||
    hash -d build=$local_build_dir
 | 
			
		||||
    export build_dir=$local_build_dir
 | 
			
		||||
 | 
			
		||||
    # If `--build` is specified then evaluate the command.
 | 
			
		||||
    if [[ -n $do_build ]]; then
 | 
			
		||||
      eval build
 | 
			
		||||
    fi
 | 
			
		||||
  # If `--build` is specified then evaluate the command.
 | 
			
		||||
  if [[ -n $do_build ]]; then
 | 
			
		||||
    eval build
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user