chore: update d, example, html files
This commit is contained in:
parent
f542a21d2d
commit
1a478dc38c
431
README.md
431
README.md
@ -1,134 +1,314 @@
|
||||
# DWN - Desktop Window Manager
|
||||
|
||||
DWN is a high-performance, X11-compliant window manager written in ANSI C. It combines the efficiency of tiling layouts with the usability of a full desktop environment, featuring integrated status bars, system tray support, and a robust notification system.
|
||||
retoor <retoor@molodetz.nl>
|
||||
|
||||
## Project Vision
|
||||
A production-ready X11 window manager written in ANSI C. DWN implements EWMH and ICCCM protocols for cross-compatibility while providing tiling-first workflow management with integrated desktop components.
|
||||
|
||||
The Desktop Window Manager (DWN) is designed for users who seek a productive, tiling-first workflow without sacrificing modern desktop features. It adheres to EWMH and ICCCM standards, ensuring compatibility with contemporary applications while providing advanced automation capabilities through its built-in WebSocket API.
|
||||
## Architecture
|
||||
|
||||
## Key Features
|
||||
DWN uses a modular architecture with specialized subsystems for window management, layout algorithms, panel rendering, system tray, notifications, and optional AI integration. All state is managed through a global singleton with strict encapsulation patterns.
|
||||
|
||||
* **Hybrid Layout Management**: Seamlessly switch between Tiling (Master-Stack), Monocle, and Floating modes on a per-workspace basis.
|
||||
* **Virtual Workspaces**: Supports 9 independent workspaces with persistent state and layout configurations.
|
||||
* **Integrated Desktop Components**:
|
||||
* **Status Panel**: Built-in top and bottom panels with workspace indicators, taskbars, and system clocks.
|
||||
* **System Tray**: XEmbed-compliant systray implementation.
|
||||
* **Notification Daemon**: Integrated D-Bus notification server support.
|
||||
* **AI Integration**: Native support for LLM-assisted window management and semantic command execution.
|
||||
* **Command Palette**: Intelligent prompt-based interface for window and system management.
|
||||
* **Auto-Organization**: Context-aware window placement and workspace optimization.
|
||||
* **Smart Notifications**: Intelligent filtering and prioritization based on application context.
|
||||
* **Semantic Search**: Deep integration with Exa for enhanced application launching and web search.
|
||||
* **Extensible API**: A real-time WebSocket interface for remote control and introspection.
|
||||
The window manager operates with zero window borders and zero gaps between tiles, providing a seamless, professional appearance. Title bars remain at 28px height for window controls.
|
||||
|
||||
## Core Features
|
||||
|
||||
### Layout Management
|
||||
- **Tiling Mode**: Master-stack layout with configurable ratios
|
||||
- **Floating Mode**: Traditional overlapping windows
|
||||
- **Monocle Mode**: Single fullscreen window
|
||||
- **Composable Snapping**: Quarter-screen, half-screen, and full-screen snapping via Super+Arrow keys
|
||||
|
||||
### Workspace System
|
||||
- 9 independent virtual workspaces (F1-F9)
|
||||
- Per-workspace layout persistence
|
||||
- Workspace indicators in panel
|
||||
- Fast workspace switching with Shift+F1-F9 to move windows
|
||||
|
||||
### Integrated Components
|
||||
- **Top Panel**: Workspace indicators, taskbar, system tray, clock
|
||||
- **Bottom Panel**: Additional status information
|
||||
- **System Tray**: XEmbed protocol implementation supporting external applications
|
||||
- **System Widgets**: Battery indicator, volume control, WiFi manager
|
||||
- **Notification Daemon**: D-Bus org.freedesktop.Notifications implementation
|
||||
|
||||
### News Ticker
|
||||
- Real-time news feed in panel
|
||||
- Scrolling article titles
|
||||
- Super+Return to open current article in browser
|
||||
- Configurable news sources
|
||||
|
||||
### AI Integration
|
||||
- **Command Palette** (Super+Shift+A): Natural language window management
|
||||
- **Context Analysis** (Super+A): Workspace and task detection
|
||||
- **Exa Semantic Search** (Super+Shift+E): Intelligent web search
|
||||
- Powered by OpenRouter API (supports multiple LLM providers)
|
||||
|
||||
### Interactive Features
|
||||
- **Tutorial System** (Super+T): Step-by-step keyboard shortcut training
|
||||
- **Demo Mode** (Super+Shift+D): Automated feature showcase
|
||||
- **Keyboard Shortcuts Help** (Super+S): Quick reference overlay
|
||||
|
||||
### Automation
|
||||
- **XDG Autostart**: Automatic application launching from .desktop files
|
||||
- **Service Manager**: Background process management
|
||||
- **WebSocket API**: Remote control and state monitoring on port 8777
|
||||
|
||||
## Installation
|
||||
|
||||
### Prerequisites
|
||||
### Dependencies
|
||||
|
||||
DWN requires the following development libraries:
|
||||
* `libX11`, `libXext`, `libXinerama`, `libXrandr`, `libXft`
|
||||
* `fontconfig`
|
||||
* `libdbus-1`
|
||||
* `libcurl` (for AI features)
|
||||
Required packages (via pkg-config):
|
||||
- X11, Xext, Xinerama, Xrandr, Xft
|
||||
- fontconfig
|
||||
- libdbus-1
|
||||
- libcurl
|
||||
- libm
|
||||
|
||||
### Building
|
||||
### Build Process
|
||||
|
||||
```bash
|
||||
# Clone the repository
|
||||
git clone https://github.com/your-repo/dwn.git
|
||||
cd dwn
|
||||
|
||||
# Install dependencies (automated for apt/dnf/pacman)
|
||||
make deps
|
||||
|
||||
# Compile the project
|
||||
make
|
||||
make deps # Auto-install dependencies (apt/dnf/pacman)
|
||||
make # Build release version with -O2 optimization
|
||||
make install # Install to /usr/local/bin
|
||||
```
|
||||
|
||||
### Running
|
||||
|
||||
To test DWN without affecting your current session, use the provided Xephyr-based runner:
|
||||
### Testing
|
||||
|
||||
```bash
|
||||
make run
|
||||
make run # Launch in nested Xephyr window (safe testing)
|
||||
```
|
||||
|
||||
To install system-wide:
|
||||
### Build Targets
|
||||
|
||||
```bash
|
||||
sudo make install
|
||||
make # Release build with optimization
|
||||
make debug # Debug build with -g -DDEBUG
|
||||
make clean # Remove build artifacts
|
||||
make format # Run clang-format
|
||||
make check # Run cppcheck static analysis
|
||||
```
|
||||
|
||||
## AI-Assisted Management
|
||||
## Configuration
|
||||
|
||||
DWN differentiates itself through deep integration with Large Language Models (LLMs) via the OpenRouter API. This allows for semantic understanding of your workflow and proactive window management.
|
||||
Configuration file: `~/.config/dwn/config`
|
||||
|
||||
### Features
|
||||
* **Natural Language Commands**: Control your workspace using plain English (e.g., "move all browser windows to workspace 3", "arrange my coding environment").
|
||||
* **Intelligent Context**: The AI is aware of your active windows, workspace layouts, and historical usage patterns.
|
||||
* **Workflow Optimization**: Proactive suggestions for layout changes based on your current activity (coding vs. browsing vs. communication).
|
||||
* **Semantic App Launcher**: Find and launch applications based on intent rather than just binary names.
|
||||
### General Settings
|
||||
|
||||
```ini
|
||||
[general]
|
||||
terminal = xfce4-terminal
|
||||
launcher = dmenu_run
|
||||
file_manager = thunar
|
||||
focus_mode = click # click or follow
|
||||
focus_follow_delay = 100 # 0-1000ms
|
||||
decorations = true
|
||||
```
|
||||
|
||||
### Appearance
|
||||
|
||||
```ini
|
||||
[appearance]
|
||||
border_width = 0 # 0-50px (0 for seamless)
|
||||
title_height = 28 # 0-100px
|
||||
panel_height = 32 # 0-100px
|
||||
gap = 0 # 0-100px (0 for seamless)
|
||||
font = fixed
|
||||
```
|
||||
|
||||
### Layout
|
||||
|
||||
```ini
|
||||
[layout]
|
||||
default = tiling # tiling, floating, monocle
|
||||
master_ratio = 0.55 # 0.1-0.9
|
||||
master_count = 1 # 1-10
|
||||
```
|
||||
|
||||
### Panels
|
||||
|
||||
```ini
|
||||
[panels]
|
||||
top = true
|
||||
bottom = true
|
||||
```
|
||||
|
||||
### Colors
|
||||
|
||||
```ini
|
||||
[colors]
|
||||
panel_bg = #080808
|
||||
panel_fg = #00ff00
|
||||
workspace_active = #ff00ff
|
||||
workspace_inactive = #222222
|
||||
workspace_urgent = #ff0000
|
||||
title_focused_bg = #00ffff
|
||||
title_focused_fg = #000000
|
||||
title_unfocused_bg = #111111
|
||||
title_unfocused_fg = #444444
|
||||
border_focused = #00ff00
|
||||
border_unfocused = #000000
|
||||
notification_bg = #111111
|
||||
notification_fg = #00ffff
|
||||
```
|
||||
|
||||
### AI Integration
|
||||
|
||||
To use AI features, configure your API keys in `config.ini`:
|
||||
```ini
|
||||
[ai]
|
||||
enabled = true
|
||||
model = anthropic/claude-3-sonnet
|
||||
openrouter_key = YOUR_API_KEY
|
||||
exa_key = YOUR_EXA_KEY
|
||||
model = google/gemini-2.0-flash-exp:free
|
||||
openrouter_api_key = sk-or-v1-your-key
|
||||
exa_api_key = your-exa-key
|
||||
```
|
||||
|
||||
## WebSocket API
|
||||
Environment variables:
|
||||
```bash
|
||||
export OPENROUTER_API_KEY=sk-or-v1-your-key
|
||||
export EXA_API_KEY=your-exa-key
|
||||
```
|
||||
|
||||
DWN exposes a powerful WebSocket API that allows external applications to monitor state and control the window manager programmatically.
|
||||
Get API keys:
|
||||
- OpenRouter: https://openrouter.ai/keys
|
||||
- Exa: https://dashboard.exa.ai/api-keys
|
||||
|
||||
### Connectivity
|
||||
* **Default Port**: `8777`
|
||||
* **Endpoint**: `ws://localhost:8777/ws`
|
||||
* **Protocol**: JSON-RPC style messages
|
||||
### Autostart
|
||||
|
||||
```ini
|
||||
[autostart]
|
||||
enabled = true
|
||||
xdg_autostart = true # Scan /etc/xdg/autostart and ~/.config/autostart
|
||||
path = ~/.config/dwn/autostart.d
|
||||
```
|
||||
|
||||
### WebSocket API
|
||||
|
||||
The API is disabled by default. It can be enabled in the configuration file:
|
||||
```ini
|
||||
[api]
|
||||
enabled = true
|
||||
port = 8777
|
||||
```
|
||||
|
||||
### API Commands
|
||||
### Demo Mode
|
||||
|
||||
All commands are sent as JSON objects containing a `command` field.
|
||||
```ini
|
||||
[demo]
|
||||
step_delay = 4000 # 1000-30000ms between steps
|
||||
ai_timeout = 15000 # 5000-60000ms for AI responses
|
||||
window_timeout = 5000 # 1000-30000ms for window spawns
|
||||
```
|
||||
|
||||
#### 1. `get_status`
|
||||
Retrieves the current state of the window manager.
|
||||
* **Response**: Returns an object with version, current workspace ID, and total client count.
|
||||
## Keyboard Shortcuts
|
||||
|
||||
#### 2. `get_workspaces`
|
||||
Lists all workspaces and their current configuration.
|
||||
* **Response**: An array of workspace objects (ID, Name, Layout, Client Count).
|
||||
### Application Launchers
|
||||
| Shortcut | Action |
|
||||
|----------|--------|
|
||||
| `Ctrl+Alt+T` | Terminal |
|
||||
| `Super` / `Alt+F2` | Application launcher |
|
||||
| `Super+E` | File manager |
|
||||
| `Super+B` | Web browser |
|
||||
| `Print` | Screenshot |
|
||||
|
||||
#### 3. `get_clients`
|
||||
Lists all managed windows across all workspaces.
|
||||
* **Response**: An array of client objects containing:
|
||||
* `window`: X11 Window ID
|
||||
* `title`: Window title
|
||||
* `class`: Window class
|
||||
* `workspace`: Workspace ID
|
||||
* `geometry`: x, y, width, height
|
||||
* `focused`: Boolean indicating focus state
|
||||
### Window Management
|
||||
| Shortcut | Action |
|
||||
|----------|--------|
|
||||
| `Alt+F4` | Close window |
|
||||
| `Alt+Tab` | Next window |
|
||||
| `Alt+Shift+Tab` | Previous window |
|
||||
| `Alt+F9` | Toggle minimize |
|
||||
| `Alt+F10` | Toggle maximize |
|
||||
| `Alt+F11` | Toggle fullscreen |
|
||||
| `Super+F9` | Toggle floating |
|
||||
|
||||
#### 4. `switch_workspace`
|
||||
Changes the active workspace.
|
||||
* **Parameters**: `{"command": "switch_workspace", "workspace": <int>}`
|
||||
### Workspace Navigation
|
||||
| Shortcut | Action |
|
||||
|----------|--------|
|
||||
| `F1` - `F9` | Switch to workspace 1-9 |
|
||||
| `Shift+F1` - `Shift+F9` | Move window to workspace 1-9 |
|
||||
| `Ctrl+Alt+Right` | Next workspace |
|
||||
| `Ctrl+Alt+Left` | Previous workspace |
|
||||
|
||||
#### 5. `run_command`
|
||||
Executes an arbitrary shell command.
|
||||
* **Parameters**: `{"command": "run_command", "exec": "<string>"}`
|
||||
### Layout Control
|
||||
| Shortcut | Action |
|
||||
|----------|--------|
|
||||
| `Super+Space` | Cycle layout (tiling/floating/monocle) |
|
||||
| `Super+H` | Shrink master area |
|
||||
| `Super+L` | Expand master area |
|
||||
| `Super+I` | Increase master count |
|
||||
| `Super+D` | Decrease master count |
|
||||
|
||||
#### 6. `focus_client`
|
||||
Focuses a specific window and switches to its workspace if necessary.
|
||||
* **Parameters**: `{"command": "focus_client", "window": <long>}`
|
||||
### Window Snapping
|
||||
| Shortcut | Action |
|
||||
|----------|--------|
|
||||
| `Super+Left` | Snap left (50% or 100% width) |
|
||||
| `Super+Right` | Snap right (50% or 100% width) |
|
||||
| `Super+Up` | Snap top (50% or 100% height) |
|
||||
| `Super+Down` | Snap bottom (50% or 100% height) |
|
||||
|
||||
### Example Usage (Python)
|
||||
Snapping is composable: Super+Left then Super+Up snaps to top-left quarter.
|
||||
|
||||
### AI Features
|
||||
| Shortcut | Action |
|
||||
|----------|--------|
|
||||
| `Super+A` | Show AI context analysis |
|
||||
| `Super+Shift+A` | AI command palette |
|
||||
| `Super+Shift+E` | Exa semantic search |
|
||||
|
||||
### News & Help
|
||||
| Shortcut | Action |
|
||||
|----------|--------|
|
||||
| `Super+Return` | Open current news article |
|
||||
| `Super+S` | Show shortcuts help |
|
||||
| `Super+T` | Interactive tutorial |
|
||||
| `Super+Shift+D` | Toggle demo mode |
|
||||
| `Super+Backspace` | Quit DWN |
|
||||
|
||||
## WebSocket API
|
||||
|
||||
Connect to `ws://localhost:8777/ws` for programmatic control.
|
||||
|
||||
### Commands
|
||||
|
||||
#### get_status
|
||||
Returns window manager state.
|
||||
```json
|
||||
{"command": "get_status"}
|
||||
```
|
||||
|
||||
#### get_workspaces
|
||||
Returns array of workspace objects.
|
||||
```json
|
||||
{"command": "get_workspaces"}
|
||||
```
|
||||
|
||||
#### get_clients
|
||||
Returns array of all managed windows.
|
||||
```json
|
||||
{"command": "get_clients"}
|
||||
```
|
||||
|
||||
Response includes window ID, title, class, workspace, geometry, focus state.
|
||||
|
||||
#### switch_workspace
|
||||
Change active workspace.
|
||||
```json
|
||||
{"command": "switch_workspace", "workspace": 2}
|
||||
```
|
||||
|
||||
#### run_command
|
||||
Execute shell command.
|
||||
```json
|
||||
{"command": "run_command", "exec": "firefox"}
|
||||
```
|
||||
|
||||
#### focus_client
|
||||
Focus specific window by ID.
|
||||
```json
|
||||
{"command": "focus_client", "window": 12345678}
|
||||
```
|
||||
|
||||
### Python Example
|
||||
|
||||
```python
|
||||
import websocket
|
||||
@ -136,59 +316,76 @@ import json
|
||||
|
||||
ws = websocket.create_connection("ws://localhost:8777/ws")
|
||||
|
||||
# Switch to workspace 2
|
||||
ws.send(json.dumps({
|
||||
"command": "switch_workspace",
|
||||
"workspace": 2
|
||||
}))
|
||||
ws.send(json.dumps({"command": "switch_workspace", "workspace": 3}))
|
||||
|
||||
# Get all clients
|
||||
ws.send(json.dumps({"command": "get_clients"}))
|
||||
result = ws.recv()
|
||||
print(json.loads(result))
|
||||
print(json.loads(ws.recv()))
|
||||
|
||||
ws.close()
|
||||
```
|
||||
|
||||
### Advanced API Examples
|
||||
## Module Architecture
|
||||
|
||||
The `scripts/api_examples/` directory contains several sophisticated applications leveraging the WebSocket API:
|
||||
### Core Modules (src/)
|
||||
|
||||
* **Window Picker (`window_picker_fzf.py`)**: A terminal-based window switcher using `fzf`. It allows for fuzzy-searching through all open windows across all workspaces and jumping to the selected one.
|
||||
* **Web Remote (`web_remote.html`)**: A standalone, mobile-friendly HTML5 dashboard. Control your window manager from a tablet or phone on the same network.
|
||||
* **Session Manager (`session_manager.py`)**: Save and restore your window layouts. Snapshots current open applications and their workspace assignments for easy restoration.
|
||||
* **Auto-Manager (`listen.py`)**: A background service that monitors workspace occupancy and proactively suggests moving windows if a workspace becomes too crowded.
|
||||
| Module | Responsibility |
|
||||
|--------|----------------|
|
||||
| main.c | X11 initialization, event loop, signal handling |
|
||||
| client.c | Window management, focus, frame creation |
|
||||
| workspace.c | Virtual desktop management |
|
||||
| layout.c | Tiling, floating, monocle algorithms |
|
||||
| decorations.c | Title bars and borders |
|
||||
| panel.c | Top and bottom panel rendering |
|
||||
| systray.c | XEmbed system tray, battery/volume/WiFi widgets |
|
||||
| notifications.c | D-Bus notification daemon |
|
||||
| atoms.c | EWMH/ICCCM atom management |
|
||||
| keys.c | Keyboard shortcut handling |
|
||||
| config.c | INI configuration parser |
|
||||
| ai.c | OpenRouter API, Exa search integration |
|
||||
| news.c | News ticker with scrolling animation |
|
||||
| autostart.c | XDG autostart implementation |
|
||||
| services.c | Background service management |
|
||||
| demo.c | Automated feature demonstration |
|
||||
| api.c | WebSocket server and JSON handler |
|
||||
| util.c | Logging, memory, string utilities |
|
||||
|
||||
## Configuration
|
||||
### Design Patterns
|
||||
|
||||
DWN looks for a configuration file at `~/.config/dwn/config.ini`. If not found, it falls back to `/etc/dwn/config.ini`.
|
||||
|
||||
Refer to `config/config.example` for a documented template of all available options, including color schemes, keybindings, and autostart commands.
|
||||
- **Encapsulation**: Opaque pointer types hide internal structures
|
||||
- **Error Handling**: Status codes with output parameters
|
||||
- **Resource Management**: Goto cleanup pattern for multi-resource functions
|
||||
- **Modularity**: Single responsibility per source file
|
||||
- **Naming**: Module prefix convention (e.g., `client_focus()`, `workspace_switch()`)
|
||||
|
||||
## Development
|
||||
|
||||
DWN is built with modularity in mind. Each major component is isolated in its own source file to facilitate easier debugging and feature additions.
|
||||
### Standards
|
||||
|
||||
### Key Components
|
||||
* `src/main.c`: The core event loop and X11 event dispatcher.
|
||||
* `src/client.c`: Window management logic (framing, focus, resizing).
|
||||
* `src/layout.c`: Tiling and floating layout algorithms.
|
||||
* `src/api.c`: WebSocket server and JSON command handler.
|
||||
* `src/ai.c`: OpenRouter API integration and semantic logic.
|
||||
- ANSI C (C89/C90) for maximum compatibility
|
||||
- Snake_case for functions and variables
|
||||
- CamelCase for types and structs
|
||||
- No external dependencies beyond X11 and standard libraries
|
||||
- Defensive programming: validate inputs, check malloc, null-terminate strings
|
||||
|
||||
### Coding Standards
|
||||
* Strict adherence to ANSI C (C89/C90) for maximum compatibility.
|
||||
* No external dependencies beyond standard X11 and networking libraries.
|
||||
* Formatting is enforced via `clang-format`. Run `make format` before submitting patches.
|
||||
### Code Style
|
||||
|
||||
## Codebase Structure
|
||||
```bash
|
||||
make format # Apply clang-format
|
||||
make check # Run cppcheck
|
||||
```
|
||||
|
||||
* `src/`: Core implementation logic.
|
||||
* `include/`: Header files and internal API definitions.
|
||||
* `config/`: Configuration templates.
|
||||
* `scripts/`: Deployment and utility scripts.
|
||||
* `site/`: Technical documentation and architecture overviews.
|
||||
### Project Structure
|
||||
|
||||
```
|
||||
dwn/
|
||||
├── src/ # Implementation
|
||||
├── include/ # Headers
|
||||
├── config/ # Configuration templates
|
||||
├── scripts/ # Utilities and API examples
|
||||
├── site/ # Documentation website
|
||||
└── build/ # Build artifacts
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
This project is licensed under the MIT License - see the `LICENSE` file for details.
|
||||
MIT License - see LICENSE file for details.
|
||||
|
||||
BIN
build/client.o
BIN
build/client.o
Binary file not shown.
BIN
build/config.o
BIN
build/config.o
Binary file not shown.
Binary file not shown.
@ -1,8 +1,47 @@
|
||||
build/layout.o: src/layout.c include/layout.h include/dwn.h \
|
||||
include/client.h include/workspace.h include/config.h include/util.h
|
||||
include/client.h include/workspace.h include/config.h include/util.h \
|
||||
include/panel.h include/notifications.h \
|
||||
/usr/include/dbus-1.0/dbus/dbus.h \
|
||||
/usr/lib/x86_64-linux-gnu/dbus-1.0/include/dbus/dbus-arch-deps.h \
|
||||
/usr/include/dbus-1.0/dbus/dbus-macros.h \
|
||||
/usr/include/dbus-1.0/dbus/dbus-address.h \
|
||||
/usr/include/dbus-1.0/dbus/dbus-types.h \
|
||||
/usr/include/dbus-1.0/dbus/dbus-errors.h \
|
||||
/usr/include/dbus-1.0/dbus/dbus-protocol.h \
|
||||
/usr/include/dbus-1.0/dbus/dbus-bus.h \
|
||||
/usr/include/dbus-1.0/dbus/dbus-connection.h \
|
||||
/usr/include/dbus-1.0/dbus/dbus-memory.h \
|
||||
/usr/include/dbus-1.0/dbus/dbus-message.h \
|
||||
/usr/include/dbus-1.0/dbus/dbus-shared.h \
|
||||
/usr/include/dbus-1.0/dbus/dbus-misc.h \
|
||||
/usr/include/dbus-1.0/dbus/dbus-pending-call.h \
|
||||
/usr/include/dbus-1.0/dbus/dbus-server.h \
|
||||
/usr/include/dbus-1.0/dbus/dbus-signature.h \
|
||||
/usr/include/dbus-1.0/dbus/dbus-syntax.h \
|
||||
/usr/include/dbus-1.0/dbus/dbus-threads.h
|
||||
include/layout.h:
|
||||
include/dwn.h:
|
||||
include/client.h:
|
||||
include/workspace.h:
|
||||
include/config.h:
|
||||
include/util.h:
|
||||
include/panel.h:
|
||||
include/notifications.h:
|
||||
/usr/include/dbus-1.0/dbus/dbus.h:
|
||||
/usr/lib/x86_64-linux-gnu/dbus-1.0/include/dbus/dbus-arch-deps.h:
|
||||
/usr/include/dbus-1.0/dbus/dbus-macros.h:
|
||||
/usr/include/dbus-1.0/dbus/dbus-address.h:
|
||||
/usr/include/dbus-1.0/dbus/dbus-types.h:
|
||||
/usr/include/dbus-1.0/dbus/dbus-errors.h:
|
||||
/usr/include/dbus-1.0/dbus/dbus-protocol.h:
|
||||
/usr/include/dbus-1.0/dbus/dbus-bus.h:
|
||||
/usr/include/dbus-1.0/dbus/dbus-connection.h:
|
||||
/usr/include/dbus-1.0/dbus/dbus-memory.h:
|
||||
/usr/include/dbus-1.0/dbus/dbus-message.h:
|
||||
/usr/include/dbus-1.0/dbus/dbus-shared.h:
|
||||
/usr/include/dbus-1.0/dbus/dbus-misc.h:
|
||||
/usr/include/dbus-1.0/dbus/dbus-pending-call.h:
|
||||
/usr/include/dbus-1.0/dbus/dbus-server.h:
|
||||
/usr/include/dbus-1.0/dbus/dbus-signature.h:
|
||||
/usr/include/dbus-1.0/dbus/dbus-syntax.h:
|
||||
/usr/include/dbus-1.0/dbus/dbus-threads.h:
|
||||
|
||||
BIN
build/layout.o
BIN
build/layout.o
Binary file not shown.
BIN
build/main.o
BIN
build/main.o
Binary file not shown.
Binary file not shown.
BIN
build/panel.o
BIN
build/panel.o
Binary file not shown.
BIN
build/systray.o
BIN
build/systray.o
Binary file not shown.
@ -21,11 +21,11 @@ decorations = true
|
||||
# Border width in pixels (default: 0)
|
||||
border_width = 0
|
||||
|
||||
# Title bar height in pixels (default: 24)
|
||||
title_height = 24
|
||||
# Title bar height in pixels (default: 28)
|
||||
title_height = 28
|
||||
|
||||
# Panel height in pixels (default: 28)
|
||||
panel_height = 28
|
||||
# Panel height in pixels (default: 32)
|
||||
panel_height = 32
|
||||
|
||||
# Gap between windows in pixels (default: 0)
|
||||
gap = 0
|
||||
|
||||
@ -171,11 +171,31 @@
|
||||
<td><code>ai.c</code></td>
|
||||
<td>Async OpenRouter API integration, Exa semantic search</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>News</strong></td>
|
||||
<td><code>news.c</code></td>
|
||||
<td>News ticker with API integration, scrolling animation, article navigation</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Autostart</strong></td>
|
||||
<td><code>autostart.c</code></td>
|
||||
<td>XDG Autostart support, .desktop file parsing, concurrent app launch</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Services</strong></td>
|
||||
<td><code>services.c</code></td>
|
||||
<td>Background service management, process lifecycle control</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Demo</strong></td>
|
||||
<td><code>demo.c</code></td>
|
||||
<td>Automated feature demonstration mode, tutorial system</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>API</strong></td>
|
||||
<td><code>api.c</code></td>
|
||||
<td>WebSocket server, JSON-RPC command handler, remote control interface</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Util</strong></td>
|
||||
<td><code>util.c</code></td>
|
||||
|
||||
@ -134,27 +134,27 @@ decorations = true</code></pre>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>border_width</code></td>
|
||||
<td><code>2</code></td>
|
||||
<td><code>0</code></td>
|
||||
<td>0-50</td>
|
||||
<td>Window border width in pixels</td>
|
||||
<td>Window border width in pixels (0 for seamless design)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>title_height</code></td>
|
||||
<td><code>24</code></td>
|
||||
<td><code>28</code></td>
|
||||
<td>0-100</td>
|
||||
<td>Title bar height in pixels</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>panel_height</code></td>
|
||||
<td><code>28</code></td>
|
||||
<td><code>32</code></td>
|
||||
<td>0-100</td>
|
||||
<td>Top/bottom panel height</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>gap</code></td>
|
||||
<td><code>4</code></td>
|
||||
<td><code>0</code></td>
|
||||
<td>0-100</td>
|
||||
<td>Gap between tiled windows</td>
|
||||
<td>Gap between tiled windows (0 for edge-to-edge tiling)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>font</code></td>
|
||||
@ -170,11 +170,11 @@ decorations = true</code></pre>
|
||||
<button class="copy-btn" onclick="copyCode(this)">Copy</button>
|
||||
</div>
|
||||
<pre><code>[appearance]
|
||||
border_width = 2
|
||||
border_width = 0
|
||||
title_height = 28
|
||||
panel_height = 32
|
||||
gap = 8
|
||||
font = DejaVu Sans-10</code></pre>
|
||||
gap = 0
|
||||
font = fixed</code></pre>
|
||||
<h2 id="layout" style="margin-top: 3rem;">[layout] - Layout Behavior</h2>
|
||||
<p style="color: var(--text-muted); margin-bottom: 1.5rem;">
|
||||
Configure the default layout mode and tiling parameters.
|
||||
@ -489,11 +489,11 @@ focus_mode = click
|
||||
focus_follow_delay = 100
|
||||
decorations = true
|
||||
[appearance]
|
||||
border_width = 2
|
||||
title_height = 24
|
||||
panel_height = 28
|
||||
gap = 6
|
||||
font = DejaVu Sans-10
|
||||
border_width = 0
|
||||
title_height = 28
|
||||
panel_height = 32
|
||||
gap = 0
|
||||
font = fixed
|
||||
[layout]
|
||||
default = tiling
|
||||
master_ratio = 0.55
|
||||
|
||||
@ -131,12 +131,24 @@
|
||||
</p>
|
||||
<h3>Window Decorations</h3>
|
||||
<p>
|
||||
Each window has a title bar showing its name. The title bar color indicates focus:
|
||||
DWN features a professional borderless design for maximum screen utilization:
|
||||
</p>
|
||||
<ul>
|
||||
<li><strong>Blue title bar</strong> - Focused window</li>
|
||||
<li><strong>Gray title bar</strong> - Unfocused window</li>
|
||||
<li><strong>0px borders</strong> - No visible borders around windows</li>
|
||||
<li><strong>0px gaps</strong> - Windows tile edge-to-edge without spacing</li>
|
||||
<li><strong>28px title bars</strong> - Minimal height showing window name and controls</li>
|
||||
</ul>
|
||||
<p>
|
||||
The title bar color indicates focus:
|
||||
</p>
|
||||
<ul>
|
||||
<li><strong>Bright title bar</strong> - Focused window</li>
|
||||
<li><strong>Dim title bar</strong> - Unfocused window</li>
|
||||
</ul>
|
||||
<p>
|
||||
This seamless design creates a smooth, professional appearance where content takes
|
||||
center stage. All settings can be customized in <code>~/.config/dwn/config</code>.
|
||||
</p>
|
||||
<h2 id="tutorial">Interactive Tutorial</h2>
|
||||
<p>
|
||||
DWN includes a built-in interactive tutorial that teaches you essential shortcuts
|
||||
@ -152,6 +164,23 @@
|
||||
<h3>Start the Tutorial</h3>
|
||||
<p>Press <kbd>Super</kbd> + <kbd>T</kbd> at any time to start or resume the tutorial.</p>
|
||||
</div>
|
||||
<h2 id="demo">Demo Mode</h2>
|
||||
<p>
|
||||
DWN includes an automated demo mode that showcases all features without requiring
|
||||
any interaction. The demo:
|
||||
</p>
|
||||
<ul>
|
||||
<li>Automatically demonstrates window management operations</li>
|
||||
<li>Shows workspace switching and layout changes</li>
|
||||
<li>Highlights panel features and system tray widgets</li>
|
||||
<li>Demonstrates AI integration capabilities (if configured)</li>
|
||||
<li>Displays the complete keyboard shortcut reference</li>
|
||||
</ul>
|
||||
<div class="card">
|
||||
<h3>Start Demo Mode</h3>
|
||||
<p>Press <kbd>Super</kbd> + <kbd>Shift</kbd> + <kbd>D</kbd> to start the demo.
|
||||
Press the same shortcut again to stop it at any time.</p>
|
||||
</div>
|
||||
<h2 id="windows">Managing Windows</h2>
|
||||
<h3>Window Operations</h3>
|
||||
<div class="table-wrapper">
|
||||
|
||||
@ -63,7 +63,7 @@
|
||||
<li>Adjustable master area ratio (0.1 - 0.9)</li>
|
||||
<li>Multiple windows in master area</li>
|
||||
<li>Smart stack arrangement</li>
|
||||
<li>Configurable gaps between windows</li>
|
||||
<li>Seamless borderless design (0px borders, 0px gaps)</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="card">
|
||||
@ -94,6 +94,21 @@
|
||||
<p style="margin: 0;">Switch layouts instantly with <kbd>Super</kbd> + <kbd>Space</kbd>.
|
||||
Your window arrangement is preserved when switching back.</p>
|
||||
</div>
|
||||
<h3 style="margin-top: 3rem; margin-bottom: 1.5rem;">Borderless Design</h3>
|
||||
<div class="card">
|
||||
<p>DWN employs a professional, seamless aesthetic with zero window borders and zero gaps:</p>
|
||||
<ul style="margin-top: 1rem; padding-left: 1.25rem; color: var(--text-muted);">
|
||||
<li><strong>0px borders</strong> - No visible borders around windows</li>
|
||||
<li><strong>0px gaps</strong> - Windows tile edge-to-edge without spacing</li>
|
||||
<li><strong>28px title bars</strong> - Minimal height for window controls</li>
|
||||
<li><strong>Maximum screen utilization</strong> - Every pixel counts</li>
|
||||
</ul>
|
||||
<p style="margin-top: 1rem; color: var(--text-muted);">
|
||||
This creates a smooth, professional appearance where content takes center stage. The focus
|
||||
remains on your work, not on window decorations. All settings are configurable via
|
||||
<code>~/.config/dwn/config</code> if you prefer different values.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="section section-alt">
|
||||
|
||||
@ -45,7 +45,8 @@
|
||||
<h1>Modern Window Management for X11</h1>
|
||||
<p class="subtitle">
|
||||
DWN is a production-ready window manager written in ANSI C with XFCE-like functionality,
|
||||
powerful tiling layouts, and optional AI integration. Fast, flexible, and fully featured.
|
||||
powerful tiling layouts, and optional AI integration. Seamless borderless design, zero gaps,
|
||||
and professional appearance. Fast, flexible, and fully featured.
|
||||
</p>
|
||||
<div class="hero-buttons">
|
||||
<a href="installation.html" class="btn btn-primary btn-lg">Get Started</a>
|
||||
@ -109,6 +110,24 @@
|
||||
<p>Automatic startup of system services and tray applications following the
|
||||
XDG Autostart spec. Works with nm-applet, blueman, and more.</p>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">📰</div>
|
||||
<h3>News Ticker</h3>
|
||||
<p>Real-time news feed with scrolling article titles in the panel. Press
|
||||
Super+Return to open the current article in your browser.</p>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">🎓</div>
|
||||
<h3>Interactive Learning</h3>
|
||||
<p>Built-in tutorial system (Super+T) guides you through keyboard shortcuts.
|
||||
Demo mode (Super+Shift+D) showcases all features automatically.</p>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">📐</div>
|
||||
<h3>Borderless Design</h3>
|
||||
<p>Zero window borders and zero gaps for a seamless, professional appearance.
|
||||
Windows tile edge-to-edge for maximum screen utilization.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user