#!/usr/bin/env bash # Backend de ventanas para Wayland (Sway e Hyprland). ventanas.sh delega aqui # cuando detecta uno de esos compositores. # # Por que un fichero aparte y no dentro de ventanas.sh: aquel es X11 puro # (xdotool, xrandr) y esta probado; mezclar aqui lo romperia. Cada backend en su # sitio, y este se puede iterar sin tocar el que ya funciona. # # En Wayland NO se pueden mover ventanas AJENAS sin permisos del compositor, asi # que esto actua sobre la ventana ACTIVA (la que tiene el foco), que es lo que # el compositor si deja hacer. Por eso ignora el que si usa el X11. # # ── ESTADO ────────────────────────────────────────────────────────────────── # # maximiza / restaura / minimiza: confiables (pantalla completa y scratchpad son # ordenes de una linea, bien documentadas en los dos compositores). # izquierda / derecha / centro: escritas de la documentacion, A PROBAR en un # equipo real —el flotante y las unidades (ppt, %) varian por version—. Es un # primer commit ideal para quien use Sway o Hyprland. Ver ROADMAP.md. set -uo pipefail verbo=${1:-} if command -v swaymsg >/dev/null 2>&1 && swaymsg -t get_version >/dev/null 2>&1; then COMP=sway elif command -v hyprctl >/dev/null 2>&1 && hyprctl version >/dev/null 2>&1; then COMP=hypr else echo "no encuentro Sway ni Hyprland en marcha"; exit 1 fi sway() { swaymsg "$@" >/dev/null 2>&1; } hypr() { hyprctl dispatch "$@" >/dev/null 2>&1; } case "$verbo:$COMP" in # --- pantalla completa: confiable --- maximiza:sway) sway fullscreen enable; echo "Maximizada, señor" ;; maximiza:hypr) hypr fullscreen 1; echo "Maximizada, señor" ;; restaura:sway) sway fullscreen disable; echo "Restaurada, señor" ;; restaura:hypr) hypr fullscreen 0; echo "Restaurada, señor" ;; minimiza:sway) sway move scratchpad; echo "Minimizada, señor" ;; minimiza:hypr) hypr movetoworkspacesilent special; echo "Minimizada, señor" ;; # --- mitades y centro: A PROBAR (unidades/flotante dependen de la version) --- izquierda:sway) sway floating enable; sway resize set width 50 ppt height 100 ppt; sway move absolute position 0 0; echo "A la izquierda, señor" ;; derecha:sway) sway floating enable; sway resize set width 50 ppt height 100 ppt; sway move absolute position 50 ppt 0; echo "A la derecha, señor" ;; centro:sway) sway floating enable; sway resize set width 70 ppt height 80 ppt; sway move absolute position center; echo "Al centro, señor" ;; izquierda:hypr) hypr setfloating; hypr resizeactive exact 50% 100%; hypr moveactive exact 0 0; echo "A la izquierda, señor" ;; derecha:hypr) hypr setfloating; hypr resizeactive exact 50% 100%; hypr moveactive exact 50% 0; echo "A la derecha, señor" ;; centro:hypr) hypr setfloating; hypr resizeactive exact 70% 80%; hypr centerwindow; echo "Al centro, señor" ;; *) echo "en $COMP todavia no esta esa orden de ventanas. Implementadas:" \ "maximiza, restaura, minimiza, izquierda, derecha, centro." \ "Las demas (mover entre pantallas, escritorios) estan en el roadmap." exit 1 ;; esac