#!/bin/bash # Pfad ermitteln SCRIPT_PATH=$(readlink -f "$0") BASE_DIR=$(dirname "$SCRIPT_PATH") while true; do # 1. Tags sammeln (optimiert) # Wir filtern hier noch aggressiver nach sauberen Text-Tags tag_counts=$(grep -rhioE "(#\w+|Tags:.*)" "$BASE_DIR" --include="README.md" 2>/dev/null | \ sed 's/Tags://g' | tr ',' '\n' | tr -d '\r' | sed 's/^[[:space:]]*//;s/[[:space:]]*$//' | \ grep -v '^$' | sort | uniq -c | sort -rn) if [ -z "$tag_counts" ]; then zenity --error --title="Fehler" --text="Keine Tags gefunden in:\n$BASE_DIR" break fi # 2. Anzeige-Liste erstellen zenity_list=$(echo "$tag_counts" | awk '{count=$1; $1=""; print $0 " (" count ")"}' | sed 's/^[[:space:]]*//') # 3. Auswahl selected_item=$(echo "$zenity_list" | zenity --list \ --title="Projekt-Tag-Suche" \ --column="Tag (Anzahl)" \ --width=400 --height=500 \ --text="Wähle einen Tag aus:") if [ -z "$selected_item" ]; then break; fi # Extrahiere den reinen Tag (nimmt alles vor der ersten Klammer) selected_tag=$(echo "$selected_item" | sed 's/ (.*)//') # 4. Suche nach den Projekten # Wir suchen jetzt nach dem exakten String im gesamten Verzeichnisbaum results=$(grep -rlF "$selected_tag" "$BASE_DIR" --include="README.md" 2>/dev/null | while read -r file; do dirname "$file" done | sort -u) if [ -z "$results" ]; then zenity --info --text="Keine Projekte für den Tag '$selected_tag' gefunden.\n\nSuchpfad: $BASE_DIR" continue fi # 5. Projektauswahl selected_project=$(echo "$results" | zenity --list \ --title="Ergebnisse für: $selected_tag" \ --column="Projekt-Pfad" \ --width=800 --height=400 \ --ok-label="README öffnen" \ --cancel-label="Zurück") if [ -n "$selected_project" ] && [ -f "$selected_project/README.md" ]; then xdg-open "$selected_project/README.md" &>/dev/null & fi done