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

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open

feat: dim unselected #611

wants to merge 4 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]);

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