Intelligent Window Management for GNOME Shell 49+
A GNOME Shell extension that automatically organizes your workspace by moving maximized and fullscreen windows to empty workspaces. Keep your workflow clean and organized with intelligent multi-monitor support.
- π₯οΈ Automatic Workspace Management: Maximized and fullscreen windows automatically move to empty workspaces
- π― Smart Window Placement: Intelligently reorders workspaces to maintain workflow continuity
- πΌοΈ Multi-Monitor Support: Works seamlessly across multiple displays
- βοΈ Configurable Behavior: Choose whether to move maximized windows, fullscreen windows, or both
- π Dynamic Workspace Handling: Automatically manages workspace creation and cleanup
- π Internationalization Ready: Built-in i18n support for multiple languages
- GNOME Shell: Version 49 or higher
- Operating System: Linux with GNOME desktop environment
- Dependencies: Standard GNOME Shell extensions dependencies
-
Clone the repository:
git clone https://github.com/DilZhaan/ScreenToSpace.git cd ScreenToSpace -
Deploy the extension:
chmod +x scripts/deploy.sh ./scripts/deploy.sh
-
Restart GNOME Shell:
- On X11: Press
Alt + F2, typer, and press Enter - On Wayland: Log out and log back in
- On X11: Press
-
Enable the extension:
gnome-extensions enable screentospace@dilzhan.dev
-
Build the extension:
chmod +x scripts/makezip.sh ./scripts/makezip.sh
-
Install the ZIP file:
gnome-extensions install build/screentospace@dilzhan.dev.zip
-
Enable the extension:
gnome-extensions enable screentospace@dilzhan.dev
Access the extension preferences through:
- GNOME Extensions app β ScreenToSpace β Settings
- Command line:
gnome-extensions prefs screentospace@dilzhan.dev
| Setting | Description | Default |
|---|---|---|
| Move Window When Maximized | Automatically move maximized windows to empty workspaces. When enabled, both maximized and fullscreen windows are moved. When disabled, only fullscreen windows are moved. | β Enabled |
-
New Maximized/Fullscreen Window:
- Extension detects a window entering fullscreen or maximized state
- Finds the first available empty workspace on the same monitor
- Intelligently reorders workspaces to place the window without disrupting workflow
- Other windows remain in their original positions
-
Window Restore:
- When a window is un-maximized or exits fullscreen
- If the workspace becomes empty, it's automatically reorganized
- Window returns to the last occupied workspace on the same monitor
- Workspaces Only on Primary: Only the primary monitor has multiple workspaces; extension works exclusively on the primary display
- Workspaces on All Monitors: Extension manages workspaces independently for each monitor
This extension is built following SOLID principles with a modular, maintainable architecture:
src/
βββ extension.js # Main extension entry point
βββ constants.js # Centralized constants and strings (i18n ready)
βββ eventHandler.js # Window manager event handling (SRP)
βββ windowFilter.js # Window eligibility filtering (SRP)
βββ windowPlacement.js # Window placement logic (SRP)
βββ workspaceManager.js # Workspace operations (SRP)
βββ i18n.js # Internationalization utilities
βββ prefs.js # Preferences UI
βββ schemas/ # GSettings schemas
βββ org.gnome.shell.extensions.screentospace.gschema.xml
- Single Responsibility Principle: Each module handles one specific concern
- Open/Closed Principle: Extensible without modifying core logic
- Dependency Inversion: High-level modules don't depend on low-level details
- Interface Segregation: Clean, focused interfaces for each component
- DRY (Don't Repeat Yourself): No code duplication, centralized logic
# Check extension status
gnome-extensions info screentospace@dilzhan.dev
# View GNOME Shell logs
journalctl -f -o cat /usr/bin/gnome-shell
# Reset extension settings
dconf reset -f /org/gnome/shell/extensions/screentospace/If you encounter schema-related errors:
# Recompile schemas
glib-compile-schemas src/schemas/
# Or use the deploy script which handles this automatically
./scripts/deploy.sh-
Extension not visible in Extensions app:
- Ensure GNOME Shell version is 49+:
gnome-shell --version - Check if extension is installed:
gnome-extensions list
- Ensure GNOME Shell version is 49+:
-
Windows not moving automatically:
- Verify extension is enabled:
gnome-extensions info screentospace@dilzhan.dev - Check settings:
gnome-extensions prefs screentospace@dilzhan.dev - Ensure dynamic workspaces are enabled in GNOME settings
- Verify extension is enabled:
-
Multi-monitor issues:
- Check "Workspaces on primary display only" setting in GNOME Tweaks
- Extension behavior adapts based on this system setting
# Install development dependencies
sudo apt-get install gettext glib-2.0-dev
# For Fedora/RHEL
sudo dnf install gettext glib2-develScreenToSpace/
βββ src/ # Source code
βββ po/ # Translations
βββ scripts/ # Build and deployment scripts
βββ build/ # Build output (generated)
βββ LICENSE # GPL-2.0 license
βββ README.md # This file# Build extension package
./scripts/makezip.sh
# Output: build/screentospace@dilzhan.dev.zip# Deploy to local extensions directory
./scripts/deploy.sh
# Restart GNOME Shell (X11)
Alt + F2, type 'r', press Enter
# Watch logs for debugging
journalctl -f -o cat /usr/bin/gnome-shell | grep screentospace- ES6+ JavaScript
- 4-space indentation
- Descriptive variable and function names
- JSDoc comments for public APIs
- Follow GNOME JavaScript style guidelines
This project is licensed under the GNU General Public License v2.0 or later - see the LICENSE file for details.
Copyright (C) 2025 DilZhaan
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
DilZhaan
- GitHub: @DilZhaan
- Project: ScreenToSpace
This extension was developed from scratch following modern software engineering principles and GNOME Shell extension best practices.
Status: Active Development
Version: 1
GNOME Shell Compatibility: 49+
- Add more workspace placement strategies
- Implement custom keyboard shortcuts
- Add workspace naming and organization features
- Create comprehensive test suite
- Add more language translations
- Integration with GNOME Activities overview
If you encounter any issues or have questions:
- Check the Troubleshooting section
- Review existing issues
- Create a new issue with detailed information
Made with β€οΈ by DilZhaan