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:
Executable
+91
@@ -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"
|
||||
Reference in New Issue
Block a user