- 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)
92 lines
2.8 KiB
Bash
Executable File
92 lines
2.8 KiB
Bash
Executable File
#!/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"
|