Skip to content

SwineWM 0.2.0

Choose a tag to compare

@github-actions github-actions released this 17 Oct 15:46
· 133 commits to main since this release
45e6ca1

Sway configs that real people have: criteria and window rules, marks,
swap, sticky, resize, outputs, include and config error notifications,
plus the swinemenu launcher (see the roadmap in
doc/project_summary.md). The multi-monitor
features (output … mode|position|transform, workspace … output,
move workspace to output, hot-plug) are covered by unit tests but not
yet tested on a real multi-monitor setup; reports are welcome.

Added

  • swinemenu, a small launcher in the spirit of wofi/wmenu and the new
    default $menu (Win+d): lists the Start menu's apps and Store apps
    (--show drun), programs on PATH (--show run) or lines from standard
    input (--dmenu), remembers what you pick, and takes the bar's colours
    and font. swinewm starts the choice, so Store apps work as the shell.
    Flow Launcher or any other launcher can still be set as $menu.
  • IPC get_bar_config, as in sway: the bar's position, height, font and
    colours, computed from the Waybar style.css.
  • Store apps start as the shell: exec shell:AppsFolder\<AppUserModelID>
    uses the documented IApplicationActivationManager instead of the shell
    namespace, which fails with "Class not registered" without Explorer.
    Get-StartApps in PowerShell lists the IDs, e.g.
    bindsym $mod+c exec shell:AppsFolder\AnthropicPBC.Claude_fnn82j28hfe8t!Claude.
  • swinewm --set-autostart / --unset-autostart (experimental): start
    swinewm at logon next to Explorer, which stays the shell behind it with
    its taskbar hidden (explorer_taskbar autohide, now in the default
    config; no effect as the shell). In first tests Explorer still took many
    key combinations; --set-shell remains the supported mode.
  • Criteria: [app_id=… class=… title=… …] <commands>, for_window,
    assign and no_focus, as in sway, with a built-in regular-expression
    engine. On Windows app_id is the executable's file name (matched
    ignoring case) and class the window class; see the token table in
    doc/compatibility.md.
  • mark, unmark, swap container with …, sticky,
    rename workspace … to …, move … to mark, focus prev|next [sibling]
    and the IPC get_marks request, as in sway.
  • resize is now a port of sway's: grow/shrink towards an edge
    (up/down/left/right), resize set, and <n> px or <m> ppt.
  • Outputs: workspace <name> output … and workspace <name> gaps …,
    move workspace to output …; workspaces return to their monitor when
    it is plugged back in, as in sway. Monitors can be named by their model
    (output "DELL U2720Q" …).
  • output … mode|position|transform change Windows' display settings
    for as long as swinewm runs (restored on exit, after a crash and with
    --recover).
  • include takes wildcards (include config.d/*), as in sway.
  • Config errors are shown as a notification (swinewm's swaynag), on start
    and on reload.
  • doc/linux-users.md: Windows for Linux users (where things are,
    shells, package managers, getting unstuck when swinewm is the shell).

Fixed

  • exec "C:\path with spaces\App.lnk" failed: sway's rule removes the
    quotes of a single quoted argument, and the path was then split at its
    first space. A command line that names an existing file is now opened as
    a whole (this also made swinemenu's Start menu entries do nothing).
  • Store apps did not start from swinemenu: the activation manager is now
    created with CLSCTX_ALL (as PowerShell does) instead of only as a local
    server, a failed Store app exec reports failure (with the AppUserModelID
    in the log), and swinemenu then tries to start the app itself.
  • Floating dialogs that were only partly on-screen could keep their bad
    position; new dialogs are now centered unless the whole window fits on a
    monitor.
  • As the shell, swinewm now answers programs that ask where the taskbar
    is (SHAppBarMessage(ABM_GETTASKBARPOS), which went unanswered without
    Explorer).
  • Windows that are mostly off every monitor (less than half visible) are
    moved back on screen: a floating window that moves itself away is
    centred again, and other windows (dialogs swinewm does not tile, such as
    Windows 11's "Open with", which centres itself on the screen's corner
    without Explorer as the shell) are centred on the nearest monitor.
    Windows parked far away on purpose (at -32000) and windows being dragged
    are left alone; each such move is logged with the window's class and
    program. The "Open with" dialog still shows no app list as the shell
    (see doc/compatibility.md).
  • tools/list-windows.bat and tools/move-foreground.bat: scripts for
    reporting windows that swinewm handles badly; tools/launch-store-app.bat
    tests ways of starting Store apps.
  • A two-part version tag (0.1) was not recognised, so its build was
    versioned after the previous tag; it now means 0.1.0.
  • The release job failed when the release had already been created on
    GitHub; it now attaches the MSI and zip to it.