Skip to content

Tall

Main window on the left, remaining windows stacked on the right. The classic tiling layout, inspired by dwm and xmonad.

Layout

1 window

┌───────────────────────────────────────────────────────────┐
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ 1 │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
└───────────────────────────────────────────────────────────┘

2 windows

┌─────────────────────────────┬─────────────────────────────┐
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ 1 │ 2 │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
└─────────────────────────────┴─────────────────────────────┘

3 windows

┌─────────────────────────────┬─────────────────────────────┐
│ │ │
│ │ │
│ │ │
│ │ 2 │
│ │ │
│ │ │
│ │ │
│ 1 ├─────────────────────────────┤
│ │ │
│ │ │
│ │ │
│ │ 3 │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
└─────────────────────────────┴─────────────────────────────┘

4+ windows

┌─────────────────────────────┬─────────────────────────────┐
│ │ │
│ │ 2 │
│ │ │
│ │ │
│ │ │
│ ├─────────────────────────────┤
│ │ │
│ 1 │ 3 │
│ │ │
│ │ │
│ │ │
│ ├─────────────────────────────┤
│ │ │
│ │ 4 │
│ │ │
│ │ │
│ │ │
└─────────────────────────────┴─────────────────────────────┘

Stack windows share equal height. More windows means shorter stacks.

Capabilities

  • Adjustable ratio: Yes - resize the main area
  • Adjustable nmaster: Yes - put multiple windows in main
  • Stateful: No

Configuration

spoon.Shoji:configure({
default_layout = "tall",
main_ratio = 0.5, -- Main area gets 50% of screen width
nmaster = 1, -- One window in main area
})

Main ratio

The main ratio controls how much horizontal space the main area occupies. Bind hotkeys to adjust it dynamically:

spoon.Shoji:bindHotkeys({
increase_main_ratio = { { "ctrl", "alt" }, "=" }, -- Wider main
decrease_main_ratio = { { "ctrl", "alt" }, "-" }, -- Narrower main
})

The ratio ranges from 0.1 to 0.9, adjusting by 0.05 per keypress.

30% main ratio

┌─────────────────┬─────────────────────────────────────────┐
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ 1 │ 2 │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
└─────────────────┴─────────────────────────────────────────┘

70% main ratio

┌─────────────────────────────────────────┬─────────────────┐
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ 1 │ 2 │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
└─────────────────────────────────────────┴─────────────────┘

Multiple masters

Need more than one main window? Increase nmaster to share the main area:

spoon.Shoji:bindHotkeys({
increase_nmaster = { { "ctrl", "alt" }, "," },
decrease_nmaster = { { "ctrl", "alt" }, "." },
})

nmaster = 2 (with 3 windows)

┌─────────────────────────────┬─────────────────────────────┐
│ │ │
│ │ │
│ │ │
│ 1 │ │
│ │ │
│ │ │
│ │ │
├─────────────────────────────┤ 3 │
│ │ │
│ │ │
│ │ │
│ 2 │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
└─────────────────────────────┴─────────────────────────────┘

Windows 1 and 2 share the main area; window 3 occupies the stack.

When to use

Tall is the workhorse layout for development:

  • Editor in main, terminal and browser in stack
  • Primary document with reference materials alongside
  • Any task with one focus window and supporting windows

Mirrored tall

Prefer the main window on the right? Use the Mirror modifier:

local Modifiers = require("layouts.modifiers")
local Mirror = require("layouts.modifiers.mirror")
local Tall = require("layouts.tall")
local tallRight = Modifiers.wrap(Tall, Mirror.horizontal(), {
name = "tall-right",
displayName = "Tall (Right)",
})
spoon.Shoji:configure({
layouts = { tallRight },
enabled_layouts = { "tall", "tall-right" },
})

Mirrored result (3 windows)

┌─────────────────────────────┬─────────────────────────────┐
│ │ │
│ │ │
│ │ │
│ 2 │ │
│ │ │
│ │ │
│ │ │
├─────────────────────────────┤ 1 │
│ │ │
│ │ │
│ │ │
│ 3 │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
└─────────────────────────────┴─────────────────────────────┘