v0.3.0: Pfeil-/Tab-Navigation gefixt, install/uninstall-Skripte

- FileTable(DataTable): links/rechts fuer Datei-Manager-Navigation umgebunden
  (links = eine Ebene hoch, rechts = Ordner oeffnen); zuvor verschluckte das
  DataTable-Widget die Tasten
- _selected(): liefert jetzt die Klartext-Zeichenkette statt rich.Text-Objekt
  (behob AttributeError beim Oeffnen/Enter)
- action_focus_next(): Tab wechselt zuverlaessig zwischen lokalem und
  entferntem Paneel (statt unzuverlaessigem focus_next)
- install.sh / uninstall.sh: systemweite Installation (PEP-668-konform via
  /opt/ftptui/venv + /usr/local/bin/ftptui)
This commit is contained in:
x3
2026-08-31 15:46:30 +00:00
parent ed0a943d21
commit 7a1bf948f1
6 changed files with 237 additions and 13 deletions
Executable
+91
View File
@@ -0,0 +1,91 @@
#!/usr/bin/env bash
#
# ftptui Installations-Skript (systemweit)
#
# Das System nutzt ein "externally managed" Python (PEP 668, Debian/Ubuntu),
# daher wird NIE direkt in System-Site-Packages installiert. Stattdessen wird
# eine eigene systemweite virtuelle Umgebung unter /opt/ftptui/venv angelegt
# und der Einstiegspunkt nach /usr/local/bin/ftptui verlinkt. Damit steht das
# Kommando global im PATH, ohne das System-Python zu gefährden.
#
# Verwendung:
# ./install.sh # installiert systemweit (fragt ggf. nach sudo)
# ./install.sh --force # überschreibt eine bereits installierte Version
# ./install.sh --uninstall
#
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PACKAGE_DIR="$SCRIPT_DIR"
APP_NAME="ftptui"
VENV_DIR="/opt/ftptui/venv"
BIN_LINK="/usr/local/bin/$APP_NAME"
FORCE=0
MODE="install"
for arg in "$@"; do
case "$arg" in
--force|-f) FORCE=1 ;;
--uninstall|-u) MODE="uninstall" ;;
-h|--help) echo "Verwendung: $0 [--force|--uninstall]"; exit 0 ;;
*) echo "Unbekanntes Argument: $arg"; exit 1 ;;
esac
done
run_sudo() {
if [ "$(id -u)" -eq 0 ]; then
"$@"
else
sudo "$@"
fi
}
if [ "$MODE" = "uninstall" ]; then
echo "==> Entferne systemweite Installation von '$APP_NAME' ..."
run_sudo rm -f "$BIN_LINK"
run_sudo rm -rf /opt/ftptui
echo "==> Entfernt: $BIN_LINK und $VENV_DIR"
echo "=> Fertig. (Konfigurationsdateien unter ~/.config/ftptui bleiben erhalten.)"
exit 0
fi
echo "==> ftptui Installations-Skript (systemweit, via /opt/ftptui/venv)"
# Abhängigkeiten prüfen
command -v python3 >/dev/null 2>&1 || { echo "FEHLER: python3 nicht gefunden."; exit 1; }
if ! python3 -m venv --help >/dev/null 2>&1; then
echo "FEHLER: python3-venv fehlt. Bitte installieren: sudo apt install python3-venv"
exit 1
fi
# Bereits installiert?
if [ -x "$BIN_LINK" ] && [ "$FORCE" -ne 1 ]; then
echo "WARNUNG: '$APP_NAME' ist bereits installiert: $BIN_LINK"
echo " Mit --force wird neu installiert."
echo " Zum Entfernen: $0 --uninstall (bzw. ./uninstall.sh)"
exit 0
fi
echo "==> Lege systemweite virtuelle Umgebung an: $VENV_DIR"
run_sudo python3 -m venv "$VENV_DIR"
run_sudo "$VENV_DIR/bin/pip" install --upgrade pip
echo "==> Installiere '$APP_NAME' + Abhängigkeiten ..."
run_sudo "$VENV_DIR/bin/pip" install --upgrade "$PACKAGE_DIR"
echo "==> Verlinke Einstiegspunkt nach $BIN_LINK"
run_sudo ln -sf "$VENV_DIR/bin/$APP_NAME" "$BIN_LINK"
# Konfigurationsverzeichnis anlegen
CONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/ftptui"
mkdir -p "$CONFIG_DIR"
echo "==> Konfigurationsverzeichnis bereit: $CONFIG_DIR"
# Fertig
echo
echo "Installation abgeschlossen."
echo " Befehl: $(command -v "$APP_NAME" 2>/dev/null || echo "$BIN_LINK")"
echo " Start: $APP_NAME"
echo " Venv: $VENV_DIR"
echo
echo "Tipp: 'ftptui' startet die TUI. Entfernen mit: ./uninstall.sh"