alex-courtis / way-displays

way-displays: Auto Manage Your Wayland Displays
MIT License
246 stars 12 forks source link

Feature: Arrange: row|column Align: bottom|middle|top|left|right #8

Closed steveb-123 closed 2 years ago

steveb-123 commented 2 years ago

Thanks for the great package!

By default dissimilar-sized displays align by the top edge which is not easy to accomplish in the physical world with a laptop on a desk with an external display. Thus, the mouse, for example, does not 'flow' properly from one display to the next.

smaller

It would be helpful if there were the ability to set the position alignment to 'Bottom', and have way-displays do the math to make it happen. I would propose that Bottom should be the default, also.

alex-courtis commented 2 years ago

Thanks for raising. We could do something like:

# Align displays on the TOP or BOTTOM edge, default TOP
LEFT_TO_RIGHT_ALIGN: BOTTOM

TOP will need to remain the default, so as not to break any existing users.

alex-courtis commented 2 years ago

I'd be grateful if you could preview / test these changes @steveb-123 , before a 1.1.0 release.

git clone git@github.com:alex-courtis/way-displays.git
cd way-displays
git checkout 8-align-top-bottom
make
sudo make install

You can remove the installation from /usr/local when you're done via sudo make uninstall

steveb-123 commented 2 years ago

Thanks Alex,

I checked it out it and ran it with TOP, BOTTOM and unset. Works exactly as expected. Rad!

I think that the the name of the parameter is a bit confusing though, it makes me assume that it wants LEFT or RIGHT as arguments. VERTICAL_ALIGN would be more intuitive to me.

speculating/drifting, but is relevant...

VERTICAL_ALIGN would leave room for a potential future MIDDLE/CENTER argument...

which would play nicely with something like:

ARRANGEMENT: ROW|STACK

Because that would eventually make use of something like:

HORIZONTAL_ALIGN: CENTER|LEFT|RIGHT

ARRANGEMENT: STACK would be useful to a lot of people because it would facilitate the commonly seen using-the-laptop-as-the-keyboard-under-the-external-monitor setup.

alex-courtis commented 2 years ago

Thanks Alex,

I checked it out it and ran it with TOP, BOTTOM and unset. Works exactly as expected. Rad!

Thank you for testing.

I think that the the name of the parameter is a bit confusing though, it makes me assume that it wants LEFT or RIGHT as arguments. VERTICAL_ALIGN would be more intuitive to me.

Yes, much better... LEFT_TO_RIGHT_ALIGN is quite clunky.

speculating/drifting, but is relevant...

VERTICAL_ALIGN would leave room for a potential future MIDDLE/CENTER argument...

MIDDLE doesn't feel so useful for the row arrangement however it feels very relevant for a stack arrangement. It would work well for both.

which would play nicely with something like:

ARRANGEMENT: ROW|STACK

Because that would eventually make use of something like:

HORIZONTAL_ALIGN: CENTER|LEFT|RIGHT

ARRANGEMENT: STACK would be useful to a lot of people because it would facilitate the commonly seen using-the-laptop-as-the-keyboard-under-the-external-monitor setup.

You make a convincing argument: I had not considered that use case.

The cases to avoid are anything more complicated (and thus not opaquely automatable) such as some sort of quadrilateral or triangle. A hardcoded configuration via sway or kanshi is the solution there.

I do like the ROW and STACK names, as well as the aligns to go with them. Left to right is only in the descriptions/doc so we are free to use the new names in config and update the doc.

Let me think about it. Implementing the above seems quite straightforward and would be good to include in a 1.1.0 release.

Many thanks for all your ideas: so much potential!

Side note: would you be happy to include your drawing in the doc for VERTICAL_ALIGN?

steveb-123 commented 2 years ago

The cases to avoid are anything more complicated (and thus not opaquely automatable) such as some sort of quadrilateral or triangle. A hardcoded configuration via sway or kanshi is the solution there.

Totally agree. The simplicity of setup is what makes this appealing to begin with.

Side note: would you be happy to include your drawing in the doc for VERTICAL_ALIGN?

No problem, however it is a bit janky... in the timeless words of my mechanics.. "I make a new one"

vertical_align

alignment_img

svg source: alignment_img_svg_version.zip

alex-courtis commented 2 years ago

That's fantastic, thank you!

I will include it in the README - finally a "screenshot".

alex-courtis commented 2 years ago

Added all arrange and align combinations.

# Arrange displays in a ROW (default, left to right) or a COLUMN (top to bottom)
ARRANGE: ROW

# Align ROWs at the TOP (default), MIDDLE or BOTTOM
# Align COLUMNs at the LEFT (default), MIDDLE or RIGHT
ALIGN: TOP

Before updating the README etc. I would gratefully appreciate your testing as well as reviewing the language / names, @steveb-123

Many thanks for all the direction and feedback so far; these additions should be useful to many.

steveb-123 commented 2 years ago

I think I tested every permutation, and it seemed to work nicely. I actually have monitors today with the same resolution, but differing pixel size, so I could only test it with scaling, but that worked as expected.

The names of the options make sense I think.

I updated this:

arrange_align

source svg

It just so happened I came to use a desk and monitor setup where I needed COLUMN today, so your timing was perfect!

alex-courtis commented 2 years ago

Glad to hear this is meeting your needs right now.

Preparing to release 1.1.0 right now.

Many thanks for all your ideas, contributions and testing; you have greatly increased the value of way-displays.

It's time to add a contributors section to the readme: how do you wish to be known? Some people use real name, some an alias, some include an email address.

steveb-123 commented 2 years ago

Thanks Alex, name credit is cool for me: Stephen Barratt.

Thanks for working on the package, and implementing these suggestions. They've really improved my own setup!