Feature request: Add support for Easy Window Drag
I found this AutoHotKey script which allows you to move and resize windows by holding down the Alt key + dragging the left/right mouse button, similar to that of the window moving/resizing functionality of bspwm.
The script works as expected, but it appears that komorebi does not detect the window resize events that are emitted when resizing windows via Alt+Drag. Would this type of Alt+Drag window moving/resizing functionality be possible with komorebi?
I've had a look at the script but I'm still not quite able to visualize the behaviour that you have in mind and how it is different to the current current drag-edge-to-resize and move-to-swap functionality that komorebi has:

Can you share a gif of the desired behaviour and one showing what happens instead when the script is run alongside komorebi?
@LGUG2Z I've attached a screenshot to further highlight the type of behaviour I have described above from a laptop I have running SwayWM:

I currently don't have access to my Windows machine but will upload a recording as soon as I can.
Some differences between the recording you have provided and the one I have posted above are:
-
In order to move windows around, you are selecting and dragging the window title bar. With the script, you can simply hold Alt+LMB anywhere above a window to move it around.
-
In order to resize windows, you are going to the edge of a window and selecting/dragging the resize cursor. Whereas, this script allows you to resize the window by simply holding Alt+RMB anywhere above the window and dragging the mouse left, right, up or down to resize the window.
i3, sway, bspwm and several other window managers have this kind of window dragging/resizing functionality, it would be fantastic to have it in komorebi!
This would be pretty cool to have. This is quite a big feature and I don't think I will have the time to dedicate to it in the coming weeks/months.
The event emitted by the AHK script is this one, which is not currently mapped to a WindowManagerEvent: https://github.com/LGUG2Z/komorebi/blob/master/komorebi/src/winevent.rs#L125
I tried mapping it to MoveResizeEnd (https://github.com/LGUG2Z/komorebi/blob/master/komorebi/src/window_manager_event.rs#L113) to get the AHK script working, and while it does, kinda, it forces too many redraws which makes the system crawl to a halt.
This feature would definitely be better built into komorebi than triggered via an AHK script.
For anyone who would like to try working on this, I would suggest something like this as a starting point:
- A
komorebiccommand each for toggling easy resizing and easy moving mode, which could be bound to key presses up and down, which map to an enum which stores start and end cursor position in the WindowManager state
enum EasyResize {
Disabled,
Started(POINT),
Finished(POINT),
}
- When toggled off, the diff between the start and end points can be calculated to create a resize offset (or the window to swap with for EasyMove), and then applied to the window before triggering a workspace layout update