1
0
mirror of https://github.com/tw93/Mole.git synced 2026-02-12 00:39:02 +00:00

Add 'F' key to refresh paginated menus, clarify UI text for search and selection, and improve robustness of BOM file processing

This commit is contained in:
Tw93
2025-12-12 14:33:07 +08:00
parent 42634fbf3d
commit fa75da07ca
5 changed files with 53 additions and 29 deletions

View File

@@ -498,7 +498,12 @@ main() {
fi fi
# Interactive selection using paginated menu # Interactive selection using paginated menu
if ! select_apps_for_uninstall; then set +e
select_apps_for_uninstall
local exit_code=$?
set -e
if [[ $exit_code -ne 0 ]]; then
if [[ "${MOLE_ALT_SCREEN_ACTIVE:-}" == "1" ]]; then if [[ "${MOLE_ALT_SCREEN_ACTIVE:-}" == "1" ]]; then
leave_alt_screen leave_alt_screen
unset MOLE_ALT_SCREEN_ACTIVE unset MOLE_ALT_SCREEN_ACTIVE
@@ -508,6 +513,13 @@ main() {
clear_screen clear_screen
printf '\033[2J\033[H' >&2 # Also clear stderr printf '\033[2J\033[H' >&2 # Also clear stderr
rm -f "$apps_file" rm -f "$apps_file"
# Handle Refresh (code 10)
if [[ $exit_code -eq 10 ]]; then
force_rescan=true
continue
fi
# User cancelled selection, exit the loop # User cancelled selection, exit the loop
return 0 return 0
fi fi

View File

@@ -708,6 +708,8 @@ find_app_receipt_files() {
done < <(find /private/var/db/receipts -name "${bundle_id}*.bom" -print0 2> /dev/null) done < <(find /private/var/db/receipts -name "${bundle_id}*.bom" -print0 2> /dev/null)
fi fi
# Process bom files if any found
if [[ ${#bom_files[@]} -gt 0 ]]; then
for bom_file in "${bom_files[@]}"; do for bom_file in "${bom_files[@]}"; do
[[ ! -f "$bom_file" ]] && continue [[ ! -f "$bom_file" ]] && continue
@@ -782,7 +784,7 @@ find_app_receipt_files() {
done <<< "$bom_content" done <<< "$bom_content"
done done
fi
if [[ ${#receipt_files[@]} -gt 0 ]]; then if [[ ${#receipt_files[@]} -gt 0 ]]; then
printf '%s\n' "${receipt_files[@]}" printf '%s\n' "${receipt_files[@]}"
fi fi

View File

@@ -85,6 +85,11 @@ select_apps_for_uninstall() {
unset MOLE_MENU_META_EPOCHS MOLE_MENU_META_SIZEKB unset MOLE_MENU_META_EPOCHS MOLE_MENU_META_SIZEKB
# leave MOLE_MENU_SORT_DEFAULT untouched if user set it globally # leave MOLE_MENU_SORT_DEFAULT untouched if user set it globally
# Refresh signal handling
if [[ $exit_code -eq 10 ]]; then
return 10
fi
if [[ $exit_code -ne 0 ]]; then if [[ $exit_code -ne 0 ]]; then
echo "Cancelled" echo "Cancelled"
return 1 return 1

View File

@@ -478,7 +478,7 @@ paginated_multi_select() {
if [[ "$filter_mode" == "true" ]]; then if [[ "$filter_mode" == "true" ]]; then
# Filter mode: simple controls without sort # Filter mode: simple controls without sort
local -a _segs_filter=( local -a _segs_filter=(
"${GRAY}Filter: ${filter_status}${NC}" "${GRAY}Search: ${filter_status}${NC}"
"${GRAY}Delete${NC}" "${GRAY}Delete${NC}"
"${GRAY}Enter Confirm${NC}" "${GRAY}Enter Confirm${NC}"
"${GRAY}ESC Cancel${NC}" "${GRAY}ESC Cancel${NC}"
@@ -490,7 +490,7 @@ paginated_multi_select() {
[[ "$sort_reverse" == "true" ]] && reverse_arrow="↓" [[ "$sort_reverse" == "true" ]] && reverse_arrow="↓"
# Determine filter text based on whether filter is active # Determine filter text based on whether filter is active
local filter_text="/ Filter" local filter_text="/ Search"
[[ -n "$applied_query" ]] && filter_text="/ Clear" [[ -n "$applied_query" ]] && filter_text="/ Clear"
if [[ "$has_metadata" == "true" ]]; then if [[ "$has_metadata" == "true" ]]; then
@@ -508,8 +508,9 @@ paginated_multi_select() {
# Normal: show full controls # Normal: show full controls
local -a _segs_all=( local -a _segs_all=(
"${GRAY}${ICON_NAV_UP}${ICON_NAV_DOWN}${NC}" "${GRAY}${ICON_NAV_UP}${ICON_NAV_DOWN}${NC}"
"${GRAY}Space${NC}" "${GRAY}Space Select${NC}"
"${GRAY}Enter${NC}" "${GRAY}Enter${NC}"
"${GRAY}F Refresh${NC}"
"${GRAY}${filter_text}${NC}" "${GRAY}${filter_text}${NC}"
"${GRAY}S ${sort_status}${NC}" "${GRAY}S ${sort_status}${NC}"
"${GRAY}R ${reverse_arrow}${NC}" "${GRAY}R ${reverse_arrow}${NC}"
@@ -521,7 +522,7 @@ paginated_multi_select() {
# Without metadata: basic controls # Without metadata: basic controls
local -a _segs_simple=( local -a _segs_simple=(
"${GRAY}${ICON_NAV_UP}${ICON_NAV_DOWN}${NC}" "${GRAY}${ICON_NAV_UP}${ICON_NAV_DOWN}${NC}"
"${GRAY}Space${NC}" "${GRAY}Space Select${NC}"
"${GRAY}Enter${NC}" "${GRAY}Enter${NC}"
"${GRAY}${filter_text}${NC}" "${GRAY}${filter_text}${NC}"
"${GRAY}Q Exit${NC}" "${GRAY}Q Exit${NC}"
@@ -643,6 +644,10 @@ paginated_multi_select() {
"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:}"
else
# Trigger Refresh signal
cleanup
return 10
fi fi
;; ;;
"CHAR:r") "CHAR:r")

2
mole
View File

@@ -22,7 +22,7 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/lib/core/common.sh" source "$SCRIPT_DIR/lib/core/common.sh"
# Version info # Version info
VERSION="1.12.13" VERSION="1.12.14"
MOLE_TAGLINE="can dig deep to clean your Mac." MOLE_TAGLINE="can dig deep to clean your Mac."
# Check if Touch ID is already configured # Check if Touch ID is already configured