A tiling window manager for Windows

Overview

komorebi

Tiling Window Management for Windows.

screenshot

About

komorebi is a tiling window manager that works as an extension to Microsoft's Desktop Window Manager in Windows 10 and above.

komorebi allows you to control application windows, virtual workspaces and display monitors with a CLI which can be used with third-party software such as AutoHotKey to set user-defined keyboard shortcuts.

Translations of this document can be found in the project wiki:

Description

komorebi only responds to WinEvents and the messages it receives on a dedicated socket.

komorebic is a CLI that writes messages on komorebi's socket.

komorebi doesn't handle any keyboard or mouse inputs; a third party program (e.g. AutoHotKey) is needed in order to translate keyboard and mouse events to komorebic commands.

This architecture, popularised by bspwm on Linux and yabai on macOS, is outlined as follows:

     PROCESS                SOCKET
ahk  -------->  komorebic  <------>  komorebi

Design

komorebi is the successor to yatta and as such aims to build on the learnings from that project.

While yatta was primary an attempt to learn how to work with and call Windows APIs from Rust, while secondarily implementing a minimal viable tiling window manager for my own needs (largely single monitor, single workspace), komorebi has been redesigned from the ground-up to support more complex features that have become standard in tiling window managers on other platforms.

komorebi holds a list of physical monitors.

A monitor is just a rectangle of the available work area which contains one or more virtual workspaces.

A workspace holds a list of containers.

A container is just a rectangle where one or more application windows can be displayed.

This means that:

  • Every monitor has its own collection of virtual workspaces
  • Workspaces only know about containers and their dimensions, not about individual application windows
  • Every application window must belong to a container, even if that container only contains one application window
  • Many application windows can be stacked and cycled through in the same container within a workspace

Getting Started

GitHub Releases

Prebuilt binaries are available on the releases page in a zip archive. Once downloaded, you will need to move the komorebi.exe and komorebic.exe binaries to a directory in your Path ( you can see these directories by running $Env:Path.split(";") at a PowerShell prompt).

Alternatively, you may add a new directory to your Path using setx or the Environment Variables pop up in System Properties Advanced (which can be launched with SystemPropertiesAdvanced.exe at a PowerShell prompt), and then move the binaries to that directory.

Scoop

If you use the Scoop command line installer, you can run the following commands to install the binaries from the latest GitHub Release:

scoop bucket add komorebi https://github.com/LGUG2Z/komorebi-bucket
scoop install komorebi

If you install komorebi using Scoop, the binaries will automatically be added to your Path and a command will be shown for you to run in order to get started using the sample configuration file.

Building from Source

If you prefer to compile komorebi from source, you will need a working Rust development environment on Windows 10. The x86_64-pc-windows-msvc toolchain is required, so make sure you have also installed the Build Tools for Visual Studio 2019.

You can then clone this repo and compile the source code to install the binaries for komorebi and komorebic:

cargo install --path komorebi --locked
cargo install --path komorebic --locked

Running

Once you have either the prebuilt binaries in your Path, or have compiled the binaries from source (these will already be in your Path if you installed Rust with rustup, which you absolutely should), you can run komorebic start at a Powershell prompt, and you will see the following output:

Start-Process komorebi -WindowStyle hidden

This means that komorebi is now running in the background, tiling all your windows, and listening for commands sent to it by komorebic. You can similarly stop the process by running komorebic stop.

Configuring

Once komorebi is running, you can execute the komorebi.sample.ahk script to set up the default keybindings via AHK (the file includes comments to help you start building your own configuration).

If you have AutoHotKey installed and a komorebi.ahk file in your home directory (run $Env:UserProfile at a PowerShell prompt to find your home directory), komorebi will automatically try to load it when starting.

There is also tentative support for loading a AutoHotKey v2 files, if the file is named komorebi.ahk2 and the AutoHotKey64.exe executable for AutoHotKey v2 is in your Path. If both komorebi.ahk and komorebi.ahk2 files exist in your home directory, only komorebi.ahk will be loaded. An example of an AutoHotKey v2 configuration file for komorebi can be found here.

Common First-Time Tips

Floating Windows

Sometimes you will want a specific application to never be tiled, and instead float all the time. You add add rules to enforce this behaviour:

komorebic.exe float-rule title "Control Panel"
# komorebic.exe float-rule exe [EXE NAME]
# komorebic.exe float-rule class [CLASS NAME]

Windows Not Getting Managed

In some rare cases, a window may not automatically be registered to be managed by komorebi. When this happens, you can manually add a rule to force komorebi to manage it:

komorebic.exe manage-rule exe TIM.exe
# komorebic.exe manage-rule class [CLASS NAME]
# komorebic.exe manage-rule title [TITLE]

Tray Applications

If you are experiencing behaviour where closing a window leaves a blank tile, but minimizing the same window does not , you have probably enabled a 'close/minimize to tray' option for that application. You can tell komorebi to handle this application appropriately by identifying it via the executable name or the window class:

komorebic.exe identify-tray-application exe Discord.exe
# komorebic.exe identify-tray-application class [CLASS NAME]
# komorebic.exe identify-tray-application title [TITLE]

Configuration with komorebic

As previously mentioned, this project does not handle anything related to keybindings and shortcuts directly. I personally use AutoHotKey to manage my window management shortcuts, and have provided a sample komorebi.ahk AHK script that you can use as a starting point for your own.

You can run komorebic.exe to get a full list of the commands that you can use to customise komorebi and create keybindings with. You can run komorebic.exe --help to get a full explanation of the arguments required for each command.

start                         Start komorebi.exe as a background process
stop                          Stop the komorebi.exe process and restore all hidden windows
state                         Show a JSON representation of the current window manager state
log                           Tail komorebi.exe's process logs (cancel with Ctrl-C)
focus                         Change focus to the window in the specified direction
move                          Move the focused window in the specified direction
stack                         Stack the focused window in the specified direction
resize                        Resize the focused window in the specified direction
unstack                       Unstack the focused window
cycle-stack                   Cycle the focused stack in the specified cycle direction
move-to-monitor               Move the focused window to the specified monitor
move-to-workspace             Move the focused window to the specified workspace
send-to-monitor               Send the focused window to the specified monitor
send-to-workspace             Send the focused window to the specified workspace
focus-monitor                 Focus the specified monitor
focus-workspace               Focus the specified workspace on the focused monitor
new-workspace                 Create and append a new workspace on the focused monitor
adjust-container-padding      Adjust container padding on the focused workspace
adjust-workspace-padding      Adjust workspace padding on the focused workspace
change-layout                 Set the layout on the focused workspace
flip-layout                   Flip the layout on the focused workspace (BSP only)
promote                       Promote the focused window to the top of the tree
retile                        Force the retiling of all managed windows
ensure-workspaces             Create at least this many workspaces for the specified monitor
container-padding             Set the container padding for the specified workspace
workspace-padding             Set the workspace padding for the specified workspace
workspace-layout              Set the layout for the specified workspace
workspace-tiling              Enable or disable window tiling for the specified workspace
workspace-name                Set the workspace name for the specified workspace
toggle-pause                  Toggle the window manager on and off across all monitors
toggle-tiling                 Toggle window tiling on the focused workspace
toggle-float                  Toggle floating mode for the focused window
toggle-monocle                Toggle monocle mode for the focused container
toggle-maximize               Toggle native maximization for the focused window
restore-windows               Restore all hidden windows (debugging command)
manage                        Force komorebi to manage the focused window
unmanage                      Unmanage a window that was forcibly managed
reload-configuration          Reload ~/komorebi.ahk (if it exists)
watch-configuration           Enable or disable watching of ~/komorebi.ahk (if it exists)
float-rule                    Add a rule to always float the specified application
manage-rule                   Add a rule to always manage the specified application
workspace-rule                Add a rule to associate an application with a workspace
identify-tray-application     Identify an application that closes to the system tray
focus-follows-mouse           Enable or disable focus follows mouse for the operating system
toggle-focus-follows-mouse    Toggle focus follows mouse for the operating system
ahk-library                   Generate a library of AutoHotKey helper functions
help                          Print this message or the help of the given subcommand(s)

AutoHotKey Helper Library for komorebic

Additionally, you may run komorebic.exe ahk-library to generate a helper library for AutoHotKey which wraps every komorebic command in a native AHK function.

If you include the generated library at the top of your ~/komorebi.ahk configuration file, you will be able to call any of the functions that it contains. A sample AHK script that shows how this library can be used is available here.

Features

  • Multi-monitor
  • Virtual workspaces
  • Window stacks
  • Cycle through stacked windows
  • Change focused window by direction
  • Move focused window container in direction
  • Move focused window container to monitor and follow
  • Move focused window container to workspace follow
  • Send focused window container to monitor
  • Send focused window container to workspace
  • Mouse follows focused container
  • Resize window container in direction
  • Resize child window containers by split ratio
  • Mouse drag to swap window container position
  • Mouse drag to resize window container
  • Configurable workspace and container gaps
  • BSP tree layout
  • Flip BSP tree layout horizontally or vertically
  • Equal-width, max-height column layout
  • Floating rules based on exe name, window title and class
  • Workspace rules based on exe name and window class
  • Additional manage rules based on exe name and window class
  • Identify 'close/minimize to tray' applications by exe name and class
  • Toggle floating windows
  • Toggle monocle window
  • Toggle native maximization
  • Toggle focus follows mouse
  • Toggle automatic tiling
  • Pause all window management
  • Load configuration on startup
  • Manually reload configuration
  • Watch configuration for changes
  • Helper library for AutoHotKey
  • View window manager state

Development

If you would like to contribute code to this repository, there are a few requests that I have to ensure a foundation of code quality, consistency and commit hygiene:

  • Flatten all use statements
  • Run cargo +nightly clippy and ensure that all lints and suggestions have been addressed before committing
  • Run cargo +nightly fmt --all to ensure consistent formatting before committing
  • Use git cz with the Commitizen CLI to prepare commit messages
  • Provide at least one short sentence or paragraph in your commit message body to describe your thought process for the changes being committed

If you use IntelliJ, you should enable the following settings to ensure that code generated by macros is recognised by the IDE for completions and navigation:

  • Set Expand declarative macros to Use new engine under "Settings > Langauges & Frameworks > Rust"
  • Enable the following experimental features:
    • org.rust.cargo.evaluate.build.scripts
    • org.rust.macros.proc

Logs and Debugging

Logs from komorebi will be appended to ~/komorebi.log; this file is never rotated or overwritten, so it will keep growing until it is deleted by the user.

Whenever running the komorebic stop command or sending a Ctrl-C signal to komorebi directly, the komorebi process ensures that all hidden windows are restored before termination.

If however, you ever end up with windows that are hidden and cannot be restored, a list of window handles known to komorebi are stored and continuously updated in ~/komorebi.hwnd.json.

Restoring Windows

Running komorebic restore-windows will read the list of window handles and forcibly restore them, regardless of whether the main komorebi process is running.

Panics and Deadlocks

If komorebi ever stops responding, it is most likely either due to either a panic or a deadlock. In the case of a panic, this will be reported in the log. In the case of a deadlock, there will not be any errors in the log, but the process and the log will appear frozen.

If you believe you have encountered a deadlock, you can compile komorebi with --features deadlock_detection and try reproducing the deadlock again. This will check for deadlocks every 5 seconds in the background, and if a deadlock is found, information about it will appear in the log which can be shared when opening an issue.

Window Manager State and Integrations

The current state of the window manager can be queried using the komorebic state command, which returns a JSON representation of the State struct, which includes the current state of WindowManager.

This may also be polled to build further integrations and widgets on top of (if you ever wanted to build something like Stackline for Windows, you could do it by polling this command).

Comments
  • Feature request: tabbed columns

    Feature request: tabbed columns

    My eyesight isn't what used to be and I'm using 125% scaling with lots of zoom and headed for 150%. Therefore I end up with full height columns 99% of the time. Is it possible to get tab support for columns like i3? Ideally, the next window would open in a new tab in the adjacent column to avoid obscuring the active window.

    enhancement help wanted good first issue 
    opened by restfuladi 22
  • Komorebi is not launching

    Komorebi is not launching

    I installed komorebi on Windows 10 withScoop.

    When I start the application with komorebic start I get the following output which seems normal: Start-Process komorebi.exe -WindowStyle hidden

    However, I do not observe any automatic tiling

    When I execute the commands komorebic state and komorebic stop, I get the same following output:

    Error: No connection could be made because the target machine actively refused it. (os error 10061)
    
    Location:
        /rustc/c8dfcfe046a7680554bf4eb612bad840e7631c4b\library\core\src\result.rs:1897:27
    

    Is there something that I missed in the installation process?

    Thank you for this great project!

    opened by Lap1n 21
  • Manage rules and tray settings do not work for certain application

    Manage rules and tray settings do not work for certain application

    Hi,

    thanks for this great project, which made me finally enjoy windows :)

    I've got this application which is always started on my working laptop and resides in the system tray.

    First weird thing was, that this app appeared as a tile when starting komorebi, although I did never open it. Whats even more confusing: if I open the same application from the tray icon, I see some other window (other contents). But the window that komorebi starts managing, I've never seen it.

    First I tried to apply the float-rule for this Window via title, exe and class (by using ahk spy), it did not work. Then I tried to specify this is a app that closes to tray, but that did not help either.

    The only thing I noticed is that this window which gets tiled, it only has the "close" (x) icon at the top right (and the icon does look a bit different then normal windows close/minimize/maximize icons). Other then that, the class also looks unusual: WindowsForms10.Window.8.app.0.878ded_r6_ad1

    Do you have an idea why this is happening?

    bug 
    opened by JSamir 14
  • Displaying which workspace is active

    Displaying which workspace is active

    Hi, This project looks like the best implementation of a windows tiling wm!

    Is there a way to display what workspace is active on every monitor? Maybe a tray icon of some sort?

    wontdo 
    opened by AmitGolden 12
  • [BUG]: Komorebi acts flakey when monitors are disconnected and reconnected

    [BUG]: Komorebi acts flakey when monitors are disconnected and reconnected

    Describe the bug When monitors are removed from the system while komorebi is running, some managed windows become effectively unmanaged with no way to get them back, and various errors appear in the logs whenever the user focuses the affected windows. Restarting the komorebi process seems to be the only fix.

    Example error messages from the log:

    2022-10-17T16:04:29.549311Z  INFO process_event{event=FocusChange(SystemForeground, Window { hwnd: 724144 })}:focus_monitor{idx=3}: komorebi::window_manager: focusing monitor
    2022-10-17T16:04:29.556092Z ERROR komorebi::process_event: there is no container/window
    [...]
    2022-10-17T16:04:30.795482Z  INFO process_event{event=FocusChange(SystemForeground, Window { hwnd: 68272 })}: komorebi::process_event: processed: (hwnd: 68272, title: [...] - Discord, exe: Discord.exe, class: Chrome_WidgetWin_1)
    2022-10-17T16:04:30.804651Z ERROR komorebi::process_event: there is no monitor associated with this window, it may have already been destroyed
    [...]
    2022-10-17T16:04:30.836448Z  INFO process_event{event=FocusChange(SystemForeground, Window { hwnd: 265088 })}:focus_monitor{idx=0}: komorebi::window_manager: focusing monitor
    2022-10-17T16:04:30.837119Z ERROR komorebi::process_event: there is no container/window
    

    To Reproduce Steps to reproduce the behavior:

    1. Start komorebi with multiple monitors connected. Place some windows on each monitor.
    2. Disconnect or power off one or more monitors. It may be important that they are DisplayPort monitors (not HDMI/VGA/DVI) because this causes Windows to remove the monitors from display settings.
    3. Some windows now appear to become unmanaged by Komorebi, with no way to bring them back under management (retiling doesn't help).
    4. Reconnect the disconnected monitor(s). The affected windows are still not managed properly. The only fix seems to be stopping and re-starting the komorebi process.

    Another way to reproduce this is to begin with a laptop plugged into a docking station that has multiple monitors connected to it. Start komorebi like normal, then disconnect the laptop from the dock. Window management is now all messed up, and stays that way even if you reconnect the laptop to the dock.

    Expected behavior Komorebi should gracefully handle the loss and/or introduction of monitor(s) while running. Its behavior should be approximately equivalent to running komorebic stop; komorebic start after each connection/disconnection of a monitor.

    Operating System

    OS Name:                   Microsoft Windows 10 Pro
    OS Version:                10.0.19044 N/A Build 19044
    
    bug 
    opened by maxbane 11
  • Handle wslg windows

    Handle wslg windows

    In recent WSL2 stuff, you can use WSLg to have UI support out of the box. Sadly these windows are currently completely not managed by komorebi (they stay on the screen regardless of the desktop and they float).

    That's the window info from AHK Window Spy.

    Untitled File 1 - gedit (Arch)
    ahk_class RAIL_WINDOW
    ahk_exe mstsc.exe
    ahk_pid 15564
    

    (it's similar to #52 )

    enhancement 
    opened by pigmej 10
  • High CPU usage

    High CPU usage

    I found it out today, that running komorebi consumes 13% of one CPU core constantly.

    Not sure how could I debug it any further. In the logs, there is nothing suspicious.

    How could I help debugging that further?

    performance 
    opened by pigmej 10
  • Feature request: Focus on monitor if there are no more apps left to focus

    Feature request: Focus on monitor if there are no more apps left to focus

    Hello, I just wanna say thanks to creating your twm. Makes dealing with Windows a bit better.

    I was wondering whether it's currently possible or not to be able to focus on a monitor if there are no more apps in the specified direction but there is a monitor.

    For example, say we had 2 monitors M1 and M2 that are next to each other. M1 is on the left and M2 is on the right. Then say we had two apps A1 and A2. A1 is in M1 and A2 is in M2.

    If A1 is currently focused, then when I try to focus right I would like to focus on A2 which is in M2.

    enhancement help wanted good first issue 
    opened by jrmallorca 9
  • Allow to cycle windows in native maximize/native fullscreen mode

    Allow to cycle windows in native maximize/native fullscreen mode

    Hi,

    as someone coming from dwm, I miss one "feature" very much: being able to cycle through open windows even if they are maximized/fullscreen.

    I got used to having the "regular" layout (vertical-stack) only for getting an "overview" over all the open windows on this workspace (so called tag in dwm), usually having only one window on the screen.

    To accomplish this in dwm, I used to

    • either switch to the monocle layout to have only the window and the bar visible
    • or switch to the monocle layout and toggle off the bar to have only this window visible

    With komorebi, to accomplish the same, I use

    • toggle-maximize to have only the window and the task bar visible
    • Send {F11} to use native fullscreen which "removes" the task bar

    For both of those, I would like to be able to use cycle-focus to switch between windows on this workspace but keeping the focused (switched-to) window maximized/native-fullscreened.

    Not sure if possible, but this would be a great enhancement for me.

    ps: right now, if I try to cycle-focues while the current window is maximized, this just "shows" the next window at it's place in the vertical-stack. If I cycle often enough, then the maximized window is shown maximized in the background and all of the windows from the stack are shown "above" it and from that point on I can only cycle with the windows from the stack and cannot return to the maximized window. If this had some kind of konsisten behavior with the option to come back to the maximized window or immeadeately make the current window from the stack maximized, I think I could also arrange with this.

    enhancement 
    opened by JSamir 9
  • Handle X410 windows

    Handle X410 windows

    Let's say that you use WSL2 & x410 combo in windowed apps mode. Then window will be created in a form of:

    Untitled File 1 - gedit
    ahk_class X410_XAppWin
    ahk_exe X410.exe
    ahk_pid 1456
    

    Currently, that window seems to be completely unmanaged by komorebi. I was wondering if it's possible to manage it. It works with "normal" window snap to XYZ thingy. x410 docu about it states: https://x410.dev/news/want-to-snap-gnome-apps-to-your-screen-edges-like-windows-apps-get-the-new-x410-version-2-9-3/

    Afair it was working fine in actual virtual desktops by actualtools.

    enhancement 
    opened by pigmej 9
  • Microsoft Outlook

    Microsoft Outlook

    Thanks very much for Komorebi.

    I am having an issue with MS Outlook windows that hang around after being closed. If I open an email or calendar in a new window, closing that new window does not seem to be recognised by Komorebi.

    I've tried using the workarounds suggested for other MS Office apps, but they don't seem to help.

    Please let me know if I can provide any details for debugging.

    opened by hughwilliams94 8
  • [FEAT]: Use Autohotkey v2 by default

    [FEAT]: Use Autohotkey v2 by default

    Is your feature request related to a problem? Please describe. Since Autohotkey v2 has reached stable, it might be a good time to migrate completely to v2.

    Describe the solution you'd like

    Make komorebi use AutoHotkey v2 by default. To do that:

    • Migrate the sample config, helper library, and ahk-asc to v2
    • Generate v2 syntax by default. For compatibility with v1, add a flag in the ahk-library and ahk-asc commands to generate v1 syntax instead.
    • Merge $Env:KOMOREBI_AHK_V1_EXE and $Env:KOMOREBI_AHK_V2_EXE to a single $Env:KOMOREBI_AHK_EXE (either v1 or v2).
    • Remove .ahk2 and just have a single komorebi.ahk file (either v1 or v2). Autohotkey v2 has a launcher script where it can detect the version of the running script and run the appropriate interpreter for it. image The behavior can be configured in the settings: image It would be good for komorebi to make use of it.

    Describe alternatives you've considered None.

    Additional context Related to #10

    enhancement 
    opened by sitiom 2
  • chore(deps): bump goreleaser/goreleaser-action from 3 to 4

    chore(deps): bump goreleaser/goreleaser-action from 3 to 4

    Bumps goreleaser/goreleaser-action from 3 to 4.

    Release notes

    Sourced from goreleaser/goreleaser-action's releases.

    v4.0.0

    What's Changed

    Full Changelog: https://github.com/goreleaser/goreleaser-action/compare/v3...v4.0.0

    v3.2.0

    What's Changed

    • chore: remove workaround for setOutput by @​crazy-max (#374)
    • chore(deps): bump @​actions/core from 1.9.1 to 1.10.0 (#372)
    • chore(deps): bump yargs from 17.5.1 to 17.6.0 (#373)

    Full Changelog: https://github.com/goreleaser/goreleaser-action/compare/v3.1.0...v3.2.0

    v3.1.0

    What's Changed

    • fix: dist resolution from config file by @​crazy-max (#369)
    • ci: fix workflow by @​crazy-max (#357)
    • docs: bump actions to latest major by @​crazy-max (#356)
    • chore(deps): bump crazy-max/ghaction-import-gpg from 4 to 5 (#360)
    • chore(deps): bump ghaction-import-gpg to v5 (#359)
    • chore(deps): bump @​actions/core from 1.6.0 to 1.8.2 (#358)
    • chore(deps): bump @​actions/core from 1.8.2 to 1.9.1 (#367)

    Full Changelog: https://github.com/goreleaser/goreleaser-action/compare/v3.0.0...v3.1.0

    Commits
    • 8f67e59 chore: regenerate
    • 78df308 chore(deps): bump minimatch from 3.0.4 to 3.1.2 (#383)
    • 66134d9 Merge remote-tracking branch 'origin/master' into flarco/master
    • 3c08cfd chore(deps): bump yargs from 17.6.0 to 17.6.2
    • 5dc579b docs: add example when using workdir along with upload-artifact (#366)
    • 3b7d1ba feat!: remove auto-snapshot on dirty tag (#382)
    • 23e0ed5 fix: do not override GORELEASER_CURRENT_TAG (#370)
    • 1315dab update build
    • b60ea88 improve install
    • 4d25ab4 Update goreleaser.ts
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies github_actions 
    opened by dependabot[bot] 1
  • [BUG]: Windows snipping tool doesn't fill space

    [BUG]: Windows snipping tool doesn't fill space

    Describe the bug windows snipping tool doesn't fill space

    To Reproduce Steps to reproduce the behavior:

    1. take screen shot on windows using cmd + shift + s
    2. observe

    Expected behavior Windows snipping tool to fill space

    bug 
    opened by adgower 0
  • [BUG]: Microsoft store links don't open and fill space

    [BUG]: Microsoft store links don't open and fill space

    Describe the bug Microsoft store doesn't fill space

    To Reproduce Steps to reproduce the behavior:

    1. Click a microsoft store link in browser
    2. Observe that it doesn't fill space

    Expected behavior window will fill the space

    Operating System windows 11

    bug 
    opened by adgower 0
  • [FEAT]: move/send to cycle dirction

    [FEAT]: move/send to cycle dirction

    Is your feature request related to a problem? Please describe. I want to send a window to the workspace to my left/right, without knowing what number it has. I use an ad-hoc approach to workspaces, rather than a rigid "1 is for browsing, 2 is for …etc"

    Describe the solution you'd like Allow move commands to accept "next" and "previous"

    Describe alternatives you've considered Cyling, getting the number, cycling back, moving to number (awful and slow)

    enhancement 
    opened by BlueDrink9 1
  • [FEAT]: whitelist support to make windows unmanaged by default

    [FEAT]: whitelist support to make windows unmanaged by default

    Is your feature request related to a problem? Please describe. For users not enthusiastic to dynamic tilling every window, to be able making windows unmanaged by default is really useful.

    Describe the solution you'd like Provide a toggle to make windows unmanaged by default, and the user can use manage-rule to whitelist the windows who needs to be dynamic tiled.

    Additional context I accomplished this somehow after digging into https://github.com/LGUG2Z/komorebi/blob/57b1bc1414bb6b339abc8167e50c30c49e2bbd06/komorebi/src/window.rs#L392 with autohotkey script like:

    ; make all window unmanaged unless whitelisted with rules
    Run, komorebic.exe float-rule class "", , Hide
    ; for whitelisting see komorebi/src/window.rs: must use same property(class here) to override float-rule
    ; whitelist vscode
    Run, komorebic.exe manage-rule class "Chrome_WidgetWin_1", , Hide
    ; whitelist firefox
    Run, komorebic.exe manage-rule class "MozillaWindowClass", , Hide
    ; whitelist windows terminal
    Run, komorebic.exe manage-rule class "CASCADIA_HOSTING_WINDOW_CLASS", , Hide
    
    enhancement 
    opened by tsingakbar 0
Releases(v0.1.14)
Owner
Jade (جاد)
Carly Rae Jepsen fanboy
Jade (جاد)
skyWM is an extensible tiling window manager written in Rust

skyWM is an extensible tiling window manager written in Rust. skyWM has a clear and distinct focus adhering to the KISS and Unix philosophy.

Chadano 74 Dec 28, 2022
skyWM is an extensible tiling window manager written in Rust

skyWM is an extensible tiling window manager written in Rust. skyWM has a clear and distinct focus adhering to the KISS and Unix philosophy.

Orbital 76 Apr 22, 2023
A floating, tag-based window manager written in Rust

worm worm is a floating, tag-based window manager for X11. It is written in the Rust programming language, using the X11RB library. Install cargo buil

null 627 Jan 4, 2023
A window manager coded in rust

Tailwin A window manager coded in rust Thanks Victoruler for making the logo under a cc-by licence.

Arthur Melton 3 Jul 27, 2022
بو النوافذ is a personal Window manager

عربي؟ كمل قراءة بالعربي (لهجة سعودية). Bunnuafeth | بو النوافذ Bunnuafeth is a personal Window manager written in Rust General philosophy This window

Salman Abuhaimed 4 Oct 4, 2023
Send Windows 10 styled notifications on Windows 7.

win7-notifications Send Windows 10 styled notifications on Windows 7. Note: This crate requires a win32 event loop to be running, otherwise the notifi

Tauri 9 Aug 29, 2022
A cross-platform Mod Manager for RimWorld intended to work with macOS, linux and Windows

TODOs are available here. Discussions, PRs and Issues are open for anyone who is willing to contribute. rrm Inspired by Spoons rmm. This is a cross-pl

Alejandro Osornio 7 Sep 5, 2022
A window swallower for swaywm

swayhide - A window swallower for sway Description swayhide hides the currently active terminal (by moving it to the scratchpad), then it executes the

NomisIV 47 Dec 14, 2022
D3D9 Window overlay written in Rust

win-overlay (-rs) DirectX overlay written in Rust for various projects, wanted to easily create overlays across projects so decided to write my own im

Zor 18 Dec 28, 2022
Provides event handling for egui in SDL2 window applications.

egui-sdl2-event Provides event handling for egui when SDL2 is used as the windowing system. This crate does not perform any rendering, but it can be c

Valtteri Vallius 8 Feb 15, 2023
OS-native file dialogs on Linux, OS X and Windows

nfd-rs nfd-rs is a Rust binding to the library nativefiledialog, that provides a convenient cross-platform interface to opening file dialogs on Linux,

Saurav Sachidanand 152 Nov 9, 2022
Rust docs for the Windows API

Windows API documentation for Rust This is an experimental documentation generator for the Rust for Windows project. The documentation is published he

Microsoft 52 Dec 9, 2022
A small tool to use along with i3/Sway to add CSS-powered decorations to your focused windows, for better usability.

glimmer What A tool for decorating i3 windows when they get focused, written in Rust. classic.mp4 Why When using i3-gaps I ran into the following prob

Daniel Acuña 26 Dec 17, 2022
Tiny library for handling rust strings in windows.

tinywinstr Tiny library for handling rust strings in windows.

Ed Way 1 Oct 25, 2021
OS native dialogs for Windows, MacOS, and Linux

?? nfd2 nfd2 is a Rust binding to the nativefiledialog library, that provides a convenient cross-platform interface to opening file dialogs on Windows

Embark 33 May 15, 2022
A light windows GUI toolkit for rust

Native Windows GUI Welcome to Native Windows GUI (aka NWG). A rust library to develop native GUI applications on the desktop for Microsoft Windows. NW

Gabriel Dube 1.6k Jan 7, 2023
Winsafe-examples - Examples of native Windows applications written in Rust with WinSafe.

WinSafe examples This repo contains several examples of native Win32 applications written in Rust with WinSafe. All examples follow the same program s

Rodrigo 40 Dec 14, 2022
⚡ A blazing fast alternative to the default Windows delete.

Turbo Delete A blazing fast alternative to the default Windows delete. Turbodelete is a blazing fast alternative to the default Windows delete functio

Tejas Ravishankar 165 Dec 4, 2022
Vibe - a library for acrylic/vibrancy effects for Electron on Windows 10/11

vibe is a library for acrylic/vibrancy effects for Electron on Windows 10/11. Any Electron version compatible with N-API v6 (Electron v11+) is supported.

pyke 23 Dec 14, 2022