Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: dim unselected #611

Draft
wants to merge 9 commits into
base: main
Choose a base branch
from
Draft

feat: dim unselected #611

wants to merge 9 commits into from

Conversation

tjex
Copy link

@tjex tjex commented Dec 14, 2024

I thought to try and implement a different style of selection display than reverse.

My approach is to just use the ratatui builtins Modifier::DIM, but to apply it on all rows except the selected row.

I've followed a previous implementation here: #350

But I'm a bit stuck and hoping that a) you'd be interested in merging this, and b) if not, that you could give me a tiny pointer...

I've implemented the code to get a variable from .taskrc, uda.taskwarrior-tui.unselected.dim. That works, in the sense that I can toggle it on and off. However, this still dims / undims the selected row, rather than the other rows.

So either something is off with my turnary logic, or the handling of highlight_style variable in app.js...

@kdheepak
Copy link
Owner

Nice idea!

I think in your implementation, you are only modifying the currently selected row.

If I understand what you are asking, it might be easier to style all the tasks as dimmed by optionally adding the dimmed style to this function:

taskwarrior-tui/src/app.rs

Lines 1111 to 1147 in 4288060

fn style_for_task(&self, task: &Task) -> Style {
let virtual_tag_names_in_precedence = &self.config.rule_precedence_color;
let mut style = Style::default();
for tag_name in virtual_tag_names_in_precedence.iter().rev() {
if tag_name == "uda." || tag_name == "priority" {
if let Some(p) = task.priority() {
let s = self.config.color.get(&format!("color.uda.priority.{}", p)).copied().unwrap_or_default();
style = style.patch(s);
}
} else if tag_name == "tag." {
if let Some(tags) = task.tags() {
for t in tags {
let color_tag_name = format!("color.tag.{}", t);
let s = self.config.color.get(&color_tag_name).copied().unwrap_or_default();
style = style.patch(s);
}
}
} else if tag_name == "project." {
if let Some(p) = task.project() {
let s = self.config.color.get(&format!("color.project.{}", p)).copied().unwrap_or_default();
style = style.patch(s);
}
} else if task
.tags()
.unwrap_or(&vec![])
.contains(&tag_name.to_string().replace('.', "").to_uppercase())
{
let color_tag_name = format!("color.{}", tag_name);
let s = self.config.color.get(&color_tag_name).copied().unwrap_or_default();
style = style.patch(s);
}
}
style
}

That function is called here to build the rows for the table:

let style = self.style_for_task(&self.tasks[i]);

@tjex
Copy link
Author

tjex commented Jan 3, 2025

Sorry for the late reply, was in holiday mode. Great! Thanks for the extra direction.

@tjex
Copy link
Author

tjex commented Jan 23, 2025

Just a quick heads up. I haven't dropped this! Just been swept up in the first weeks of a new job, and alot of action over on zk-org/zk, which I maintain.

@tjex
Copy link
Author

tjex commented Jan 27, 2025

So your approach worked of course :) Thanks. I had to still add to the selector style logic.
If unselected.dim = true then the selector needed to be explicitly colored white.

2025-01-27_19:10:17

Added the option to the docs.

Let me know if I've missed something and if the implementation is fine. 👍

@tjex
Copy link
Author

tjex commented Feb 7, 2025

Just noticed that coloring the line explicityly white, overwrites any other colors set to the row!!

@tjex tjex marked this pull request as draft February 7, 2025 12:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants