[BUG]: commands focus and cycle-focus behave differently
Summary
It may be a bug or an inconsistency in the description. Both commands have similar descriptions but behave differently:
focus - Change focus to the window in the specified directionwhere focus left/right jumps between the monitors
cycle-focus - Change focus to the window in the specified cycle directionwhere cycle-focus next/previous cycle only within the current monitor
If I want to change focus from window a on monitor 1 to window c on monitor 2, I need to use cycle-monitor next + cycle-focus next or a similar combination of two commands.
focus right jumps between monitors, and I can change focus from monitor 1 to window b on monitor 2, but to get to window c, I additionally need to use focus down
1 2
+------+------+ +-------+-----+
| | | | b |
| a | | a +-----+
| | | | c |
+------+------+ +-------+-----+It may not sound like such a big problem, but it drives me crazy. When switching focus between windows on different monitors, I don't want to think in terms of up/down/left/right, but rather as next and previous. That's why the best solution for me would be cycling + jumping between monitors.
Version Information
komorebic 0.1.40 tag:v0.1.40 commit_hash:bed314b8 build_time:2026-02-14 21:08:01 +00:00 build_env:rustc 1.93.1 (01f6ddf75 2026-02-11),stable-x86_64-pc-windows-msvc
Komorebi Configuration
{
"$schema": "https://raw.githubusercontent.com/LGUG2Z/komorebi/master/schema.json",
"app_specific_configuration_path": "$Env:KOMOREBI_CONFIG_HOME/applications.json",
"window_hiding_behaviour": "Cloak",
"cross_monitor_move_behaviour": "Insert",
"default_workspace_padding": 2,
"default_container_padding": 3,
"focus_follows_mouse": "Komorebi",
"mouse_follows_focus": true,
"transparency": false,
"transparency_alpha": 225,
"animation": {
"enabled": false,
"duration": 100,
"style": "EaseInQuad",
"fps": 120
},
"border": true,
"border_implementation": "Komorebi",
"border_style": "Rounded",
"border_width": 3,
"border_offset": -1,
"border_colours": {
"single": "#fa2a2a",
"stack": "#a6e3a1",
"monocle": "#f38ba8",
"unfocused": "#10151D"
},
"stackbar": {
"mode": "Never"
},
"float_rules": [
{
"kind": "Title",
"id": "Endian Connect App",
"matching_strategy": "StartsWith"
}
],
"monitors": [
{
"workspaces": [
{
"name": "I",
"layout": "BSP"
},
{
"name": "II",
"layout": "Grid",
"ensure-workspaces": "1"
},
{
"name": "III",
"layout": "BSP",
"ensure-workspaces": "1"
}
]
}, {
"workspaces": [
{
"name": "I",
"layout": "BSP"
},
{
"name": "II",
"layout": "Grid",
"ensure-workspaces": "1"
},
{
"name": "III",
"layout": "BSP",
"ensure-workspaces": "1"
}
]
},
{
"workspaces": [
{
"name": "I",
"layout": "BSP"
},
{
"name": "II",
"layout": "Grid",
"ensure-workspaces": "1"
},
{
"name": "III",
"layout": "BSP",
"ensure-workspaces": "1"
}
]
}
]
}Hotkey Configuration
#Requires AutoHotkey v3.0
#SingleInstance Force
RunK(cmd) {
RunWait(A_ComSpec ' /c ' cmd, , "Hide")
}
; Focus
!h::RunK("komorebic focus left")
!Left::RunK("komorebic cycle-focus previous")
!l::RunK("komorebic focus right")
!Right::RunK("komorebic cycle-focus next")
!k::RunK("komorebic focus up")
!j::RunK("komorebic focus down")
; Move
!+h::RunK("komorebic move left")
!+Left::RunK("komorebic move left")
!+l::RunK("komorebic move right")
!+Right::RunK("komorebic move right")
!+k::RunK("komorebic move up")
!+Up::RunK("komorebic move up")
!+j::RunK("komorebic move down")
!+Down::RunK("komorebic move down")
; Resize
!p::RunK("komorebic resize-axis horizontal decrease")
!u::RunK("komorebic resize-axis horizontal increase")
!o::RunK("komorebic resize-axis vertical increase")
!i::RunK("komorebic resize-axis vertical decrease")
; Layout direction
!v::RunK("komorebic flip-layout horizontal-and-vertical")
; Floating / tiling
!+Space::RunK("komorebic toggle-float")
!Space::RunK("komorebic toggle-float")
; Fullscreen equivalent
!f::RunK("komorebic toggle-monocle")
; Minimize
!m::RunK("komorebic minimize")
; Close
!+w::RunK("komorebic close")
; Pause
!+p::RunK("komorebic toggle-pause")
; Reload
!+r::RunK("komorebic reload-configuration")
; Redraw / retile
!+q::RunK("komorebic retile")
; Exit komorebi
!+e::RunK("komorebic stop")
; Resize with mouse wheel
!WheelUp::RunK("komorebic resize-axis horizontal increase")
!WheelDown::RunK("komorebic resize-axis horizontal decrease")
+WheelUp::RunK("komorebic resize-axis vertical increase")
+WheelDown::RunK("komorebic resize-axis vertical decrease")
; Workspaces with mouse button
!XButton2::RunK('komorebic cycle-workspace next')
!XButton1::RunK('komorebic cycle-workspace previous')
wu := 0
wd := 0
!+WheelUp::{
global wu
wu += 1
if wu >= 2 {
wu := 0
RunK("komorebic cycle-layout next")
}
}
!+WheelDown::{
global wd
wd += 1
if wd >= 2 {
wd := 0
RunK("komorebic cycle-layout previous")
}
}Output of komorebic check
KOMOREBI_CONFIG_HOME detected: C:\Users\Notandi\.config\komorebi
Looking for configuration files in C:\Users\Notandi\.config\komorebi
Found komorebi.json; this file can be passed to the start command with the --config flag
Your configuration file contains some options that have been renamed or deprecated:
"float_rules" is now "ignore_rules"
"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\Notandi\.config\whkdrc; key bindings will be loaded from here when whkd is started, and you can start it automatically using the --whkd flagSource: LGUG2Z/komorebi