Skip to content

Fullscreen

All windows occupy the full screen area, stacked on top of each other. Only the focused window is visible. Perfect for distraction-free work.

Layout

Any window count

┌───────────────────────────────────────────────────────────┐
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ [focused window] │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
└───────────────────────────────────────────────────────────┘

Other windows are hidden behind the focused window.

Every window gets the same position and size. The focused window sits on top.

Capabilities

  • Adjustable ratio: No
  • Adjustable nmaster: No
  • Stateful: No

Since windows overlap completely, directional focus does not work. Use next and prev to cycle through windows:

spoon.Shoji:bindHotkeys({
focus_next = { { "ctrl", "alt" }, "n" },
focus_prev = { { "ctrl", "alt" }, "p" },
})

When to use

Fullscreen layout is ideal for:

  • Focus mode when distractions need to disappear
  • Writing, reading, or single-task work
  • Presentations and demos
  • Temporary maximum screen real estate

Fullscreen vs macOS native full screen

AspectShoji FullscreenmacOS Full Screen
Menu barVisibleHidden
DockVisibleHidden
macOS SpaceNormalDedicated
Window switchingFocus hotkeysMission Control
AnimationNoneSlide animation

Shoji fullscreen is instant and keeps the familiar macOS Space. macOS native full screen creates a separate macOS Space with hidden UI.

Picture-in-picture

Toggle individual windows to floating for overlays:

spoon.Shoji:bindHotkeys({
toggle_float = { { "ctrl", "alt", "shift" }, "t" },
})

A floating window appears on top of the fullscreen layout. Useful for video calls, documentation, or reference material.

Edge-to-edge fullscreen

By default, gaps apply to fullscreen windows too. For true edge-to-edge, use the Gaps modifier:

local Modifiers = require("layouts.modifiers")
local Gaps = require("layouts.modifiers.gaps")
local Fullscreen = require("layouts.fullscreen")
local trueFullscreen = Modifiers.wrap(Fullscreen, Gaps.add({
inner = 0,
outer = 0,
}), {
name = "true-fullscreen",
displayName = "True Fullscreen",
})
spoon.Shoji:configure({
layouts = { trueFullscreen },
})