diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index 5576f632..4f7ef4fe 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -18,11 +18,15 @@ mango version:
wlroots version:
## Crash track
+
1.you need to build mango by enable asan flag.
+
```bash
meson build -Dprefix=/usr -Dasan=true
-``
+```
+
2.run mango in tty.
+
```bash
export ASAN_OPTIONS="detect_leaks=1:halt_on_error=0:log_path=/home/xxx/asan.log"
mango
diff --git a/COMMANDS.md b/COMMANDS.md
index ad9c256c..2979b8a2 100644
--- a/COMMANDS.md
+++ b/COMMANDS.md
@@ -1,6 +1,7 @@
# MangoWC Command Reference
-This document lists all available commands that can be used in keybindings, mousebindings, or via IPC (mmsg).
+This document lists all available commands that can be used in keybindings,
+mousebindings, or via IPC (mmsg).
## How to Use Commands
@@ -27,32 +28,38 @@ mmsg -d reload_config
## Window Management Commands
### killclient
+
Close the focused window.
**Syntax:** `killclient,`
**Example:**
+
```conf
bind=Alt,q,killclient,
```
### focusstack
+
Focus next/previous window in the stack.
**Arguments:** `next` or `prev`
**Example:**
+
```conf
bind=Super,Tab,focusstack,next
bind=Super+Shift,Tab,focusstack,prev
```
### focusdir
+
Focus window in a specific direction.
**Arguments:** `left`, `right`, `up`, or `down`
**Example:**
+
```conf
bind=Alt,Left,focusdir,left
bind=Alt,Right,focusdir,right
@@ -61,42 +68,50 @@ bind=Alt,Down,focusdir,down
```
### focuslast
+
Focus the previously focused window.
**Syntax:** `focuslast,`
**Example:**
+
```conf
bind=Super,grave,focuslast,
```
### exchange_client
+
Swap the focused window with another window in a direction.
**Arguments:** `left`, `right`, `up`, or `down`
**Example:**
+
```conf
bind=Super+Shift,Left,exchange_client,left
bind=Super+Shift,Right,exchange_client,right
```
### exchange_stack_client
+
Swap window position in the stack.
**Arguments:** Stack position parameters
**Example:**
+
```conf
bind=Super,s,exchange_stack_client,1
```
### zoom
+
Move focused window to master position.
**Syntax:** `zoom,`
**Example:**
+
```conf
bind=Super,Return,zoom,
```
@@ -106,81 +121,97 @@ bind=Super,Return,zoom,
## Window State Commands
### togglefloating
+
Toggle between floating and tiled mode.
**Syntax:** `togglefloating,`
**Example:**
+
```conf
bind=Alt,backslash,togglefloating,
```
### togglefullscreen
+
Toggle fullscreen mode.
**Syntax:** `togglefullscreen,`
**Example:**
+
```conf
bind=Alt,f,togglefullscreen,
```
### togglefakefullscreen
+
Toggle fake fullscreen (fullscreen within layout).
**Syntax:** `togglefakefullscreen,`
**Example:**
+
```conf
bind=Alt+Shift,f,togglefakefullscreen,
```
### togglemaximizescreen
+
Toggle maximized state.
**Syntax:** `togglemaximizescreen,`
**Example:**
+
```conf
bind=Alt,a,togglemaximizescreen,
```
### toggleglobal
+
Toggle global state (visible on all tags).
**Syntax:** `toggleglobal,`
**Example:**
+
```conf
bind=Super,g,toggleglobal,
```
### toggleoverlay
+
Toggle overlay state (always on top).
**Syntax:** `toggleoverlay,`
**Example:**
+
```conf
bind=Super,o,toggleoverlay,
```
### minimized
+
Minimize the focused window.
**Syntax:** `minimized,`
**Example:**
+
```conf
bind=Super,i,minimized,
```
### restore_minimized
+
Restore the last minimized window.
**Syntax:** `restore_minimized`
**Example:**
+
```conf
bind=Super+Shift,I,restore_minimized
```
@@ -190,147 +221,177 @@ bind=Super+Shift,I,restore_minimized
## Tag (Workspace) Commands
### view
+
Switch to a specific tag.
-**Arguments:**
+**Arguments:**
+
- `tag_number` (1-9)
- `follow` (0 or 1, whether to follow window movements)
**Example:**
+
```conf
bind=Ctrl,1,view,1,0
bind=Ctrl,2,view,2,0
```
**IPC Example:**
+
```bash
mmsg -d view 3
```
### tag
+
Move focused window to a tag and switch to it.
**Arguments:**
+
- `tag_number` (1-9)
- `follow` (0 or 1)
**Example:**
+
```conf
bind=Alt,1,tag,1,0
bind=Alt,2,tag,2,0
```
**IPC Example:**
+
```bash
mmsg -d tag 5
```
### tagsilent
+
Move focused window to a tag without switching to it.
**Arguments:** `tag_number` (1-9)
**Example:**
+
```conf
bind=Alt+Shift,1,tagsilent,1
```
### toggletag
+
Toggle tag visibility (view multiple tags).
**Arguments:** `tag_number` (1-9)
**Example:**
+
```conf
bind=Super,1,toggletag,1
```
### toggleview
+
Toggle viewing of a tag (add/remove from view).
**Arguments:** `tag_number` (1-9)
**Example:**
+
```conf
bind=Super+Ctrl,1,toggleview,1
```
### comboview
+
View multiple tags simultaneously.
**Arguments:** Comma-separated tag numbers
**Example:**
+
```conf
bind=Super,c,comboview,1,2,3
```
### viewtoleft
+
Switch to the previous tag.
**Arguments:** `wrap` (0 or 1, whether to wrap around)
**Example:**
+
```conf
bind=Super,Left,viewtoleft,0
```
### viewtoright
+
Switch to the next tag.
**Arguments:** `wrap` (0 or 1, whether to wrap around)
**Example:**
+
```conf
bind=Super,Right,viewtoright,0
```
### viewtoleft_have_client
+
Switch to previous tag that has windows.
**Arguments:** `wrap` (0 or 1)
**Example:**
+
```conf
bind=Ctrl,Left,viewtoleft_have_client,0
```
### viewtoright_have_client
+
Switch to next tag that has windows.
**Arguments:** `wrap` (0 or 1)
**Example:**
+
```conf
bind=Ctrl,Right,viewtoright_have_client,0
```
### tagtoleft
+
Move focused window to previous tag.
**Arguments:** `wrap` (0 or 1)
**Example:**
+
```conf
bind=Ctrl+Super,Left,tagtoleft,0
```
### tagtoright
+
Move focused window to next tag.
**Arguments:** `wrap` (0 or 1)
**Example:**
+
```conf
bind=Ctrl+Super,Right,tagtoright,0
```
### bind_to_view
+
Bind window to always appear on a specific tag.
**Arguments:** `tag_number`
**Example:**
+
```conf
bind=Super,b,bind_to_view,1
```
@@ -340,11 +401,13 @@ bind=Super,b,bind_to_view,1
## Layout Commands
### setlayout
+
Set a specific layout for the current tag.
**Arguments:** Layout name
**Available layouts:**
+
- `tile` - Master-stack tiling
- `scroller` - Horizontal scrolling columns
- `monocle` - One window at a time
@@ -356,6 +419,7 @@ Set a specific layout for the current tag.
- `vertical_grid` - Vertical grid
**Example:**
+
```conf
bind=Super,t,setlayout,tile
bind=Super,s,setlayout,scroller
@@ -363,37 +427,44 @@ bind=Super,m,setlayout,monocle
```
**IPC Example:**
+
```bash
mmsg -d setlayout monocle
```
### switch_layout
+
Cycle through available layouts.
**Syntax:** `switch_layout`
**Example:**
+
```conf
bind=Super,n,switch_layout
```
### setmfact
+
Set master area size ratio.
**Arguments:** Ratio change (e.g., `+0.05`, `-0.05`)
**Example:**
+
```conf
bind=Super,h,setmfact,-0.05
bind=Super,l,setmfact,+0.05
```
### incnmaster
+
Change number of windows in master area.
**Arguments:** Change amount (e.g., `+1`, `-1`)
**Example:**
+
```conf
bind=Super,equal,incnmaster,+1
bind=Super,minus,incnmaster,-1
@@ -404,37 +475,44 @@ bind=Super,minus,incnmaster,-1
## Scroller Layout Commands
### set_proportion
+
Set window width proportion in scroller layout.
**Arguments:** Width ratio (0.0-1.0)
**Example:**
+
```conf
bind=Alt,e,set_proportion,1.0 # Full width
bind=Alt,w,set_proportion,0.5 # Half width
```
### switch_proportion_preset
+
Cycle through predefined width presets.
**Syntax:** `switch_proportion_preset,`
**Example:**
+
```conf
bind=Alt,x,switch_proportion_preset,
```
**Note:** Presets are defined in config as:
+
```conf
scroller_proportion_preset=0.5,0.8,1.0
```
### scroller_stack
+
Special scroller stacking behavior.
**Arguments:** Stacking parameters
**Example:**
+
```conf
bind=Super,s,scroller_stack,1
```
@@ -444,93 +522,111 @@ bind=Super,s,scroller_stack,1
## Gap Commands
### incgaps
+
Increase or decrease all gaps.
**Arguments:** Pixel change (positive or negative)
**Example:**
+
```conf
bind=Alt+Shift,X,incgaps,1 # Increase by 1px
bind=Alt+Shift,Z,incgaps,-1 # Decrease by 1px
```
### togglegaps
+
Toggle gaps on/off.
**Syntax:** `togglegaps`
**Example:**
+
```conf
bind=Alt+Shift,R,togglegaps
```
### defaultgaps
+
Reset gaps to default values.
**Syntax:** `defaultgaps`
**Example:**
+
```conf
bind=Alt+Shift,D,defaultgaps
```
### incigaps
+
Increase/decrease inner gaps.
**Arguments:** Pixel change
**Example:**
+
```conf
bind=Super,equal,incigaps,1
bind=Super,minus,incigaps,-1
```
### incihgaps
+
Increase/decrease inner horizontal gaps.
**Arguments:** Pixel change
**Example:**
+
```conf
bind=Super+Shift,equal,incihgaps,1
```
### incivgaps
+
Increase/decrease inner vertical gaps.
**Arguments:** Pixel change
**Example:**
+
```conf
bind=Super+Ctrl,equal,incivgaps,1
```
### incogaps
+
Increase/decrease outer gaps.
**Arguments:** Pixel change
**Example:**
+
```conf
bind=Super+Alt,equal,incogaps,1
```
### incohgaps
+
Increase/decrease outer horizontal gaps.
**Arguments:** Pixel change
**Example:**
+
```conf
bind=Super+Alt+Shift,equal,incohgaps,1
```
### incovgaps
+
Increase/decrease outer vertical gaps.
**Arguments:** Pixel change
**Example:**
+
```conf
bind=Super+Alt+Ctrl,equal,incovgaps,1
```
@@ -540,11 +636,13 @@ bind=Super+Alt+Ctrl,equal,incovgaps,1
## Floating Window Commands
### movewin
+
Move floating window by pixels.
**Arguments:** `x_offset,y_offset`
**Example:**
+
```conf
bind=Ctrl+Shift,Left,movewin,-50,+0
bind=Ctrl+Shift,Right,movewin,+50,+0
@@ -553,11 +651,13 @@ bind=Ctrl+Shift,Down,movewin,+0,+50
```
### resizewin
+
Resize floating window by pixels.
**Arguments:** `width_change,height_change`
**Example:**
+
```conf
bind=Ctrl+Alt,Left,resizewin,-50,+0
bind=Ctrl+Alt,Right,resizewin,+50,+0
@@ -566,43 +666,52 @@ bind=Ctrl+Alt,Down,resizewin,+0,+50
```
### centerwin
+
Center the focused floating window.
**Syntax:** `centerwin,`
**Example:**
+
```conf
bind=Super,c,centerwin,
```
### smartmovewin
+
Smart move window (combines with layout logic).
**Arguments:** Direction and parameters
**Example:**
+
```conf
bind=Super,w,smartmovewin,up
```
### smartresizewin
+
Smart resize window (aware of layout).
**Arguments:** Direction and parameters
**Example:**
+
```conf
bind=Super,r,smartresizewin,right
```
### moveresize
+
Mouse-based move/resize.
-**Arguments:**
+**Arguments:**
+
- `curmove` - Move with mouse
- `curresize` - Resize with mouse
**Example:**
+
```conf
mousebind=SUPER,btn_left,moveresize,curmove
mousebind=SUPER,btn_right,moveresize,curresize
@@ -613,49 +722,59 @@ mousebind=SUPER,btn_right,moveresize,curresize
## Special Feature Commands
### toggleoverview
+
Toggle overview mode (show all windows).
**Syntax:** `toggleoverview,`
**Example:**
+
```conf
bind=Alt,Tab,toggleoverview,
```
### toggle_scratchpad
+
Toggle scratchpad visibility.
**Syntax:** `toggle_scratchpad`
**Example:**
+
```conf
bind=Alt,z,toggle_scratchpad
```
### toggle_named_scratchpad
+
Toggle a named scratchpad.
**Arguments:** Scratchpad name
**Example:**
+
```conf
bind=Super,p,toggle_named_scratchpad,music
bind=Super,n,toggle_named_scratchpad,notes
```
**Setup named scratchpads:**
+
1. Open an application
2. Assign it to named scratchpad with IPC:
+
```bash
mmsg -d toggle_named_scratchpad music
```
### toggle_render_border
+
Toggle border rendering.
**Syntax:** `toggle_render_border,`
**Example:**
+
```conf
bind=Super,b,toggle_render_border,
```
@@ -665,73 +784,87 @@ bind=Super,b,toggle_render_border,
## Monitor Commands
### focusmon
+
Focus adjacent monitor.
**Arguments:** `left` or `right`
**Example:**
+
```conf
bind=Alt+Shift,Left,focusmon,left
bind=Alt+Shift,Right,focusmon,right
```
### tagmon
+
Move window to adjacent monitor.
**Arguments:** `left` or `right`
**Example:**
+
```conf
bind=Super+Alt,Left,tagmon,left
bind=Super+Alt,Right,tagmon,right
```
### viewcrossmon
+
View tag on different monitor.
**Arguments:** Monitor and tag parameters
**Example:**
+
```conf
bind=Super+Ctrl,m,viewcrossmon,1,2
```
### tagcrossmon
+
Move window to tag on different monitor.
**Arguments:** Monitor and tag parameters
**Example:**
+
```conf
bind=Super+Shift,m,tagcrossmon,1,2
```
### disable_monitor
+
Disable a monitor output.
**Arguments:** Output name or identifier
**Example:**
+
```bash
mmsg -d disable_monitor HDMI-A-1
```
### enable_monitor
+
Enable a monitor output.
**Arguments:** Output name or identifier
**Example:**
+
```bash
mmsg -d enable_monitor HDMI-A-1
```
### toggle_monitor
+
Toggle monitor on/off.
**Arguments:** Output name or identifier
**Example:**
+
```conf
bind=Super,F7,toggle_monitor,HDMI-A-1
```
@@ -741,21 +874,25 @@ bind=Super,F7,toggle_monitor,HDMI-A-1
## Virtual Output Commands
### create_virtual_output
+
Create a virtual monitor output.
**Arguments:** Configuration parameters
**Example:**
+
```bash
mmsg -d create_virtual_output 1920 1080
```
### destroy_all_virtual_output
+
Remove all virtual outputs.
**Syntax:** `destroy_all_virtual_output`
**Example:**
+
```bash
mmsg -d destroy_all_virtual_output
```
@@ -765,11 +902,13 @@ mmsg -d destroy_all_virtual_output
## Application Commands
### spawn
+
Launch an application.
**Arguments:** Command to execute
**Example:**
+
```conf
bind=Alt,Return,spawn,foot
bind=Alt,space,spawn,rofi -show drun
@@ -778,27 +917,32 @@ bind=Super,c,spawn,chromium
```
**IPC Example:**
+
```bash
mmsg -d spawn firefox
mmsg -d spawn "foot -e htop"
```
### spawn_shell
+
Launch command through shell.
**Arguments:** Shell command
**Example:**
+
```conf
bind=Super,s,spawn_shell,~/.config/mango/scripts/screenshot.sh
```
### spawn_on_empty
+
Spawn application on empty tag.
**Arguments:** Tag number and command
**Example:**
+
```conf
bind=Super,w,spawn_on_empty,2,firefox
```
@@ -808,36 +952,43 @@ bind=Super,w,spawn_on_empty,2,firefox
## Input Commands
### setkeymode
+
Set keyboard mode (for modal keybindings).
**Arguments:** Mode name
**Example:**
+
```conf
bind=Super,k,setkeymode,resize
```
### switch_keyboard_layout
+
Switch between keyboard layouts.
**Syntax:** `switch_keyboard_layout`
**Example:**
+
```conf
bind=Super,Space,switch_keyboard_layout
```
**Note:** Define layouts in config:
+
```conf
xkb_rules_layout=us,ru
```
### toggle_trackpad_enable
+
Enable/disable trackpad.
**Syntax:** `toggle_trackpad_enable`
**Example:**
+
```conf
bind=Super,F9,toggle_trackpad_enable
```
@@ -847,52 +998,62 @@ bind=Super,F9,toggle_trackpad_enable
## System Commands
### quit
+
Exit MangoWC.
**Syntax:** `quit`
**Example:**
+
```conf
bind=Super,m,quit
```
**IPC Example:**
+
```bash
mmsg -d quit
```
### reload_config
+
Reload configuration file.
**Syntax:** `reload_config`
**Example:**
+
```conf
bind=Super,r,reload_config
```
**IPC Example:**
+
```bash
mmsg -d reload_config
```
### chvt
+
Change virtual terminal.
**Arguments:** VT number
**Example:**
+
```conf
bind=Ctrl+Alt,F1,chvt,1
bind=Ctrl+Alt,F2,chvt,2
```
### setoption
+
Set a configuration option at runtime.
**Arguments:** Option name and value
**Example:**
+
```bash
mmsg -d setoption animations 0
mmsg -d setoption blur 1
@@ -960,6 +1121,7 @@ bind=Super,m,quit
All commands can be executed via the `mmsg` IPC tool:
### Basic Syntax
+
```bash
mmsg -d COMMAND ARGUMENTS
```
@@ -967,6 +1129,7 @@ mmsg -d COMMAND ARGUMENTS
### Examples
**Window management:**
+
```bash
mmsg -d killclient
mmsg -d togglefloating
@@ -974,6 +1137,7 @@ mmsg -d togglefullscreen
```
**Tag switching:**
+
```bash
mmsg -d view 3
mmsg -d tag 5
@@ -981,18 +1145,21 @@ mmsg -d viewtoright
```
**Layout control:**
+
```bash
mmsg -d setlayout monocle
mmsg -d switch_layout
```
**Application launching:**
+
```bash
mmsg -d spawn firefox
mmsg -d spawn "foot -e htop"
```
**System control:**
+
```bash
mmsg -d reload_config
mmsg -d setoption animations 1
@@ -1000,7 +1167,8 @@ mmsg -d setoption animations 1
### Scripting with mmsg
-**Example 1: Toggle between two layouts**
+#### Example 1: Toggle between two layouts
+
```bash
#!/bin/bash
LAYOUT=$(mmsg -L | head -1 | grep -o "tile\|monocle")
@@ -1011,7 +1179,8 @@ else
fi
```
-**Example 2: Move all windows to tag 1**
+#### Example 2: Move all windows to tag 1
+
```bash
#!/bin/bash
for i in {2..9}; do
@@ -1023,7 +1192,8 @@ done
mmsg -d view 1
```
-**Example 3: Cycle through tags with windows**
+#### Example 3: Cycle through tags with windows
+
```bash
#!/bin/bash
mmsg -d viewtoright_have_client
@@ -1035,4 +1205,5 @@ mmsg -d viewtoright_have_client
- [config.conf](config.conf) - Configuration file with all keybindings
- [README.md](README.md) - General documentation and quick start guide
-- [MangoWC Wiki](https://github.com/DreamMaoMao/mango/wiki/) - Comprehensive online documentation
+- [MangoWC Wiki](https://github.com/DreamMaoMao/mango/wiki/) -
+ Comprehensive online documentation
diff --git a/README.md b/README.md
index d0445505..4a91378e 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,11 @@
# Mango Wayland Compositor
+
This project's development is based on [dwl](https://codeberg.org/dwl/dwl/).
-
1. **Lightweight & Fast Build**
- _Mango_ is as lightweight as _dwl_, and can be built completely within a few seconds. Despite this, _Mango_ does not compromise on functionality.
@@ -25,7 +25,7 @@ This project's development is based on [dwl](https://codeberg.org/dwl/dwl/).
- Window effects from scenefx (blur, shadow, corner radius, opacity)
- Zero flickering - every frame is perfect.
-https://github.com/user-attachments/assets/bb83004a-0563-4b48-ad89-6461a9b78b1f
+
# Quick Start Guide
@@ -36,6 +36,7 @@ MangoWC is a **Wayland compositor** - a program that manages windows and display
## First Steps After Installation
1. **Copy the default configuration:**
+
```bash
mkdir -p ~/.config/mango
cp /usr/share/mango/config.conf ~/.config/mango/config.conf
@@ -53,6 +54,7 @@ MangoWC is a **Wayland compositor** - a program that manages windows and display
- `Super + R` - Reload configuration (after making changes)
4. **Create an autostart script** (optional):
+
```bash
# Create ~/.config/mango/autostart.sh
#!/bin/bash
@@ -66,6 +68,7 @@ MangoWC is a **Wayland compositor** - a program that manages windows and display
# Start notification daemon
swaync &
```
+
Make it executable: `chmod +x ~/.config/mango/autostart.sh`
## Key Concepts
@@ -80,6 +83,7 @@ Unlike traditional workspaces, **tags** are more flexible:
Think of tags as labels you can attach to windows. You can view windows with tag 1, or tag 2, or both tags 1 and 2 simultaneously.
**Default behavior:**
+
- `Ctrl + 1-9` - View tag 1-9
- `Alt + 1-9` - Move current window to tag 1-9
- Each tag can have its own layout (tile, scroller, grid, etc.)
@@ -101,6 +105,7 @@ MangoWC supports 9 different layouts:
| **vertical_grid** | Vertical grid arrangement | Vertical content |
**Switch layouts:**
+
- `Super + N` - Cycle through layouts for current tag
- Each tag can have its own default layout (set in `config.conf`)
@@ -114,6 +119,7 @@ The **scratchpad** is a hidden workspace for temporary windows:
- Scratchpad windows float centered on screen
**Usage example:**
+
1. Open a terminal (`Alt + Return`)
2. Move it to scratchpad (`Alt + Z`)
3. It disappears
@@ -161,18 +167,21 @@ Windows can have multiple states:
### Typical Workflow
1. **Open applications:**
+
```
Alt + Space → Application launcher
Alt + Return → Terminal
```
2. **Navigate windows:**
+
```
Alt + Arrow Keys → Focus window in direction
Super + Tab → Focus next window in stack
```
3. **Organize windows:**
+
```
Super + Shift + Arrows → Swap window positions
Alt + \ → Toggle floating
@@ -180,12 +189,14 @@ Windows can have multiple states:
```
4. **Adjust layout:**
+
```
Super + N → Change layout
Alt + Shift + X/Z → Increase/decrease gaps
```
5. **Multi-monitor:**
+
```
Alt + Shift + Left/Right → Focus other monitor
Super + Alt + Left/Right → Move window to other monitor
@@ -194,16 +205,19 @@ Windows can have multiple states:
### Common Use Cases
**Web browsing + Terminal:**
+
- Open browser on tag 1, terminal on tag 2
- Use `Ctrl + 1` and `Ctrl + 2` to switch between them
**Development workflow:**
+
- Tag 1: Code editor (center_tile layout)
- Tag 2: Browser (monocle layout)
- Tag 3: Terminals (tile or scroller layout)
- Scratchpad: Calculator, notes
**Keeping a window visible everywhere:**
+
- Open music player or chat app
- Press `Super + G` to make it global
- It now appears on all tags
@@ -250,6 +264,7 @@ mmsg -d spawn firefox
### Scripting Examples
**Auto-save workspace state:**
+
```bash
#!/bin/bash
# Save current tags to file
@@ -257,6 +272,7 @@ mmsg -t > ~/mango-state.txt
```
**Tag-specific wallpapers:**
+
```bash
#!/bin/bash
# In a loop, change wallpaper based on active tag
@@ -268,6 +284,7 @@ done
```
**Quick window layout toggle:**
+
```bash
#!/bin/bash
# Toggle between tile and monocle layouts
@@ -284,18 +301,21 @@ fi
### MangoWC won't start
1. **Check dependencies:**
+
```bash
# Verify wlroots and scenefx are installed
pkg-config --modversion wlroots scenefx
```
2. **Check logs:**
+
```bash
# Run from terminal to see error messages
mango
```
3. **XWayland issues:**
+
```bash
# If X11 apps won't start, rebuild with XWayland
meson configure build -Dxwayland=enabled
@@ -311,6 +331,7 @@ fi
### Keybindings not working
1. **Find correct key name:**
+
```bash
# Install wev to see key names
wev
@@ -324,12 +345,14 @@ fi
### Applications not starting
1. **Missing required tools:**
+
```bash
# Install suggested applications
sudo pacman -S rofi foot waybar swaybg
```
2. **Check autostart script:**
+
```bash
# Test autostart manually
bash ~/.config/mango/autostart.sh
@@ -338,6 +361,7 @@ fi
### Performance issues
1. **Disable effects:**
+
```conf
# In config.conf
animations=0
@@ -346,6 +370,7 @@ fi
```
2. **Check GPU drivers:**
+
```bash
# Ensure proper graphics drivers are installed
glxinfo | grep "OpenGL"
@@ -354,6 +379,7 @@ fi
### Screen sharing not working
Install portal packages:
+
```bash
sudo pacman -S xdg-desktop-portal xdg-desktop-portal-wlr
```
@@ -366,6 +392,7 @@ sudo pacman -S xdg-desktop-portal xdg-desktop-portal-wlr
- **Issues**: [GitHub Issues](https://github.com/DreamMaoMao/mangowc/issues)
# Our discord
+
[mangowc](https://discord.gg/CPjbDxesh5)
---
@@ -393,13 +420,16 @@ sudo pacman -S xdg-desktop-portal xdg-desktop-portal-wlr
- libxcb
## Arch Linux
+
The package is in the Arch User Repository and is available for manual download [here](https://aur.archlinux.org/packages/mangowc-git) or through a AUR helper like yay:
+
```bash
yay -S mangowc-git
```
## Gentoo Linux
+
The package is in the community-maintained repository called GURU.
First, add GURU repository:
@@ -418,6 +448,7 @@ emerge --ask --verbose gui-wm/mangowc
```
## Fedora Linux
+
The package is in the third-party Terra repository.
First, add the [Terra Repository](https://terra.fyralabs.com/).
@@ -428,6 +459,7 @@ dnf install mangowc
```
## GuixSD
+
The package definition is described in the source repository.
First, add `mangowc` channel to `channels.scm` file:
@@ -477,9 +509,11 @@ sudo ninja -C build install
## Suggested Tools
### Hybrid component
+
- [dms-shell](https://github.com/AvengeMedia/DankMaterialShell)
### Independent component
+
- Application launcher (rofi, bemenu, wmenu, fuzzel)
- Terminal emulator (foot, wezterm, alacritty, kitty, ghostty)
- Status bar (waybar, eww, quickshell, ags), waybar is preferred
@@ -570,6 +604,7 @@ sudo ninja -C build install
## My Dotfiles
### Daily
+
- Dependencies
```bash
@@ -577,23 +612,26 @@ yay -S rofi foot xdg-desktop-portal-wlr swaybg waybar wl-clip-persist cliphist w
```
### Dms
+
- Dependencies
+
```bash
yay -S foot xdg-desktop-portal-wlr swaybg wl-clip-persist cliphist wl-clipboard sway-audio-idle-inhibit-git brightnessctl grim slurp satty matugen-bin dms-shell-git
```
+
- use my dms config
```bash
git clone -b dms https://github.com/DreamMaoMao/mango-config.git ~/.config/mango
```
+
- use my daily config
```bash
git clone https://github.com/DreamMaoMao/mango-config.git ~/.config/mango
```
-
## Documentation
MangoWC comes with comprehensive documentation to help you get started and master the compositor:
@@ -727,24 +765,23 @@ Read The Friendly Manual on packaging software in your distribution first.
# Thanks to These Reference Repositories
-- https://gitlab.freedesktop.org/wlroots/wlroots - Implementation of Wayland protocol
+- - Implementation of Wayland protocol
-- https://github.com/dqrk0jeste/owl - Basal window animation
+- - Basal window animation
-- https://codeberg.org/dwl/dwl - Basal dwl feature
+- - Basal dwl feature
-- https://github.com/swaywm/sway - Sample of Wayland protocol
-
-- https://github.com/wlrfx/scenefx - Make it simple to add window effect.
+- - Sample of Wayland protocol
+- - Make it simple to add window effect.
# Sponsor
+
At present, I can only accept sponsorship through an encrypted connection.
If you find this project helpful to you, you can offer sponsorship in the following ways.
-
Thanks to the following friends for their sponsorship of this project
[@tonybanters](https://github.com/tonybanters)
diff --git a/USAGE.md b/USAGE.md
index b6399873..f976a90a 100644
--- a/USAGE.md
+++ b/USAGE.md
@@ -50,6 +50,7 @@ Super + M → Exit MangoWC
Tags are like workspaces, but more flexible. Think of them as labels you can apply to windows.
**Key differences from workspaces:**
+
- A window can have multiple tags
- You can view multiple tags at once
- Each tag can have its own layout
@@ -57,6 +58,7 @@ Tags are like workspaces, but more flexible. Think of them as labels you can app
### Basic Tag Usage
**Switch to a tag:**
+
```
Ctrl + 1 → View tag 1
Ctrl + 2 → View tag 2
@@ -64,12 +66,14 @@ Ctrl + 2 → View tag 2
```
**Move window to a tag:**
+
```
Alt + 1 → Move current window to tag 1 (and switch to it)
Alt + 2 → Move current window to tag 2 (and switch to it)
```
**Navigate through tags:**
+
```
Super + Left/Right → Previous/next tag
Ctrl + Left/Right → Previous/next tag that has windows
@@ -78,11 +82,13 @@ Ctrl + Left/Right → Previous/next tag that has windows
### Advanced Tag Techniques
**View multiple tags simultaneously:**
+
1. Switch to tag 1: `Ctrl + 1`
2. Toggle tag 2 visibility: `Super + 2` (if configured)
3. Now you see windows from both tags
**Silent tag movement** (move window without following):
+
```conf
# In config.conf
bind=Alt+Shift,1,tagsilent,1
@@ -91,6 +97,7 @@ bind=Alt+Shift,1,tagsilent,1
### Organizing Your Workflow with Tags
**Example organization:**
+
```
Tag 1: Browsers (monocle layout)
Tag 2: Code editors (tile or center_tile layout)
@@ -101,6 +108,7 @@ Tag 6-9: Project-specific
```
**Setting layouts per tag in config.conf:**
+
```conf
tagrule=id:1,layout_name:monocle
tagrule=id:2,layout_name:center_tile
@@ -118,6 +126,7 @@ tagrule=id:5,layout_name:monocle
MangoWC includes 9 built-in layouts:
#### 1. Tile (Master-Stack)
+
```
┌────────┬────┐
│ │ 1 │
@@ -125,23 +134,28 @@ MangoWC includes 9 built-in layouts:
│ │ 2 │
└────────┴────┘
```
+
**Best for:** General multitasking, coding with docs
**Switch to:** Cycle with `Super + N` (or add `bind=Super,t,setlayout,tile` to config)
#### 2. Scroller (Horizontal)
+
```
┌───┬────┬───┬───┐
│ 1 │ 2 │ 3 │ 4 │...
└───┴────┴───┴───┘
```
+
**Best for:** Terminals, wide content, many windows
**Switch to:** Cycle with `Super + N` (or add `bind=Super,s,setlayout,scroller` to config)
**Scroller-specific controls:**
+
- `Alt + E` - Set current window to full width
- `Alt + X` - Cycle through width presets (0.5, 0.8, 1.0)
#### 3. Monocle (Fullscreen Stack)
+
```
┌──────────────┐
│ │
@@ -149,11 +163,13 @@ MangoWC includes 9 built-in layouts:
│ (fullscrn) │
└──────────────┘
```
+
**Best for:** Focus work, browsing, media
**Switch to:** Cycle with `Super + N`
**Navigate:** Use `Super + Tab` to cycle through windows
#### 4. Grid
+
```
┌─────┬─────┐
│ 1 │ 2 │
@@ -161,20 +177,24 @@ MangoWC includes 9 built-in layouts:
│ 3 │ 4 │
└─────┴─────┘
```
+
**Best for:** Viewing many windows simultaneously
**Switch to:** Cycle with `Super + N`
#### 5. Deck (Card Stack)
+
```
┌──────────────┐
│ Window 1 │ ← Visible
│ (2, 3 hidden)│
└──────────────┘
```
+
**Best for:** Cycling through options
**Switch to:** Cycle with `Super + N`
#### 6. Center Tile
+
```
┌──┬──────┬──┐
│1 │ │2 │
@@ -182,10 +202,12 @@ MangoWC includes 9 built-in layouts:
│3 │ │4 │
└──┴──────┴──┘
```
+
**Best for:** Symmetrical workflow, coding
**Switch to:** Cycle with `Super + N`
#### 7. Vertical Tile
+
```
┌──────────────┐
│ Master │
@@ -193,12 +215,14 @@ MangoWC includes 9 built-in layouts:
│1 │ 2 │ 3 │ 4 │
└──┴───┴───┴───┘
```
+
**Best for:** Ultra-wide monitors
**Switch to:** Cycle with `Super + N`
### Layout Controls
**Cycle through all layouts:**
+
```
Super + N → Next layout
```
@@ -206,6 +230,7 @@ Super + N → Next layout
**Adjust layout parameters:**
For **tile/center_tile** layouts:
+
```
Super + H → Decrease master size (add to config)
Super + L → Increase master size (add to config)
@@ -214,6 +239,7 @@ Super + Minus → Fewer windows in master (add to config)
```
Add to config.conf:
+
```conf
bind=Super,h,setmfact,-0.05
bind=Super,l,setmfact,+0.05
@@ -222,6 +248,7 @@ bind=Super,minus,incnmaster,-1
```
For **scroller** layout:
+
```
Alt + E → Set window to full width
Alt + X → Cycle width presets
@@ -234,17 +261,20 @@ Alt + X → Cycle width presets
### Focus Management
**Directional focus:**
+
```
Alt + ←→↑↓ → Focus window in direction
```
**Stack focus:**
+
```
Super + Tab → Next window in stack
Super + Shift + Tab → Previous window in stack
```
**Focus last window:**
+
```
Super + ` → Focus previously focused window (add to config)
```
@@ -252,21 +282,25 @@ Super + ` → Focus previously focused window (add to config)
### Moving Windows
**Swap with neighbors:**
+
```
Super + Shift + ←→↑↓ → Swap positions
```
**Move to master:**
+
```
Super + Return → Move focused window to master position (add to config)
```
Add to config:
+
```conf
bind=Super,Return,zoom,
```
**Move between tags:**
+
```
Alt + 1-9 → Move to tag (and follow)
Ctrl + Super + ←→ → Move to prev/next tag
@@ -275,28 +309,33 @@ Ctrl + Super + ←→ → Move to prev/next tag
### Floating Windows
**Toggle floating:**
+
```
Alt + \ → Toggle floating/tiling
```
**Move floating windows:**
+
```
Ctrl + Shift + ←→↑↓ → Move by pixels
Super + Left-drag → Move with mouse
```
**Resize floating windows:**
+
```
Ctrl + Alt + ←→↑↓ → Resize by pixels
Super + Right-drag → Resize with mouse
```
**Center floating window:**
+
```
Super + C → Center window (add to config)
```
Add to config:
+
```conf
bind=Super,c,centerwin,
```
@@ -304,6 +343,7 @@ bind=Super,c,centerwin,
### Window States
**Common states:**
+
```
Alt + \ → Floating
Alt + F → Fullscreen
@@ -314,6 +354,7 @@ Super + O → Overlay (always on top)
```
**Minimize/Restore:**
+
```
Super + I → Minimize window
Super + Shift + I → Restore minimized
@@ -326,6 +367,7 @@ Super + Shift + I → Restore minimized
### What is the Scratchpad?
The scratchpad is a hidden workspace for temporary windows. It's perfect for:
+
- Calculator
- Music player
- Notes/Todo list
@@ -335,12 +377,14 @@ The scratchpad is a hidden workspace for temporary windows. It's perfect for:
### Basic Scratchpad Usage
1. **Open an application** (e.g., terminal with calculator)
+
```bash
Alt + Return
# Then run: qalc (or any calculator)
```
2. **Move to scratchpad**
+
```
Alt + Z
```
@@ -348,6 +392,7 @@ The scratchpad is a hidden workspace for temporary windows. It's perfect for:
3. **Window disappears** - it's now in the scratchpad
4. **Toggle scratchpad** to show/hide
+
```
Alt + Z → Shows scratchpad over current work
Alt + Z → Hides it again
@@ -358,6 +403,7 @@ The scratchpad is a hidden workspace for temporary windows. It's perfect for:
You can have multiple named scratchpads:
**Setup in config.conf:**
+
```conf
bind=Super,p,toggle_named_scratchpad,music
bind=Super,n,toggle_named_scratchpad,notes
@@ -365,6 +411,7 @@ bind=Super,c,toggle_named_scratchpad,calc
```
**Usage:**
+
1. Open application (e.g., spotify)
2. Press `Super + P` - assigns it to "music" scratchpad
3. Press `Super + P` again - shows/hides music scratchpad
@@ -387,6 +434,7 @@ mmsg -d toggle_scratchpad
```
Bind it:
+
```conf
bind=Super,equal,spawn_shell,~/.config/mango/scripts/scratchpad-calc.sh
```
@@ -394,6 +442,7 @@ bind=Super,equal,spawn_shell,~/.config/mango/scripts/scratchpad-calc.sh
**Customize scratchpad appearance:**
In config.conf:
+
```conf
scratchpad_width_ratio=0.8 # 80% of screen width
scratchpad_height_ratio=0.9 # 90% of screen height
@@ -411,11 +460,13 @@ Overview mode shows all windows at once, similar to GNOME's Activities or macOS
### Using Overview
**Toggle overview:**
+
```
Alt + Tab → Toggle overview mode
```
**In overview mode:**
+
- Click any window to focus it
- Drag windows to rearrange
- Windows are organized visually
@@ -425,6 +476,7 @@ Alt + Tab → Toggle overview mode
Move your mouse cursor to the top edge of the screen to automatically trigger overview.
**Configure hotarea:**
+
```conf
# In config.conf
hotarea_size=10 # Pixels from edge to trigger
@@ -447,11 +499,13 @@ overviewgappo=30 # Gap from screen edges
### Basic Multi-Monitor Commands
**Focus different monitor:**
+
```
Alt + Shift + ←→ → Focus adjacent monitor
```
**Move window to other monitor:**
+
```
Super + Alt + ←→ → Move window to adjacent monitor
```
@@ -459,16 +513,19 @@ Super + Alt + ←→ → Move window to adjacent monitor
### Multi-Monitor Strategies
**Strategy 1: Dedicated monitors per task**
+
- Monitor 1: Development (Tag 1-3)
- Monitor 2: Communication (Tag 4-6)
- Monitor 3: Media/Reference (Tag 7-9)
**Strategy 2: Mirror similar tags**
+
- Both monitors show same tags
- Each monitor has different layouts
- Use global windows to span both
**Strategy 3: Independent workspaces**
+
- Each monitor is independent
- Use monitor focus shortcuts frequently
- Keep related work on same monitor
@@ -478,16 +535,19 @@ Super + Alt + ←→ → Move window to adjacent monitor
MangoWC auto-detects monitors. For custom setup:
**Disable a monitor:**
+
```bash
mmsg -d disable_monitor HDMI-A-1
```
**Enable a monitor:**
+
```bash
mmsg -d enable_monitor HDMI-A-1
```
**Find monitor names:**
+
```bash
mmsg -o
```
@@ -566,6 +626,7 @@ unfocused_opacity=0.95 # Unfocused window opacity
Create `~/.config/mango/scripts/` directory:
**Example: Screenshot script**
+
```bash
#!/bin/bash
# ~/.config/mango/scripts/screenshot.sh
@@ -574,11 +635,13 @@ grim -g "$(slurp)" - | satty --filename - --fullscreen
```
**Bind it:**
+
```conf
bind=Print,none,spawn_shell,~/.config/mango/scripts/screenshot.sh
```
**Example: Volume control**
+
```bash
#!/bin/bash
# ~/.config/mango/scripts/volume.sh
@@ -591,6 +654,7 @@ esac
```
**Bind it:**
+
```conf
bind=NONE,XF86AudioRaiseVolume,spawn_shell,~/.config/mango/scripts/volume.sh up
bind=NONE,XF86AudioLowerVolume,spawn_shell,~/.config/mango/scripts/volume.sh down
@@ -604,6 +668,7 @@ bind=NONE,XF86AudioMute,spawn_shell,~/.config/mango/scripts/volume.sh mute
### Workflow 1: Web Development
**Setup:**
+
```
Tag 1: Browser (monocle) → Testing
Tag 2: Code editor (center_tile) → Development
@@ -612,6 +677,7 @@ Scratchpad: Documentation, notes
```
**Workflow:**
+
1. Start on Tag 2, write code
2. `Ctrl + 1` → View in browser
3. `Ctrl + 3` → Run build/dev server
@@ -621,6 +687,7 @@ Scratchpad: Documentation, notes
### Workflow 2: Writing and Research
**Setup:**
+
```
Tag 1: Writing app (monocle)
Tag 2: Research browser (tile)
@@ -629,6 +696,7 @@ Scratchpad: Notes, citations
```
**Workflow:**
+
1. Research on Tags 2-3
2. `Ctrl + 1` → Switch to writing
3. `Super + G` on notes window → Make it global
@@ -637,6 +705,7 @@ Scratchpad: Notes, citations
### Workflow 3: Communication and Work
**Setup:**
+
```
Tag 1: Email (monocle)
Tag 2: Slack/Discord (tile)
@@ -646,6 +715,7 @@ Global: Music player
```
**Workflow:**
+
1. Open music player → `Super + G` (make global)
2. Start each app on its tag
3. Use `Ctrl + Left/Right` to jump between active tags
@@ -654,6 +724,7 @@ Global: Music player
### Workflow 4: System Administration
**Setup:**
+
```
Tag 1: Terminals (scroller) → Multiple SSH sessions
Tag 2: Monitoring (grid) → htop, iotop, etc.
@@ -662,6 +733,7 @@ Scratchpad: Calculator, quick commands
```
**Workflow:**
+
1. Open terminals in scroller layout
2. `Alt + X` to adjust column widths
3. `Ctrl + 2` for monitoring overview
@@ -670,6 +742,7 @@ Scratchpad: Calculator, quick commands
### Workflow 5: Video/Audio Editing
**Setup:**
+
```
Tag 1: Editor (monocle) → Full-screen editing
Tag 2: File browser (tile) → Asset management
@@ -677,6 +750,7 @@ Tag 3: Preview (monocle) → Testing output
```
**Workflow:**
+
1. Edit on Tag 1 in monocle (maximum space)
2. `Ctrl + 2` → Grab assets
3. `Ctrl + 3` → Preview output
@@ -687,6 +761,7 @@ Tag 3: Preview (monocle) → Testing output
## Quick Reference Card
### Essential Shortcuts
+
```
Alt + Return Terminal
Alt + Space Launcher
@@ -710,6 +785,7 @@ Super + G Global window
```
### When Things Go Wrong
+
```
Super + R Reload config (fixes most issues)
Super + M Exit MangoWC
@@ -729,6 +805,7 @@ Now that you understand the basics:
5. **Join the community** - [Discord](https://discord.gg/CPjbDxesh5)
**Additional Resources:**
+
- [COMMANDS.md](COMMANDS.md) - Complete command reference
- [config.conf](config.conf) - Commented configuration file
- [MangoWC Wiki](https://github.com/DreamMaoMao/mango/wiki/) - Comprehensive documentation