i3status-rust
i3status-rust copied to clipboard
Normalize common behavior configs between blocks
Motivation
My initial impulse for this is that I use both backlight and hueshift, and it'd be nice for them to behave the same way, but they don't. I mean, on one, I left-click continually to cycle through a set of target values, and on the other I left-click to set one value, and then right-click to reset to the default. I can never remember which is which, and it's a minor annoyance.
Looking at the code to try to fix this, I find that there is a lot of copy-and-paste across blocks. Each block is responsible for handling its configuration options from scratch with no support for common patterns like cycle, incr-/decrementing a value with the scroll wheel, toggling a format, etc. Search the code for toggle to see what I mean.
Related issues
- #1915 (create a common way to designate widget state based on a numeric value within a certain range)
Proposal
I propose to start small, focused on my original motivation, and refactor the cycle feature of backlight and the set/reset feature of hueshift so they both work identically. The handlers for common settings could be in src/settings.rs. If this is successful, then piece by piece other parts can be factored out as desired.
In case with hueshift and backlight, I agree that they do a very similar task (they are even merged in my bar!) but have different interfaces, which may be confusing. Maybe we can start by adding cycle to hueshift and deprecating click_temp?
However I'm not sure if it makes sense to factor this functionality out since it will be used only in two blocks.
Search the code for
toggleto see what I mean.
Yes! This is something that would be really nice to implement for all blocks in one place, somehow.