mirror of
https://github.com/tw93/Mole.git
synced 2026-02-16 05:26:11 +00:00
fix(ui): restore real-time search filtering in paginated menu
- Previous perf optimization (318c67f) broke real-time search by removing rebuild_view call
- Now calls rebuild_view and triggers full redraw when typing/deleting
- Uses 'continue' to skip drain_pending_input, preserving fast typed characters
- Fixes issue where only first character was effective in search
This commit is contained in:
@@ -764,7 +764,9 @@ paginated_multi_select() {
|
|||||||
if [[ "$filter_mode" == "true" ]]; then
|
if [[ "$filter_mode" == "true" ]]; then
|
||||||
local ch="${key#CHAR:}"
|
local ch="${key#CHAR:}"
|
||||||
filter_query+="$ch"
|
filter_query+="$ch"
|
||||||
|
rebuild_view
|
||||||
need_full_redraw=true
|
need_full_redraw=true
|
||||||
|
continue
|
||||||
elif [[ "$has_metadata" == "true" ]]; then
|
elif [[ "$has_metadata" == "true" ]]; then
|
||||||
# Cycle sort mode (only if metadata available)
|
# Cycle sort mode (only if metadata available)
|
||||||
case "$sort_mode" in
|
case "$sort_mode" in
|
||||||
@@ -815,6 +817,9 @@ paginated_multi_select() {
|
|||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
filter_query+="j"
|
filter_query+="j"
|
||||||
|
rebuild_view
|
||||||
|
need_full_redraw=true
|
||||||
|
continue
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
"CHAR:k")
|
"CHAR:k")
|
||||||
@@ -829,17 +834,26 @@ paginated_multi_select() {
|
|||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
filter_query+="k"
|
filter_query+="k"
|
||||||
|
rebuild_view
|
||||||
|
need_full_redraw=true
|
||||||
|
continue
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
"CHAR:f" | "CHAR:F")
|
"CHAR:f" | "CHAR:F")
|
||||||
if [[ "$filter_mode" == "true" ]]; then
|
if [[ "$filter_mode" == "true" ]]; then
|
||||||
filter_query+="${key#CHAR:}"
|
filter_query+="${key#CHAR:}"
|
||||||
|
rebuild_view
|
||||||
|
need_full_redraw=true
|
||||||
|
continue
|
||||||
fi
|
fi
|
||||||
# F is currently unbound in normal mode to avoid conflict with Refresh (R)
|
# F is currently unbound in normal mode to avoid conflict with Refresh (R)
|
||||||
;;
|
;;
|
||||||
"CHAR:r" | "CHAR:R")
|
"CHAR:r" | "CHAR:R")
|
||||||
if [[ "$filter_mode" == "true" ]]; then
|
if [[ "$filter_mode" == "true" ]]; then
|
||||||
filter_query+="${key#CHAR:}"
|
filter_query+="${key#CHAR:}"
|
||||||
|
rebuild_view
|
||||||
|
need_full_redraw=true
|
||||||
|
continue
|
||||||
else
|
else
|
||||||
# Trigger Refresh signal (Unified with Analyze)
|
# Trigger Refresh signal (Unified with Analyze)
|
||||||
cleanup
|
cleanup
|
||||||
@@ -849,6 +863,9 @@ paginated_multi_select() {
|
|||||||
"CHAR:o" | "CHAR:O")
|
"CHAR:o" | "CHAR:O")
|
||||||
if [[ "$filter_mode" == "true" ]]; then
|
if [[ "$filter_mode" == "true" ]]; then
|
||||||
filter_query+="${key#CHAR:}"
|
filter_query+="${key#CHAR:}"
|
||||||
|
rebuild_view
|
||||||
|
need_full_redraw=true
|
||||||
|
continue
|
||||||
elif [[ "$has_metadata" == "true" ]]; then
|
elif [[ "$has_metadata" == "true" ]]; then
|
||||||
# O toggles reverse order (Unified Sort Order)
|
# O toggles reverse order (Unified Sort Order)
|
||||||
if [[ "$sort_reverse" == "true" ]]; then
|
if [[ "$sort_reverse" == "true" ]]; then
|
||||||
@@ -864,13 +881,10 @@ paginated_multi_select() {
|
|||||||
# Backspace filter
|
# Backspace filter
|
||||||
if [[ "$filter_mode" == "true" && -n "$filter_query" ]]; then
|
if [[ "$filter_mode" == "true" && -n "$filter_query" ]]; then
|
||||||
filter_query="${filter_query%?}"
|
filter_query="${filter_query%?}"
|
||||||
# Fast footer-only update in filter mode (avoid full redraw)
|
# Rebuild view to apply filter in real-time
|
||||||
local filter_status="${filter_query:-_}"
|
rebuild_view
|
||||||
local footer_row=$((items_per_page + 4))
|
# Trigger redraw and continue to avoid drain_pending_input
|
||||||
printf "\033[%d;1H\033[2K" "$footer_row" >&2
|
need_full_redraw=true
|
||||||
local sep=" ${GRAY}|${NC} "
|
|
||||||
printf "%s" "${GRAY}Search: ${filter_status}${NC}${sep}${GRAY}Delete${NC}${sep}${GRAY}Enter Confirm${NC}${sep}${GRAY}ESC Cancel${NC}" >&2
|
|
||||||
printf "\033[%d;1H\033[2K" "$((footer_row + 1))" >&2
|
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
@@ -880,13 +894,10 @@ paginated_multi_select() {
|
|||||||
# avoid accidental leading spaces
|
# avoid accidental leading spaces
|
||||||
if [[ -n "$filter_query" || "$ch" != " " ]]; then
|
if [[ -n "$filter_query" || "$ch" != " " ]]; then
|
||||||
filter_query+="$ch"
|
filter_query+="$ch"
|
||||||
# Fast footer-only update in filter mode (avoid full redraw)
|
# Rebuild view to apply filter in real-time
|
||||||
local filter_status="${filter_query:-_}"
|
rebuild_view
|
||||||
local footer_row=$((items_per_page + 4))
|
# Trigger redraw and continue to avoid drain_pending_input
|
||||||
printf "\033[%d;1H\033[2K" "$footer_row" >&2
|
need_full_redraw=true
|
||||||
local sep=" ${GRAY}|${NC} "
|
|
||||||
printf "%s" "${GRAY}Search: ${filter_status}${NC}${sep}${GRAY}Delete${NC}${sep}${GRAY}Enter Confirm${NC}${sep}${GRAY}ESC Cancel${NC}" >&2
|
|
||||||
printf "\033[%d;1H\033[2K" "$((footer_row + 1))" >&2
|
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|||||||
Reference in New Issue
Block a user