NAME
    FvwmPiazza - Fvwm module for tiling windows

VERSION
    version 0.3001

SYNOPSIS
    FvwmPiazza

DESCRIPTION
    This Fvwm module tiles windows in different ways; each "way" is called a
    layout. Layouts are applied on a per-desktop basis.

  Layouts
    Layouts can be set in two ways: as a default layout, or on the fly.

    A default layout is set in the config with a "LayoutN" directive.

        *FvwmPiazza: Layout0 Full

    The above means that the default layout for desktop 0 is "Full".

    To set a layout on the fly, you must send a message to the module; this
    is most easily done by setting a hotkey command for it.

        Key f               A       CM      SendToModule FvwmPiazza Full

    This will set the layout for the current desktop to "Full" when
    Alt-Ctrl-f is hit.

   Layout Types
    All layouts have a "max_win" argument, which is the maximum number of
    windows visible in that layout. For different types of layouts, this set
    of windows is arranged differently.

    Columns
            Columns --max_win I<cols>

        Windows are arranged in *cols* columns.

            Columns --max_win I<cols> --ratios I<ratios>

        If a *ratios* argument is given, this defines the ratios of the
        columns. For example, "Columns --cols 2 --ratios 60:40" will give
        the first column 60% of the space, and the second column 40% of the
        space.

    Full
        All windows are fullscreen.

    Grid
            Grid --max_win I<grids> --cols I<cols>

        Windows are arranged in a grid of *grids* squares, with *cols*
        columns. Thus to get a 2x2 grid, the command is "Grid --max_win 4
        --cols 2".

    Rows
            Rows --max_win I<rows>

        Windows are arranged in *rows* rows.

            Rows --max_win I<rows> --ratios I<ratios>

        If a *ratios* argument is given, this defines the ratios of the
        rows. For example, "Rows --max_win 2 --ratios 60:40" will give the
        first row 60% of the space, and the second row 40% of the space.

    Tall
            Tall --max_win I<groups>

        Windows are arranged such that the first window is in one column,
        and the rest of the windows are in (*groups* - 1) rows in the second
        column.

            Tall --max_win I<groups> --variation Right

        If the argument "--variation Right" is given ("Tall --max_win 3
        --variation Right" for example) then the arrangement is a
        mirror-image, with the single-window column being on the right
        instead of the left.

    Wide
            Wide --max_win I<groups>

        Windows are arranged such that the first window is in one row, and
        the rest of the windows are in (*groups* - 1) columns in the second
        row.

            Wide --max_win I<groups> --variation Bottom

        If the argument "--variation Bottom" is given ("Wide --max_win 3
        --variation Bottom" for example) then the arrangement is a
        mirror-image, with the single-window row being on the bottom instead
        of the top.

    Matrix
            Matrix --max_win I<groups> --cols I<cols> --rows I<rows> --rows I<rows>

        The *groups* number of windows are arranged in *cols* number of
        columns, with each column having the corresponding *rows* number of
        rows. For example "Matrix --max_win 4 --cols 3 --rows 1 --rows 2
        --rows 1" would have three columns, with one window in the first
        column, two windows in the second column, and one window in the
        third column.

  Moving Windows
    Windows can be moved to the next or previous "group" (e.g. in the Column
    layout, that would be the next or previous column) with a keystroke.

        Key Left    A       3S      Current (!CirculateHit) SendToModule FvwmPiazza PrevGroup
        Key Right   A       3S      Current (!CirculateHit) SendToModule FvwmPiazza NextGroup

    The above bindings move a window to the previous group when
    Mod3-Shift-Left is hit, and to the next group when Mod3-Shift-Right is
    hit.

    Note that if you move a window directly with the mouse, FvwmPiazza will
    not notice, and will behave as if the window was still in the same
    group.

  Changing the number of Groups
    The number of "groups" in a layout can be increased or decreased on the
    fly.

        Key less    A       3S      SendToModule FvwmPiazza Decrement 1
        Key greater A       3S      SendToModule FvwmPiazza Increment 1

    The above bindings decrease the number of groups if Mod3-Shift-less is
    hit, and increase the number of groups if Mod3-Shift-greater is hit.

  Other Config Settings
   Exclude
    This tells FvwmPiazza to ignore windows that match the given regex.

        *FvwmPiazza: Exclude (Gweled|gnome-mastermind|PipeWalker|feh|pho)

EXAMPLES
  Example Config
        # =================================================================
        # FvwmPiazza
        # =================================================================
        All (FvwmPiazza) Close
        DestroyModuleConfig FvwmPiazza: *

        *FvwmPiazza: Exclude (Gweled|gnome-mastermind|PipeWalker|feh|pho|Lurk)
        *FvwmPiazza: Layout0 Full
        *FvwmPiazza: Layout1 Tall 3
        *FvwmPiazza: Layout2 Tall 3
        *FvwmPiazza: Layout3 Full
        *FvwmPiazza: Layout4 Tall 3
        *FvwmPiazza: Layout5 Tall 3
        *FvwmPiazza: Layout6 Tall 3
        *FvwmPiazza: Layout7 Tall 3
        *FvwmPiazza: Layout8 Full

        Module FvwmPiazza

        # Hotkeys
        Key n               A       3       SendToModule FvwmPiazza "None"
        Key f               A       3       SendToModule FvwmPiazza Full
        Key t               A       3       SendToModule FvwmPiazza Tall --max_win 3
        Key t               A       3S      SendToModule FvwmPiazza Tall --max_win 3 --variation Right
        Key c               A       3       SendToModule FvwmPiazza Columns --max_win 2
        Key c               A       3S      SendToModule FvwmPiazza Columns --max_win 3 --ratios 18:64:18
        Key r               A       3       SendToModule FvwmPiazza Rows --max_win 2
        Key r               A       3S      SendToModule FvwmPiazza Rows --max_win 2 --ratios 66
        Key w               A       3       SendToModule FvwmPiazza Wide --max_win 3
        Key w               A       3S      SendToModule FvwmPiazza Wide --max_win 3 --variation Bottom
        Key g               A       3       SendToModule FvwmPiazza Grid --max_win 4 --cols 2
        Key g               A       3S      SendToModule FvwmPiazza Grid --max_win 4 --cols 2 --width_ratio 60 --height_ratio 50

        Key less    A       3S      SendToModule FvwmPiazza Decrement 1
        Key greater A       3S      SendToModule FvwmPiazza Increment 1

        Key Left    A       3S      Current (!CirculateHit) SendToModule FvwmPiazza PrevGroup
        Key Right   A       3S      Current (!CirculateHit) SendToModule FvwmPiazza NextGroup

  More Complex Example Config
        # =================================================================
        # FvwmPiazza
        # =================================================================
        All (FvwmPiazza) Close
        DestroyModuleConfig FvwmPiazza: *

        *FvwmPiazza: Struts 0 112 24 0
        *FvwmPiazza: Exclude (Gweled|gnome-mastermind|PipeWalker|feh|pho|Lurk)
        *FvwmPiazza: Layout0 Full
        *FvwmPiazza: Layout1 Columns 3
        *FvwmPiazza: Layout2 Grid 6,3
        *FvwmPiazza: Layout3 Columns 2
        *FvwmPiazza: Layout4 Columns 3
        *FvwmPiazza: Layout5 Columns 3
        *FvwmPiazza: Layout6 Full
        *FvwmPiazza: Layout7 None

        Module FvwmPiazza

        # Hotkeys
        Key n               A       3       SendToModule FvwmPiazza "None"
        Key f               A       3       SendToModule FvwmPiazza Full

        Key c               A       3       Popup FPMultiColumnMenu
        Key r               A       3       Popup FPMultiRowMenu
        Key g               A       3       Popup FPMultiGridMenu

        Key Up              A       3       SendToModule FvwmPiazza Increment 1
        Key Down            A       3       SendToModule FvwmPiazza Decrement 1

        Key Left            A       3S      Current (!CirculateHit) SendToModule FvwmPiazza PrevGroup
        Key Right           A       3S      Current (!CirculateHit) SendToModule FvwmPiazza NextGroup

        #------------------------------------------------------------------
        # Functions

        # Fake multi-keys by defining menus
        DestroyMenu FPMultiColumnMenu
        AddToMenu FPMultiColumnMenu
        + "&2 Columns" SendToModule FvwmPiazza Columns --max_win 2
        + "&3 Columns" SendToModule FvwmPiazza Columns --max_win 3
        + "&4 Columns" SendToModule FvwmPiazza Columns --max_win 4
        + "&Two-Thirds Columns" SendToModule FvwmPiazza Columns --max_win 2 --ratios 66

        DestroyMenu FPMultiRowMenu
        AddToMenu FPMultiRowMenu
        + "&2 Rows" SendToModule FvwmPiazza Rows --max_win 2
        + "&3 Rows" SendToModule FvwmPiazza Rows --max_win 3
        + "&4 Rows" SendToModule FvwmPiazza Rows --max_win 4
        + "&Two-Thirds Rows" SendToModule FvwmPiazza Rows --max_win 2 66
        + "&Wide" SendToModule FvwmPiazza Wide --max_win 3
        + "&Bottom Wide" SendToModule FvwmPiazza Wide --max_win 3 Bottom
        + "&a) Two-Thirds Wide" SendToModule FvwmPiazza Wide --max_win 3 --height_ratio 2:1

        DestroyMenu FPMultiGridMenu
        AddToMenu FPMultiGridMenu
        + "&4 Grid" SendToModule FvwmPiazza Grid --max_win 4 --cols 2
        + "&6 Grid" SendToModule FvwmPiazza Grid --max_win 6 --cols 3
        + "Tall &Left (1-2)" SendToModule FvwmPiazza Tall --max_win 3
        + "Tall &Right (2-1)" SendToModule FvwmPiazza Tall --max_win 3 Right
        + "&a) Tall Left (1-3)" SendToModule FvwmPiazza Tall --max_win 4
        + "&b) Tall Right (3-1)" SendToModule FvwmPiazza Tall --max_win 4 Right
        + "&c) Matrix (1-2-1)" SendToModule FvwmPiazza Matrix --max_win 4 --rows 1 --rows 2 --rows 1 --cols 3

REQUIRES
        FVWM::Module
        Class::Base

INSTALLATION
  Global
        perl Build.PL
        ./Build
        ./Build test
        sudo ./Build install

  Personal
    Since this module is only used by Fvwm, it makes equal sense to install
    it in your own .fvwm directory.

        mkdir $HOME/.fvwm/modules
        cp scripts/FvwmPiazza $HOME/.fvwm/modules
        mkdir $HOME/.fvwm/perllib
        cp -a lib/FvwmPiazza $HOME/.fvwm/perllib

BUGS
    Please report any bugs or feature requests to the author.

AUTHOR
        Kathryn Andersen (RUBYKAT)
        perlkat AT katspace dot org

COPYRIGHT AND LICENCE
    Copyright (c) 2009-2011 by Kathryn Andersen

    This program is free software; you can redistribute it and/or modify it
    under the same terms as Perl itself.

