mirror of
https://github.com/LGUG2Z/komorebi.git
synced 2026-01-11 14:40:25 +01:00
[BUG]: Preserve floating layer when moving/focusing windows across monitors #695
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @snasir-dev on GitHub (Nov 4, 2025).
Summary
Hi, I have come across Komorebi, and I have really loving this amazing peice of software. Thank you and all the contributors for creating such an amazing product.
I have come across this issue that I am stuck on and I would like to request help regarding if there is any possible solution or workaround to fix it. Any help would be greatly appreciated.
I would like the ability to move any focused window, to any other monitor, where it respects the type of window it is "floating" or "tiling" window.
The behavior I wanted was similar to the behavior you see in these commands:
komorebic focus down/up -> when it goes to the other monitor (this behavior occurs when it can no longer go up or down in the current windows, then goes to the next monitor), it ALWAYS RESPECTS if the window is in tiling mode or not - This is the exact sort of behavior I want
komorebic komorebic focus-workspace -> This command when switching workspaces ALWAYS RESPECTS if the workspace that you focus is already in "floating" mode or "tiling" and does not revert it.
However, If I try to use any of these commands, they DO NOT respect the "floating" layer, and always revert it back to the "Tiling" layer. This causes it to always UNFOCUS any "floating" focused window I would move to another monitor because the floating layer is no longer active.
Trying to use any of these commands, they DO NOT respect the "floating" layer, and always revert it back to the "Tiling" layer
I would like the ability to do a few things
Trying to do following command always swithes it to "Tiling" layer even if that workspace was in "Floating" Layer
alt + shift + d : komorebic cycle-monitor next;
If the monitor that is switched to is already in "Floating" Layer, it should not revert it back to "Tiling" Layer.
I also have a command that lets me very easily send the focused window to the other monitor in a given workspace:
This works great for any focused window that is not a "floating" window. when pressing alt + shift + 2 for example it will send it to my other monitor in the 2nd workspace. Pressing it again would send it back to my previous monitor in workspace 2.
However, if I try do to run these commands if the focused window is a "floating" window, it will first move the focused window to the other monitor, then it will force "Tiling" Layer, which will cause the floating window I just moved to lose focus which would then make it unable to move that tiling focused window to the specified workspace I had wanted. It would just be stuck on the exact workspace the other monitor was at. If the monitor I wanted to move the tiling window was at workspace 1 and I pressed ALT+SHIFT+3 wanting to send a tiling window to that monitor for workspace 3, it would not work. Instead, it would focus the monitor I moved the window to, change it to Tiling mode, and then not move to workspace 3.
Major issue with forcing "Tiling" Layer
There is a major reason why always forcing to "Tiling" Layer is a major issue. Anytime we switch back from "Floating" layer to "Tiling" Layer, it does not retain the order of which floating windows were most recently focused. Rather it always defaults to the order in which floating windows were added (when using the komorebic cycel-focus <previous/next> commands).
Example:
I float following windows in order
Say I want to then use Notion for referencing my notes repteadly and quickly switch between Tiling layer and floating layer. Anytime I switch to tiling layer and see a pdf or do anything then go back to "Floating" Layer, it would not show me Notion as the first window, rather it would show me Notepad, then file explorer, then notepad++ then notion.
When using following commands to move between floating windows:
alt + u : komorebic cycle-focus previous
alt + shift + u : komorebic cycle-focus next
Two things to note, komorebic cycle-focus next gets bugged where it won't let you move past first window, so you are forced to use komorebic cycle-focus previous to switch between the windows.
The behavior here is not consistent with moving floating windows with
komorebic focus left/right/up/down
Which actually retains the exact window when you switch between layers. Cycle-focus does not. Reason I would prefer using cycle-focus is because it ensures I never get out of tiling mode and stay within the same workspace. Using "komorebic focus " command makes it so I feel like I lose control and sometimes it goes to a different monitor or a different workspace especially when windows are overlapping and in different sizes, cycel-focus command ensures it will never focus another monitor or go to a different workspace, but never retains the behavior of when coming back to the tiling layer, to keep the exact same floating window you were previously on.
Here is a video example. I am not sure how to create a video for two monitors, so the monitor you see is the window where I am going to move my focused-window to.
https://github.com/user-attachments/assets/8c0e1863-2000-43ca-8143-f45f03445112
I run command "komorebic cycle-move-to-monitor next; komorebic move-to-workspace 1; Start-Sleep -Milliseconds 150; komorebic retile;" where my focused window was a WARP terminal application.
The monitor you see where I will move to is at the start in floating layer, however, the moment komorebic cycle-move-to-monitor next runs it will automatically change it to tiling layer. Then triggering floating layer, it will not immediately focus the Warp Terminal that w
It is a bit confusing to show, but the moment you see the adobe pdf, is when the window was moved, it auto changed from the floating window mode to the tiling mode.
I believe what should happen is that instead of it going to tiling mode, it should immediately just put warp at the front focused and remain in floating mode.
I just want to know how the following can happen
If I move any Floating window to another monitor with cycle-move-to-monitor, how can it retain floating layer in that monitor instead of it always defaulting to tiling layer.
If I focus another monitor with cycle-monitor, how can it respect whatever layer that workspace window is on, floating or tiling without it always forcing it into tiling layer.
Version Information
OS Name/Version:
Edition Windows 10 Home
Version 22H2
Installed on 11/20/2020
OS Build 19045.6456
=============
komorebi Version:
komorebic 0.1.38
tag:v0.1.38
commit_hash:ffa76ea2
build_time:2025-09-13 18:40:25 +00:00
build_env:rustc 1.89.0 (29483883e 2025-08-04),stable-x86_64-pc-windows-msvc
Komorebi Configuration
Hotkey Configuration
.shell powershell
alt + o : taskkill /f /im whkd.exe; Start-Process whkd -WindowStyle hidden
alt + shift + o : komorebic reload-configuration
alt + oem_comma : komorebic toggle-shortcuts
alt + j : komorebic focus left
alt + k : komorebic focus down
alt + i : komorebic focus up
alt + l : komorebic focus right
alt + shift + j : komorebic move left
alt + shift + k : komorebic move down
alt + shift + i : komorebic move up
alt + shift + l : komorebic move right
alt + shift + return : komorebic promote
ctrl + alt + j : komorebic stack left
ctrl + alt + k : komorebic stack down
ctrl + alt + i : komorebic stack up
ctrl + alt + l : komorebic stack right
alt + h : komorebic stack-all
alt + shift + h : komorebic unstack-all
alt + a : komorebic focus-monitor-at-cursor; komorebic cycle-stack previous
alt + s : komorebic focus-monitor-at-cursor; komorebic cycle-stack next
alt + shift + a : komorebic focus-monitor-at-cursor; komorebic unstack
alt + oem_4 : komorebic cycle-stack-index previous
alt + oem_6 : komorebic cycle-stack-index next
alt + oem_plus : 1..4 | ForEach-Object { komorebic resize-axis horizontal increase }
alt + oem_minus : komorebic resize-axis horizontal decrease
alt + shift + oem_plus : 1..3 | ForEach-Object { komorebic resize-axis vertical increase }
alt + shift + oem_minus : komorebic resize-axis vertical decrease
alt + q : if (Get-Process -Name "masir" -ErrorAction SilentlyContinue) { taskkill /f /im masir.exe }; Start-Process masir -WindowStyle Hidden; Start-Sleep -Milliseconds 400; taskkill /f /im masir.exe;
alt + shift + q : komorebic close
alt + n : komorebic minimize
alt + shift + n : komorebic restore-windows
alt + m : komorebic manage
alt + shift + m : komorebic unmanage
alt + e : komorebic toggle-float;
alt + shift + e : komorebic focus-monitor-at-cursor; komorebic toggle-workspace-layer;
alt + t : komorebic toggle-float-override
alt + f : komorebic toggle-maximize
alt + shift + f : komorebic toggle-monocle
alt + shift + r : komorebic retile
alt + oem_period : komorebic stop --whkd --bar; Start-Sleep -Milliseconds 150; komorebic start --whkd --bar
alt + p : komorebic toggle-pause
alt + x : komorebic flip-layout horizontal
alt + y : komorebic flip-layout vertical
alt + shift + y : komorebic cycle-layout next
alt + shift + x : komorebic cycle-layout previous
lwin + shift + right : komorebic cycle-move-to-monitor next
lwin + up : komorebic cycle-monitor next
lwin + down : komorebic cycle-monitor previous
lwin + shift + down : komorebic cycle-workspace previous
lwin + shift + up : komorebic cycle-workspace next
alt + u : komorebic cycle-focus previous
alt + shift + u : komorebic cycle-focus next
alt + d : komorebic focus-monitor-at-cursor; komorebic focus-last-workspace
alt + shift + d : komorebic cycle-monitor next;
alt + 1 : komorebic focus-monitor-at-cursor; komorebic focus-workspace 0
alt + 2 : komorebic focus-monitor-at-cursor; komorebic focus-workspace 1
alt + 3 : komorebic focus-monitor-at-cursor; komorebic focus-workspace 2
alt + 4 : komorebic focus-monitor-at-cursor; komorebic focus-workspace 3
alt + 5 : komorebic focus-monitor-at-cursor; komorebic focus-workspace 4
alt + 6 : komorebic focus-monitor-at-cursor; komorebic focus-workspace 5
alt + 7 : komorebic focus-monitor-at-cursor; komorebic focus-workspace 6
alt + 8 : komorebic focus-monitor-at-cursor; komorebic focus-workspace 7
lwin + 1 : komorebic focus-workspaces 0
lwin + 2 : komorebic focus-workspaces 1
lwin + 3 : komorebic focus-workspaces 2
lwin + 4 : komorebic focus-workspaces 3
lwin + 5 : komorebic focus-workspaces 4
lwin + 6 : komorebic focus-workspaces 5
lwin + 7 : komorebic focus-workspaces 6
lwin + 8 : komorebic focus-workspaces 7
ctrl + shift + 1 : komorebic focus-monitor-at-cursor; komorebic move-to-workspace 0
ctrl + shift + 2 : komorebic focus-monitor-at-cursor; komorebic move-to-workspace 1
ctrl + shift + 3 : komorebic focus-monitor-at-cursor; komorebic move-to-workspace 2
ctrl + shift + 4 : komorebic focus-monitor-at-cursor; komorebic move-to-workspace 3
ctrl + shift + 5 : komorebic focus-monitor-at-cursor; komorebic move-to-workspace 4
ctrl + shift + 6 : komorebic focus-monitor-at-cursor; komorebic move-to-workspace 5
ctrl + shift + 7 : komorebic focus-monitor-at-cursor; komorebic move-to-workspace 6
ctrl + shift + 8 : komorebic focus-monitor-at-cursor; komorebic move-to-workspace 7
alt + shift + 1 : komorebic cycle-move-to-monitor next; komorebic move-to-workspace 0; Start-Sleep -Milliseconds 150; komorebic retile;
alt + shift + 2 : komorebic cycle-move-to-monitor next; komorebic move-to-workspace 1; Start-Sleep -Milliseconds 150; komorebic retile;
alt + shift + 3 : komorebic cycle-move-to-monitor next; komorebic move-to-workspace 2; Start-Sleep -Milliseconds 150; komorebic retile;
alt + shift + 4 : komorebic cycle-move-to-monitor next; komorebic move-to-workspace 3; Start-Sleep -Milliseconds 150; komorebic retile;
alt + shift + 5 : komorebic cycle-move-to-monitor next; komorebic move-to-workspace 4; Start-Sleep -Milliseconds 150; komorebic retile;
alt + shift + 6 : komorebic cycle-move-to-monitor next; komorebic move-to-workspace 5; Start-Sleep -Milliseconds 150; komorebic retile;
alt + shift + 7 : komorebic cycle-move-to-monitor next; komorebic move-to-workspace 6; Start-Sleep -Milliseconds 150; komorebic retile;
alt + shift + 8 : komorebic cycle-move-to-monitor next; komorebic move-to-workspace 7; Start-Sleep -Milliseconds 150; komorebic retile;
alt + z : if ($(komorebic query focused-monitor-index) -eq 0) { komorebic swap-workspaces-with-monitor 1 } else { komorebic swap-workspaces-with-monitor 0 }
Output of komorebic check
komorebic check
KOMOREBI_CONFIG_HOME detected: C:\Users\Syed.config\komorebi
Looking for configuration files in C:\Users\Syed.config\komorebi
Found komorebi.json; this file can be passed to the start command with the --config flag
"focus_follows_mouse" is now end-of-life
End-of-life features will not receive any further bug fixes or updates; they should not be used
Found C:\Users\Syed.config\komorebi\whkdrc; key bindings will be loaded from here when whkd is started, and you can start it automatically using the --whkd flag