Pop Shell es una capa controlada por teclado para GNOME Shell que permite una navegación y administración de ventanas rápidas y sensatas. La característica principal de Pop Shell es la adición de administración avanzada de ventanas en mosaico, una característica que ha sido muy buscada dentro de nuestra comunidad. Para muchos, incluidos nosotros mismos, i3wm se ha convertido en el principal competidor del escritorio GNOME.
La administración de ventanas en mosaico en GNOME es prácticamente inexistente, lo que hace que sea difícil interactuar con el escritorio cuando sus necesidades exceden las de dos ventanas en un momento dado. Afortunadamente, GNOME Shell es un escritorio extensible con las bases que permiten implementar un administrador de ventanas en mosaico en la parte superior del escritorio.
Por lo tanto, vemos aquí una oportunidad de mejorar la usabilidad del escritorio GNOME para satisfacer mejor las necesidades de nuestra comunidad con Pop Shell. La administración avanzada de ventanas en mosaico es imprescindible para el escritorio, por lo que hemos fusionado la administración de ventanas en mosaico tipo i3 con el escritorio GNOME para obtener lo mejor de ambos mundos.
La propuesta: Posible actualización a GNOME
El problema: por qué necesitamos esto en GNOME
Instalación: Para aquellos que quieran instalar esto en su distribución.
La solución:
Funciones compartidas: comportamientos compartidos entre los modos de apilamiento y mosaico automático
Modo flotante: comportamientos específicos del modo flotante
Modo de mosaico: comportamientos específicos del modo de mosaico automático
Desarrolladores: Guía para comenzar con el desarrollo
Actualmente se está desarrollando una propuesta para la integración de las funciones de gestión de ventanas en mosaico de Pop Shell en GNOME. Se creará como una edición de GitLab en GNOME Shell para discusión futura, una vez que hayamos invertido nuestro tiempo en producir un prototipo funcional y hayamos aprendido qué funciona y qué no en la práctica.
Idealmente, las funciones exploradas en Pop Shell estarán disponibles para cualquier entorno que utilice Mutter, ampliando considerablemente la capacidad de mosaico de medio monitor actualmente presente. Al comenzar como una extensión de shell, cualquiera que use GNOME Shell puede instalarlo en su sistema, sin tener que instalar una bifurcación de GNOME específica de Pop en su sistema.
Entonces, ¿por qué esto es un problema para nosotros y por qué tantos de nuestros usuarios cambian a i3wm?
Actualmente, GNOME solo admite el mosaico medio, que coloca una ventana en mosaico a un lado de la pantalla y otra ventana al otro lado de la pantalla. Si tiene más de dos ventanas, se espera que las coloque en espacios de trabajo y monitores separados o que alterne entre ventanas con Alt
+ Tab
.
Esto tiende a funcionar bien si sólo tienes un pequeño puñado de aplicaciones. Si necesita más de dos ventanas a la vez en una pantalla, su única opción es arrastrarlas manualmente a su posición y cambiar su tamaño para que encajen una al lado de la otra, un proceso que requiere mucho tiempo y que podría automatizarse y optimizarse fácilmente.
Supongamos que es un afortunado (o quizás desafortunado) propietario de una pantalla ultra ancha. Una ventana maximizada tendrá muchas de sus preferencias y controles dispersos en las esquinas extrema izquierda y derecha. La aplicación puede colocar un panel con botones en el extremo izquierdo, mientras que otros botones se desplazan hacia el centro o el extremo derecho.
El medio mosaico en este escenario significa que cada ventana será tan grande como una pantalla completa de 2560x1440 o 4K. En cualquier escenario, en tamaños tan extremos, el mouse se vuelve completamente inútil (y las aplicaciones se vuelven insoportables de usar) en la práctica.
Mientras lucha contra el administrador de ventanas, rápidamente queda claro que cualquier intento de administrar las ventanas de forma apilable tradicional, donde es necesario mover las ventanas manualmente a su lugar y luego cambiar su tamaño manualmente, es inútil. Los humanos no son tan precisos ni tan rápidos como los algoritmos a la hora de alinear ventanas unas junto a otras en una pantalla.
El escritorio GNOME viene con muchas funciones útiles de integración de escritorio, que se pierden al cambiar a una sesión i3wm. Aunque es posible conectar varios servicios de sesión de GNOME a una sesión de i3wm, gran parte de la experiencia del escritorio de GNOME aún se pierde en el proceso. La descripción general de la aplicación, el panel de GNOME y las extensiones de GNOME.
Peor aún, muchos usuarios no están completamente familiarizados con los administradores de ventanas en mosaico y es posible que nunca se sientan cómodos cambiando "de golpe" a uno. Al ofrecer la administración de ventanas en mosaico como una característica que se puede optar, podemos permitir que el usuario obtenga un mayor control sobre su escritorio, de modo que la idea de la administración de ventanas en mosaico de repente se vuelva accesible.
También hay quienes desean la experiencia tradicional de administración de ventanas apilables, pero también quieren poder optar por la administración avanzada de ventanas en mosaico. Por lo tanto, debería ser posible optar por la gestión de ventanas en mosaico según sea necesario. Otros sistemas operativos han combinado con éxito funciones de administración de ventanas en mosaico con la experiencia tradicional de administración de ventanas apilables, y creemos que también podemos hacer esto con GNOME.
Utilice la rama correspondiente a su versión de GNOME Shell ( git checkout branch_name
):
GNOME 3.36 a 41: use la rama master_focal
.
GNOME 42 a 44: utilice la rama master_jammy
.
GNOME 45: Utilice la rama master_mantic
.
GNOME 46+: use la rama master_noble
.
También se requieren GNU Make y TypeScript para construir el proyecto.
La funcionalidad adecuada del shell requiere modificar los atajos de teclado predeterminados de GNOME. Para una instalación local, ejecute make local-install
.
Si desea desinstalar la extensión, puede invocar make uninstall
y luego abrir el panel "Atajos de teclado" en la configuración de GNOME para seleccionar el botón "Restablecer todo..." en la barra de encabezado.
Tenga en cuenta que si está empaquetando para su distribución de Linux, muchas funciones de Pop Shell no funcionarán de inmediato porque requieren cambios en los atajos de teclado predeterminados de GNOME. Es necesaria una instalación local si no está empaquetando su sesión de GNOME con estos atajos de teclado predeterminados sin configurar o modificados.
Fedora: sudo dnf install gnome-shell-extension-pop-shell xprop
Gentoo: emerge gnome-shell-extension-pop-shell
openSUSE Tumbleweed: sudo zypper install gnome-shell-extension-pop-shell
Arch Linux (usando Yay como ayudante de AUR):
yay -S gnome-shell-extension-pop-shell
Para la versión binaria precompilada: yay -S gnome-shell-extension-pop-shell-bin
Para la versión del repositorio de GitHub: yay -S gnome-shell-extension-pop-shell-git
Funciones que se comparten entre los modos de apilamiento y mosaico automático.
Estos son clave para muchos de los atajos utilizados por los administradores de ventanas en mosaico. En adelante, este documento se referirá a estas claves como <Direction>
, que de forma predeterminada son las siguientes claves:
Left
o h
Down
o j
Up
o k
Right
o l
Super
+ q
: Cerrar ventana
Super
+ m
: Maximiza la ventana enfocada
Super
+ ,
: Minimiza la ventana enfocada
Super
+ Esc
: pantalla de bloqueo
Super
+ f
: Archivos
Super
+ e
: correo electrónico
Super
+ b
: Navegador web
Super
+ t
: Terminal
Este modo se activa con
Super
+Return
.
El modo de administración de ventanas activa un control de teclado adicional sobre el tamaño y la ubicación de la ventana actualmente enfocada. El comportamiento de este modo cambia ligeramente dependiendo de si está en el modo de mosaico automático o en el modo de apilamiento predeterminado. En el modo predeterminado, se muestra una superposición ajustada a una cuadrícula, que representa una posible ubicación y tamaño futuro de la ventana enfocada. Este comportamiento cambia ligeramente en el modo de mosaico automático, donde los cambios de tamaño se realizan inmediatamente y las superposiciones solo se muestran al intercambiar ventanas.
Activar esto permite los siguientes comportamientos:
<Direction>
En el modo predeterminado, esto moverá la superposición mostrada según una cuadrícula.
En el modo de mosaico automático, esto cambiará el tamaño de la ventana.
Shift
+ <Direction>
En el modo predeterminado, esto cambiará el tamaño de la superposición.
En el modo de mosaico automático, esto no hará nada
Ctrl
+ <Direction>
Selecciona una ventana en la dirección dada de la superposición
Cuando se presiona Return
, las posiciones de las ventanas se intercambiarán
Shift
+ Ctrl
+ <Direction>
En el modo de mosaico automático, esto cambia de tamaño en la dirección opuesta.
O
: alterna entre mosaico horizontal y vertical en el modo de mosaico automático
~
: Alterna entre flotante y mosaico en modo de mosaico automático
Return
: Aplica los cambios que se han solicitado
Esc
: cancela cualquier cambio solicitado.
Cuando no esté en el modo de administración de ventanas, presionar Super
+ <Direction>
cambiará el foco de la ventana a una ventana en la dirección dada. Esto se calcula en función de la distancia entre el centro del lado de la ventana enfocada desde donde se está desplazando la ventana y el lado opuesto de las ventanas que la rodean.
Cambiar el enfoque hacia la izquierda calculará desde el centro del lado este de la ventana enfocada hasta el centro del lado oeste de todas las demás ventanas. La ventana con la menor distancia es la ventana que elegimos.
Pop Shell proporciona un iniciador integrado que interactúa directamente con nuestro servicio de iniciador pop. JSON IPC se utiliza para comunicarse entre el shell y el iniciador de forma asincrónica. Esta funcionalidad se separó del shell debido a problemas de rendimiento y mantenibilidad. El nuevo lanzador está escrito en Rust y es totalmente asíncrono. El iniciador tiene amplias funciones que serían útiles para implementar lanzadores de escritorio más allá de una extensión de shell.
Los huecos mejoran la estética de las ventanas con azulejos y facilitan el agarre del borde de una ventana específica. Hemos decidido agregar soporte para espacios internos y externos, e hicimos que estas configuraciones sean configurables en el menú emergente de la extensión.
Las ventanas con decoraciones del lado del servidor pueden tener sus barras de título completamente ocultas, lo que da como resultado un espacio de pantalla adicional para sus aplicaciones y un entorno visualmente más limpio. Esta función se puede alternar en el menú emergente de la extensión. Windows se puede mover con el mouse manteniendo presionado Super
al hacer clic y arrastrando una ventana a otra ubicación, o usando los atajos de teclado nativos de pop-shell. Windows se puede cerrar presionando Super
+ Q
y maximizar con Super
+ M
Este es el modo predeterminado de Pop Shell, que combina la gestión tradicional de ventanas apilables con funciones opcionales de gestión de ventanas en mosaico.
En este modo, las pantallas se dividen en una cuadrícula de columnas y filas. Al ingresar al modo mosaico, las ventanas se ajustan a esta cuadrícula a medida que se colocan. El número de filas y columnas se puede configurar en el menú emergente de la extensión en el panel.
Una característica opcional para mejorar su experiencia de mosaico es la capacidad de ajustar ventanas a la cuadrícula cuando usa el mouse para moverlas y cambiar su tamaño. Esto proporciona la misma precisión que ingresar al modo de administración de ventanas para colocar una ventana con el teclado, pero con la comodidad y familiaridad de un mouse. Esta función se puede habilitar a través del menú emergente de la extensión.
Deshabilitado de forma predeterminada, este modo administra ventanas mediante un administrador de ventanas en mosaico basado en árbol. Similar a i3, cada nodo del árbol representa dos ramas. Una rama puede ser una ventana, una bifurcación que contiene más ramas o una pila que contiene muchas ventanas. Cada rama representa un área rectangular de espacio en la pantalla y se puede subdividir creando más ramas dentro de una rama. A medida que se crean las ventanas, se asignan a la ventana o pila que está activamente enfocada, lo que crea una nueva bifurcación en una ventana o adjunta la ventana a la pila enfocada. A medida que se destruyen las ventanas, se hace lo contrario para comprimir el árbol y reorganizar las ventanas a sus nuevas dimensiones.
Super
+ O
Alterna la orientación del mosaico de una bifurcación.
Super
+ G
Alterna una ventana entre flotante y en mosaico.
Ver #personalizar la lista flotante de la ventana
Hay un archivo $XDG_CONFIG_HOME/pop-shell/config.json
donde puedes agregar la siguiente estructura:
{ class: "<WM_CLASS String from xprop>", title: "<Optional Window Title>" }
Por ejemplo, al hacer xprop
en la configuración de GNOME (o el Centro de control de GNOME), los valores de WM_CLASS son gnome-control-center
y Gnome-control-center
. Utilice el segundo valor (Gnome-control-center), que leerá pop-shell. El campo title
es opcional.
Después de aplicar los cambios en config.json
, puede volver a cargar el mosaico si no funciona la primera vez.
Debido a la naturaleza riesgosa del JavaScript simple, esta extensión de GNOME Shell está escrita en TypeScript. Además de proporcionar clases e interfaces autodocumentadas y de verificación de tipos estáticas, nos permite escribir sintaxis JavaScript moderna al mismo tiempo que admite la generación de código para objetivos más antiguos.
Instale lo siguiente como dependencias durante el desarrollo:
Node.js
LTS+ (v12+)
Último npm
(viene con NodeJS)
npm install typescript@latest
Mientras trabaja en el Shell, puede recompilar, reconfigurar, reinstalar y reiniciar GNOME Shell iniciando sesión con make debug
. Tenga en cuenta que esto solo funciona de manera confiable en sesiones X11, ya que Wayland saldrá a la pantalla de inicio de sesión al reiniciar el shell.
Se aceptan debates en Pop Chat
Licenciado bajo la Licencia Pública General GNU, Versión 3.0, (LICENCIA o https://www.gnu.org/licenses/gpl-3.0.en.html)
Cualquier contribución enviada intencionalmente para su inclusión en el trabajo tendrá la licencia GNU GPLv3.