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