[HN Gopher] A Native Tiling Window Manager for Windows 10, Inspi... ___________________________________________________________________ A Native Tiling Window Manager for Windows 10, Inspired by I3wm Author : mcyoloswagham Score : 178 points Date : 2021-02-28 17:35 UTC (5 hours ago) (HTM) web link (github.com) (TXT) w3m dump (github.com) | ianhanschen wrote: | Looks cool. If you want to get rid of your hook DLLs and the need | for the x86ipc child process, you can use SetWinEventHook() with | EVENT_OBJECT_CREATE / EVENT_OBJECT_DESTROY as min/max event | values and WINEVENT_OUTOFCONTEXT to get notification on newly | created/destroyed windows, all within the context of your | process. No hook DLLs required. | mcyoloswagham wrote: | Oh wow, that's huge I'll definitely add that, that'll help a | lot with dealing with processes that don't need injection, and | protected processes (anticheats/drm etc...). | | edit: though regardless, I need to inject ForceResize into | them, but still maybe I can come up with some way to subclass | windows without subclassing windows lmao, need some gui thread | message hijacking | willjp wrote: | Thank you! I am very excited to try this | galkk wrote: | Are workspaces integrated with windows desktops or they are | separate entities? | mcyoloswagham wrote: | They are integrated with windows desktops. You can see them in | the Win+Tab menu | emily-c wrote: | This is awesome. It's always nice to see new Win32 productivity | software. Thank you! | greggturkington wrote: | Fantastic work, THANK you! | | A suggestion: get rid of any spaces between the windows, but keep | the snapping. | | Sort of how Aero Snap works today, snap to the entire left half, | or the entire right. | | Keep the 2x2 grid you have now, but just make it easy to snap to | the full size of each grid cell (or 1x2 or 2x1 spaces). | mcyoloswagham wrote: | you can totally change that in the settings, set the | "adjust_for_nc" on and disable gaps. I'll change the defaults | right now. it's in config.json the explanations are here | mcyoloswagham.github.io/win3wm | Miner49er wrote: | I'll have to try this one out, I've been using PyleWM[0] for a | few months, and it works well, but doesn't have as much workspace | support as this project, it seems. | | One recent thing PyleWM has added, but isn't in the readme, is a | fuzzy program launcher, does this have anything like that? | | [0]: https://github.com/GGLucas/PyleWM | flipcoder wrote: | Nice work. I'll definitely be using this! | filmgirlcw wrote: | Great work! I love FancyZones but this is a bit more configurable | (a friend on Twitter calls FZ "lighter touch," which I think is a | perfect descriptor, whereas this is more flexible and more of a | traditional tiling manager) and it's such a good start! | | I'm primarily a macOS user, but projects like this really make me | wish there were more options (yes, I'm aware of Amethyst, Yabai, | Spectacle (now Rectangle), Hammerspoon, and so on. Those options | all have their own deficits and trade-offs) in the Apple world. | abandonliberty wrote: | FZ is awesome. I think few people are aware of it. | | https://docs.microsoft.com/en-us/windows/powertoys/fancyzone... | majkinetor wrote: | One important distinction is that you can still resize the window | without affecting other windows, so not really true tiling WM in | linux sense, where you can never escape the tiles. | | I have never seen Windows WM behave the way i3 does. | RMPR wrote: | > where you can never escape the tiles | | Tbf that's exactly what floating mode is for | ianhanschen wrote: | Windows can be made to behave like i3, with a lot of work. I've | done a few different things over the years, but I never got | into i3 so I haven't made my personal WM software work like | that. | | It's a bit of a curiosity nowadays, but Windows started out as | a tiling system - if memory serves, overlapping windows were | not supported until 2.1. But even then, it wasn't like i3. | | - guy that worked on the Windows WM (USER & DWM) for over a | decade | mcyoloswagham wrote: | damn that's very interesting, due to certain performance | issues on very old hardware, I was debating writing a driver | for win32k, make it work faster, like I mean 1-5ms render | times, but it was too much of a mess. DWM & Win32k are very | complicated | ianhanschen wrote: | Before coming to Microsoft, I wrote my own EngAlphaBlend() | accelerator driver in 2003 or so. I knew a lot about how | things worked from disassembly but after coming to MS in | 2004 I quickly destroyed a lot of my own assumptions. Mess? | no. Complicated? yes. | mcyoloswagham wrote: | well I mean it was too much of a mess in my own work, I | know a bit about win32k, but trying to deal with all the | xxx, yyy,zzz functions and the locks and everything kinda | confused me, and so I gave up. :( | rtlfe wrote: | Can you turn it on/off without logging out? I use i3 at work, and | I'd guess I would want it 20% of the time for my personal | computer. | mcyoloswagham wrote: | yes you can the default shortcut for turning it off and | restoring everything to a single virtual destkops is MOD + T | tiborsaas wrote: | How is this different from the default tiling support in Win 10? | If you drag a window to a corner/edge it starts to offer you | options to add windows. | josteink wrote: | On Linux I'm a now full time sway-user, and a former i3 user. | | While on Windows I never found a good i3-replacement, I found a | fairly mature and stable tiling WM I've been contributing too, | although it's more in the style of xmonad. | | So if you're into tiling WMs and you're stuck on Windows you may | want to give that one a try too: | | https://workspacer.org/ | fortran77 wrote: | It's nice that Windows allows alternate Windows Managers unlike | that other proprietary operating system. Give users a choice! | qwerty456127 wrote: | Does it have workspaces (virtual monitors)? Can it save them and | restore them after I reboot? | mcyoloswagham wrote: | yes it does have workspaces, 9 of them that aren't just moving | around windows but windows's own Virtual Desktop, but no the | state isn't stored through reboots, though that is one of the | goals. | lolive wrote: | I have dozen _named_ workspaces on i3. Limiting them or not | providing the ability to (re)name them or create them on the | fly makes the whole experience of virtual desktops pretty | lame. | NathanielK wrote: | The biggest issue on W10 is that there's no way to even | more windows from one workspace to another without several | clicks, unlike most Linux implementations that have hot | keys or dragging the icon around. | mcyoloswagham wrote: | since it's using virtual desktops you can just win+tab and | do that | lolive wrote: | Direct access through names and autocompletion: I won't | accept anything less productive. Also: Auto creation of | workspaces on new name, auto deletion of workspace when | it contains no window. | | This is the base of i3. | | That plus its scriptability that is so freaking awesome. | Already__Taken wrote: | How different from https://docs.microsoft.com/en- | gb/windows/powertoys/fancyzone... is i3 or this i3 spinoff? | bondarchuk wrote: | > _The subtractive Grid model starts with a three column grid | and allows zones to be created by splitting and merging zones, | resizing the gutter between zones as desired._ | | i3wm is basically like that except ad-hoc instead of | preconfigured, and starting from a single full-screen window. | mcyoloswagham wrote: | fancyzones is pretty good but it's more like fixed layouts that | you can change to, where as i3wm and other twms let you change | the layout on the fly making them a bit more flexible. | vxNsr wrote: | So happy to see so much more active development in windows stuff | these days, for a while it looked like all the cool stuff was | happening in the apple ecosystem, I'm happy to see developers | starting to trust windows again. | | One of the things that I'd love to see in this that fancy zones | is missing is the ability of windows to remember where they | should be after I reconnect to my dock. Like maybe I run some | shortcut right before I disconnect the dock that stores window | locations and then when I reconnect I click the shortcut again to | restore them to those monitors. | mcyoloswagham wrote: | what do you mean by reconnect to my dock? Feel free to open an | issue if you'd like and I'll try and to my best to implement | it. edit: I think I understand, WinWM has a hotkey called | refresh after you move windows you can use it to return all | windows to the current layout. | rodrigodlu wrote: | I think he is talking bout plugging or unplugging a | new/different display. | | You can connect external displays to USB-C or Thunderbolt | docks / hubs. | mcyoloswagham wrote: | ah I see, I'll add that to the checklist | DoingIsLearning wrote: | Worth remembering that you can configure a machine to | either mirror a display (I would expect the most common | case) or extend the desktop (new display becomes display | #2). | | It is also not uncommon to dock a laptop at a workstation | with dual or triple monitors. | 0xdba wrote: | > One of the things that I'd love to see in this that fancy | zones is missing is the ability of windows to remember where | they should be after I reconnect to my dock. | | When I worked in an office, and had frequent meetings I had to | take my laptop to, it irked me enough to come up with my own | solution: | | https://github.com/nearwood/windmill | jmlucjav wrote: | can you save different 'layouts' so you can load a different | one in diff context? | 0xdba wrote: | No. It's pretty bare-bones. Save before a disconnect, | restore after re-connect. | | And it's hWnd based, so if the window handle ever changes | it won't work. Also won't work for admin windows, unless | run as an admin. | | But it worked well enough for me. | graycat wrote: | Gee, what the OP has is a LOT of advanced Windows software but, | still, gives results not what I prefer!! | | I don't want to change the sizes of the windows and but just move | them so that I can easily make use of all of them and for that | goal: | | For each window, I want its UL (upper left) corner to be on a | line from roughly the top center of the screen to roughly the | left center of the screen. And I want all those UL corners | equally spaced on that line. | | So, for the goal: With this arrangement (1) can see at least a | little of each of the windows, (2) usually can see the title of | each of the windows, and (3) properties (1) and (2) continue to | hold for any Z-order for the windows, i.e., can click on the | windows in any order, thus, changing the Z-order, and still have | properties (1) and (2). So, with (3) can just click on any | window, bring it to the top of the Z-order, see all of that | window, and still have (1) and (2). That is, can continue working | with all the windows without more _arranging_. | | I wrote a little script in Rexx to do this _arranging_ and put an | icon on the desktop to run that script. Best place for the icon? | Sure, in the UL corner of the screen thus, not covered by any of | the so _arranged_ windows. | | The version of the Firefox Web browser I'm using does something | similar BUT with a difference: The line I mentioned goes from the | top center of the screen to the center RIGHT of the screen | instead of the center left. Sooo, when a window is brought to the | top of the Z-order, usually all the windows with UL corner to the | lower right are fully covered, i.e., usually can't see any part | of any of them. So, lose property (3) and often soon also | properties (1) and (2). | | So, having that "line" go to the center left of the screen | instead of the center right is a biggie! | mcyoloswagham wrote: | I'm not too sure what you mean, if you mean the little | inequalities from the top of the screen, the option | "adjust_for_nc" should be turned on, I should probably change | that to include it. As for the rest of the stuff I'm not sure | graycat wrote: | I thought what I wrote was crystal clear. | | For your response, I have no idea what you mean: | | > little inequalities from the top of the screen | | I know nothing about any "little inequalities". Maybe you are | talking about the screen in the OP, and I am not. By "the | screen", I mean just the full rectangular video _screen_ of | essentially any computer running Windows for the past 20+ | years. | | My post mentioned a "LINE". By a "line" I mean one as in high | school plane geometry, what get when use a ruler to draw a | "line", what is meant by a "line" from about the 2nd grade | on, what every carpenter call a "line". | | Then for the "screen", that is just the video screen on the | computer. As we know it is rectangular. The long dimension is | horizontal. The "top" of the screen is the line that forms | the upper horizontal boundary of the screen. Go to that line, | the "top of the screen", and pick the midpoint. Now go to the | left side of the screen, and pick its midpoint. Now imagine a | "line" from the first point to the second. So we would call | that line a diagonal line. | | With all that geometry clear, in arranging windows on the | screen, I want the UL (upper left) corner of each window on | that line. I thought that all that was clear. | | For | | > option "adjust_for_nc" | | I have no idea what that is. Maybe it has to do with the | output of the OP. All I know about the output of the OP is | the screen image I saw in the documentation. There I saw what | looked like full but low magnification versions of all the | windows on the screen. As I started my post: | | > gives results not what I prefer!! | | Mod: HN does not like my post. Please delete it. Thanks. | marliechiller wrote: | i was just thinking of removing windows 10 and going back to | manjaro i3 this evening. Will give this a go before I do! Thanks | saint_angels wrote: | this is great! Did you encounter any Win10 quirks, that wouldn't | allow to recreate full i3 window-tiling experience like | fullscreen focus? | mcyoloswagham wrote: | Yeah, there are definitely a few, I've implemented an | experimental thing that removes titlebars for windows, but | that's totally dependant on the application it works on, so | browers that do fancy things don't work as well, but something | like notepad/cmd/etc... work pretty well. | | Also the focus bar is a little overlay line that could be | improved, but it's very difficult to make it like in i3wm | without covering a significant portion of a windows content | since you can't really control a windows rendering, etc.... | joombaga wrote: | Nice work! One thing I always miss from MacOS is per-monitor | workspaces. Does your WM support this? Gonna give it a shot. | Right now I'm using the Microsoft's FancyZones PowerToy which is | more about custom snap zones than proper tiling. | mcyoloswagham wrote: | well each monitor has it own workspace, but when you change | workspaces it will change them all in sync with each monitor, | so I don't know if that's what you mean. you can have different | layouts on different monitors if that is what you mean | joombaga wrote: | Okay, I think that answers my question. | | I meant the ability to change workspaces on each monitor | separately. In MacOS I can have a 2 monitors each with 2 | workspaces, and switch to workspace 2 on monitor 1 without | affecting monitor 2's workspace. | Cu3PO42 wrote: | I also find this feature extremely useful on macOS, | especially combined with the ability to move entire | workspaces from one monitor to another. | | I have a primary and secondary monitor (with actual | physical differences) and being able to easily move a task | from one to the other is such a useful feature. I'd go so | far as to say this is the most significant thing from macOS | I'm missing right now. | deorder wrote: | May be you can help me with this. | | I am using the same computer from 2 locations, one 10 meters | away (using extension cables) from the computer. Both | locations have a keyboard and a mouse. When I start an | application it always opens on the primary display, not the | display I initiated the opening of the application from. | | On Linux with X11 (with BSPWM or not) this is flawless. The | multi display support in Linux / X11 seems to be much more | advanced compared to Windows. | | Any idea how I can get this in Windows 10? | mcyoloswagham wrote: | I actually have no idea, this is something I had to work | around in my twm, since the windows always spawn on the | primary monitor | ianhanschen wrote: | On Linux you have two X servers instances, with 2 window | managers, and 2 consoles. Each X server is working with a | different display, so naturally the content ends up on the | right display. | | On Windows you have just one console, one window manager, | and multiple monitors. The easiest way to accomplish this | is to clone the two monitors in display settings so you're | always using the same monitor, regardless of where you're | sitting. | ghostpepper wrote: | This is really cool. It doesn't seem to capture every app though | - the first one I tried was Calculator, which just floated on | top. | mcyoloswagham wrote: | Yes my bad, this is a debugging remnant because all UWP windows | share the same name meaning that it gets very confusing when | the settings and other applications get captured by WinWM, or | like the wifi popup, etc... | | I'll address the bug soon ___________________________________________________________________ (page generated 2021-02-28 23:00 UTC)