1
0
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:
tw93
2026-02-15 07:48:35 +08:00
parent 4a63ce330f
commit 7d193526c3

View File

@@ -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