56 lines
No EOL
2 KiB
Bash
Executable file
56 lines
No EOL
2 KiB
Bash
Executable file
#!/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 |