Copyright | (c) Yecine Megdiche <yecine.megdiche@gmail.com> |
---|---|
License | BSD3-style (see LICENSE) |
Maintainer | Yecine Megdiche <yecine.megdiche@gmail.com> |
Stability | unstable |
Portability | unportable |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
Layout modifier for user provided per-window aspect ratios.
Synopsis
- fixedAspectRatio :: (Double, Double) -> l a -> ModifiedLayout FixedAspectRatio l a
- data FixedAspectRatio a
- data ManageAspectRatio
- doFixAspect :: Rational -> ManageHook
Usage
You can use this module with the following in your xmonad.hs
:
import XMonad.Layout.FixedAspectRatio
Then add it to your layout:
myLayout = fixedAspectRatio (0.5, 0.5) $ Tall 1 (3/100) (1/2) ||| Full ||| etc.. main = xmonad def { layoutHook = myLayout }
Which will center the (eventually) shrinked windows in their assigned rectangle.
For a layout modifier that automatically sets the aspect ratio depending on the size hints (for example for programs like mpv), see XMonad.Layout.LayoutHints
See the tutorial and
XMonad.Doc.Extending for more info on the layoutHook
.
You also want to add keybindings to set and clear the aspect ratio:
-- Set the aspect ratio of the focused window to 16:9 ,((modm, xK_a), withFocused $ sendMessage . FixRatio (16 / 9)) -- Clear the aspect ratio from the focused window ,((modm .|. shiftMask, xK_a), withFocused $ sendMessage . ResetRatio)
There's one caveat: to keep the usage of the modifier simple, it doesn't remove a window from its cache automatically. Which means that if you close a program window that has some fixed aspect ratios and relaunch it, sometimes it'll still have the fixed aspect ratio. You can try to avoid this by changing they keybinding used to kill the window:
, ((modMask .|. shiftMask, xK_c), withFocused (sendMessage . ResetRatio) >> kill)
See the tutorial for more info on customizing the keybindings.
This layout also comes with a ManageHook
doFixAspect
to
automatically fix the aspect ratio:
myManageHook = composeOne [ title =? "Netflix" <||> className =? "vlc" --> doFixAspect (16 / 9) ... ]
Check the tutorial and XMonad.Doc.Extending for more information on customizing the manage hook.
fixedAspectRatio :: (Double, Double) -> l a -> ModifiedLayout FixedAspectRatio l a Source #
Similar to layoutHintsWithReplacement
, but relies on the user to
provide the ratio for each window. aspectRatio (rx, ry) layout
will
adapt the sizes of a layout's windows according to the provided aspect
ratio, and position them inside their originally assigned area
according to the rx
and ry
parameters.
(0, 0) places the window at the top left, (1, 0) at the top right,
(0.5, 0.5) at the center, etc.
data FixedAspectRatio a Source #
Instances
data ManageAspectRatio Source #
FixRatio Rational Window | Set the aspect ratio for the window |
ResetRatio Window | Remove the aspect ratio for the window |
ToggleRatio Rational Window | Toggle the reatio |
Instances
:: Rational | The aspect ratio |
-> ManageHook |
A ManageHook
to set the aspect ratio for newly spawned windows