mirror of
https://github.com/tw93/Mole.git
synced 2026-02-17 14:23:54 +00:00
fix(purge): support vim j/k navigation in selector
This commit is contained in:
@@ -648,7 +648,27 @@ select_purge_categories() {
|
|||||||
|
|
||||||
printf "%s\n" "$clear_line"
|
printf "%s\n" "$clear_line"
|
||||||
|
|
||||||
printf "%s${GRAY}${ICON_NAV_UP}${ICON_NAV_DOWN} | Space Select | Enter Confirm | A All | I Invert | Q Quit${NC}\n" "$clear_line"
|
printf "%s${GRAY}${ICON_NAV_UP}${ICON_NAV_DOWN}/J/K | Space Select | Enter Confirm | A All | I Invert | Q Quit${NC}\n" "$clear_line"
|
||||||
|
}
|
||||||
|
move_cursor_up() {
|
||||||
|
if [[ $cursor_pos -gt 0 ]]; then
|
||||||
|
((cursor_pos--))
|
||||||
|
elif [[ $top_index -gt 0 ]]; then
|
||||||
|
((top_index--))
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
move_cursor_down() {
|
||||||
|
local absolute_index=$((top_index + cursor_pos))
|
||||||
|
local last_index=$((total_items - 1))
|
||||||
|
if [[ $absolute_index -lt $last_index ]]; then
|
||||||
|
local visible_count=$((total_items - top_index))
|
||||||
|
[[ $visible_count -gt $items_per_page ]] && visible_count=$items_per_page
|
||||||
|
if [[ $cursor_pos -lt $((visible_count - 1)) ]]; then
|
||||||
|
((cursor_pos++))
|
||||||
|
elif [[ $((top_index + visible_count)) -lt $total_items ]]; then
|
||||||
|
((top_index++))
|
||||||
|
fi
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
trap restore_terminal EXIT
|
trap restore_terminal EXIT
|
||||||
trap handle_interrupt INT TERM
|
trap handle_interrupt INT TERM
|
||||||
@@ -672,24 +692,10 @@ select_purge_categories() {
|
|||||||
IFS= read -r -s -n1 -t 1 key3 || key3=""
|
IFS= read -r -s -n1 -t 1 key3 || key3=""
|
||||||
case "$key3" in
|
case "$key3" in
|
||||||
A) # Up arrow
|
A) # Up arrow
|
||||||
if [[ $cursor_pos -gt 0 ]]; then
|
move_cursor_up
|
||||||
((cursor_pos--))
|
|
||||||
elif [[ $top_index -gt 0 ]]; then
|
|
||||||
((top_index--))
|
|
||||||
fi
|
|
||||||
;;
|
;;
|
||||||
B) # Down arrow
|
B) # Down arrow
|
||||||
local absolute_index=$((top_index + cursor_pos))
|
move_cursor_down
|
||||||
local last_index=$((total_items - 1))
|
|
||||||
if [[ $absolute_index -lt $last_index ]]; then
|
|
||||||
local visible_count=$((total_items - top_index))
|
|
||||||
[[ $visible_count -gt $items_per_page ]] && visible_count=$items_per_page
|
|
||||||
if [[ $cursor_pos -lt $((visible_count - 1)) ]]; then
|
|
||||||
((cursor_pos++))
|
|
||||||
elif [[ $((top_index + visible_count)) -lt $total_items ]]; then
|
|
||||||
((top_index++))
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
else
|
else
|
||||||
@@ -698,6 +704,12 @@ select_purge_categories() {
|
|||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
|
"j" | "J") # Vim down
|
||||||
|
move_cursor_down
|
||||||
|
;;
|
||||||
|
"k" | "K") # Vim up
|
||||||
|
move_cursor_up
|
||||||
|
;;
|
||||||
" ") # Space - toggle current item
|
" ") # Space - toggle current item
|
||||||
local idx=$((top_index + cursor_pos))
|
local idx=$((top_index + cursor_pos))
|
||||||
if [[ ${selected[idx]} == true ]]; then
|
if [[ ${selected[idx]} == true ]]; then
|
||||||
|
|||||||
Reference in New Issue
Block a user