[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)