forked from janek/mostr
1
0
Fork 0

feat: make tags sticky and allow manual removal

This commit is contained in:
xeruf 2024-08-01 20:12:04 +03:00
parent 256c86e06f
commit 7f34a888f3
3 changed files with 13 additions and 4 deletions

View File

@ -107,7 +107,8 @@ Dots can be repeated to move to parent tasks.
Property Filters: Property Filters:
- `#TAG` - filter by tag - `+TAG` - filter by tag
- `-TAG` - remove filter by tag
- `?STATE` - filter by state (type or description) - plain `?` to reset - `?STATE` - filter by state (type or description) - plain `?` to reset
State descriptions can be used for example for Kanban columns or review flows. State descriptions can be used for example for Kanban columns or review flows.

View File

@ -337,10 +337,14 @@ async fn main() {
} }
}, },
Some('#') => { Some('#') | Some('+') => {
tasks.add_tag(arg.to_string()); tasks.add_tag(arg.to_string());
} }
Some('-') => {
tasks.remove_tag(arg.to_string())
}
Some('.') => { Some('.') => {
let mut dots = 1; let mut dots = 1;
let mut pos = tasks.get_position(); let mut pos = tasks.get_position();

View File

@ -364,6 +364,11 @@ impl Tasks {
self.tags.insert(Hashtag(tag)); self.tags.insert(Hashtag(tag));
} }
pub(crate) fn remove_tag(&mut self, tag: String) {
self.view.clear();
self.tags.retain(|t| !t.content().is_some_and(|value| value.to_string().starts_with(&tag)));
}
pub(crate) fn set_state_filter(&mut self, state: Option<String>) { pub(crate) fn set_state_filter(&mut self, state: Option<String>) {
self.view.clear(); self.view.clear();
self.state = state; self.state = state;
@ -379,7 +384,6 @@ impl Tasks {
pub(crate) fn move_to(&mut self, id: Option<EventId>) { pub(crate) fn move_to(&mut self, id: Option<EventId>) {
self.view.clear(); self.view.clear();
self.tags.clear(); // TODO unsure if this is needed, needs alternative way to clear
if id == self.position { if id == self.position {
debug!("Flushing Tasks because of move in place"); debug!("Flushing Tasks because of move in place");
self.flush(); self.flush();
@ -393,7 +397,7 @@ impl Tasks {
) )
); );
if !id.and_then(|id| self.tasks.get(&id)).is_some_and(|t| t.parent_id() == self.position.as_ref()) { if !id.and_then(|id| self.tasks.get(&id)).is_some_and(|t| t.parent_id() == self.position.as_ref()) {
debug!("Flushing Tasks because of move upwards"); debug!("Flushing Tasks because of move");
self.flush(); self.flush();
} }
self.position = id; self.position = id;