#!/bin/bash # Robustere Ermittlung des Skript-Verzeichnisses SCRIPT_PATH=$(readlink -f "$0") BASE_DIR=$(dirname "$SCRIPT_PATH") while true; do # 1. Tags sammeln und zählen # Wir extrahieren die Tags, sortieren sie und lassen 'uniq -c' die Vorkommen zählen tag_counts=$(grep -rhioE "(#\w+|Tags:.*)" "$BASE_DIR" --include="README.md" 2>/dev/null | \ sed 's/Tags://g' | tr ',' '\n' | tr -d ' ' | sort | uniq -c | sort -rn) if [ -z "$tag_counts" ]; then zenity --error --title="Fehler" --text="Keine Tags gefunden.\nSuche in: $BASE_DIR" break fi # 2. Formatierung für Zenity (Anzahl und Tag trennen) # Wir wandeln die Ausgabe "5 #Weihnachten" in eine Liste um, die Zenity versteht zenity_list=$(echo "$tag_counts" | awk '{print $2 " (" $1 ")"}') # 3. Grafische Auswahl des Tags 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-Namen (alles vor dem Leerzeichen/Klammer) selected_tag=$(echo "$selected_item" | awk '{print $1}') # 4. Projektauswahl-Schleife für den gewählten Tag while true; do results=$(grep -rl "$selected_tag" "$BASE_DIR" --include="README.md" 2>/dev/null | while read -r file; do dirname "$(realpath "$file")" done)[cite: 3] if [ -z "$results" ]; then zenity --info --text="Keine Projekte für '$selected_tag' gefunden." break fi selected_project=$(echo "$results" | zenity --list \ --title="Ergebnisse für: $selected_tag" \ --column="Projekt-Pfad" \ --text="Gefundene Projekte:" \ --width=800 --height=400 \ --ok-label="README öffnen" \ --cancel-label="Zurück zur Tag-Suche") if [ -z "$selected_project" ]; then break fi # 5. README öffnen[cite: 3] if [ -f "$selected_project/README.md" ]; then xdg-open "$selected_project/README.md" &>/dev/null & zenity --info --text="Öffne README von:\n$selected_project" --timeout=2 fi done if ! zenity --question --text="Möchtest du nach einem anderen Tag suchen?"; then break fi done