Files
ctile/README.md
prairienerd18 f4433450ff Initial commit — CTile Cinnamon extension
Snap layout overlay for Cinnamon 6.6. Drag a window to the top edge
to reveal a picker with 14 tiling presets (halves, quarters, thirds).
Layout previews use the system theme's accent color and update live
when the theme changes.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-06 20:22:24 -05:00

82 lines
2.9 KiB
Markdown

# CTile
A Cinnamon desktop extension that brings snap layout overlays to window management — drag any window toward the top of your screen and a layout picker appears, letting you tile it into a preset zone without touching the keyboard.
## How it works
1. Start dragging any window by its titlebar
2. Move the cursor within ~50px of the top screen edge — the layout picker appears
3. Hover over the desired zone (the overlay stays visible as long as your cursor is within 20px of it)
4. Release — the window snaps to that zone
The overlay displays 14 layout presets across three rows:
| Row | Layouts |
|-----|---------|
| Basic | Full, Left ½, Right ½, Top ½, Bottom ½ |
| Quarters | Top-left, Top-right, Bottom-left, Bottom-right |
| Thirds | Left ⅓, Center ⅓, Right ⅓, Left ⅔, Right ⅔ |
Layout previews are drawn in your system theme's accent color and update automatically when you change themes.
## Installation
Copy (or symlink) the repo directory to Cinnamon's extensions folder under the extension's UUID, then enable it:
```bash
cp -r /path/to/ctile ~/.local/share/cinnamon/extensions/ctile@ctile
```
Then open **System Settings → Extensions**, find **CTile**, and enable it. Or via the command line:
```bash
gsettings set org.cinnamon enabled-extensions "['ctile@ctile']"
```
Restart Cinnamon (`Alt+F2``r` → Enter) if the extension doesn't appear immediately.
## Development
After editing, sync and reload without restarting Cinnamon:
```bash
cp extension.js stylesheet.css metadata.json ~/.local/share/cinnamon/extensions/ctile@ctile/
```
Then reload via Looking Glass (`Alt+F2``lg`) or with:
```bash
dbus-send --session --dest=org.Cinnamon /org/Cinnamon org.Cinnamon.Eval \
string:'const es = imports.ui.extensionSystem; es.disableExtension("ctile@ctile"); es.enableExtension("ctile@ctile");'
```
Debug output goes to `~/.xsession-errors` — search for `[ctile]`.
## Tunables
At the top of [extension.js](extension.js):
| Constant | Default | Description |
|----------|---------|-------------|
| `TRIGGER_Y` | `50` | Pixels from top edge that triggers the overlay |
| `POLL_INTERVAL` | `40` | Milliseconds between pointer polls during a drag |
| `THUMB_W` / `THUMB_H` | `66` / `44` | Layout preview thumbnail dimensions |
| `SHOW_ANIM_MS` / `HIDE_ANIM_MS` | `120` / `100` | Fade in/out duration |
## Compatibility
Tested on **Cinnamon 6.6.7** / **Muffin 6.6.3**.
> **Note for porters:** Muffin 6.6 passes four arguments to `grab-op-begin` — `(display, screen, window, op)` — unlike older versions which passed three. If you see the overlay never appearing, verify the signal arity with Looking Glass.
## File structure
```
ctile/
├── extension.js — all extension logic (~460 lines)
├── metadata.json — UUID, name, supported Cinnamon versions
├── stylesheet.css — overlay and button styles
├── README.md
└── AGENTS.md
```