feat(main): enable manual state updates
This commit is contained in:
parent
8e7b8d3e66
commit
98d921b941
|
@ -36,10 +36,14 @@ Dots can be repeated to move to parent tasks
|
||||||
- `:[IND][COL]` - add / remove property column COL to IND or end
|
- `:[IND][COL]` - add / remove property column COL to IND or end
|
||||||
- `>[TEXT]` - Complete active task and move to parent, with optional state description
|
- `>[TEXT]` - Complete active task and move to parent, with optional state description
|
||||||
- `<[TEXT]` - Close active task and move to parent, with optional state description
|
- `<[TEXT]` - Close active task and move to parent, with optional state description
|
||||||
- `#TAG` - filter by tag
|
- `|TEXT` - Set state for current task from text (also aliased to `/` for now)
|
||||||
- `?TAG` - filter by state (type or description)
|
|
||||||
- `-TEXT` - add text note (comment / description)
|
- `-TEXT` - add text note (comment / description)
|
||||||
|
|
||||||
|
Property Filters:
|
||||||
|
|
||||||
|
- `#TAG` - filter by tag
|
||||||
|
- `?TAG` - filter by state (type or description) - plain `?` to reset
|
||||||
|
|
||||||
State descriptions can be used for example for Kanban columns.
|
State descriptions can be used for example for Kanban columns.
|
||||||
An active tag or state filter will also create new tasks with those corresponding attributes.
|
An active tag or state filter will also create new tasks with those corresponding attributes.
|
||||||
|
|
||||||
|
|
27
src/main.rs
27
src/main.rs
|
@ -249,17 +249,26 @@ async fn main() {
|
||||||
|
|
||||||
Some('-') => tasks.add_note(arg),
|
Some('-') => tasks.add_note(arg),
|
||||||
|
|
||||||
Some('>') | Some('<') => {
|
Some('>') => {
|
||||||
tasks.update_state(arg, |_| {
|
tasks.update_state(arg, |_| Some(State::Done));
|
||||||
Some(if op.unwrap() == '<' {
|
tasks.move_up();
|
||||||
State::Closed
|
|
||||||
} else {
|
|
||||||
State::Done
|
|
||||||
})
|
|
||||||
});
|
|
||||||
tasks.move_up()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Some('<') => {
|
||||||
|
tasks.update_state(arg, |_| Some(State::Closed));
|
||||||
|
tasks.move_up();
|
||||||
|
}
|
||||||
|
|
||||||
|
Some('|') | Some('/') => match tasks.get_position() {
|
||||||
|
None => {
|
||||||
|
println!("First select a task to set its state!");
|
||||||
|
}
|
||||||
|
Some(id) => {
|
||||||
|
tasks.set_state_for(&id, arg);
|
||||||
|
tasks.move_to(tasks.get_position());
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
Some('#') => {
|
Some('#') => {
|
||||||
tasks.add_tag(arg.to_string());
|
tasks.add_tag(arg.to_string());
|
||||||
}
|
}
|
||||||
|
|
|
@ -302,7 +302,7 @@ impl Tasks {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_state_for(&mut self, id: &EventId, comment: &str) -> Option<Event> {
|
pub(crate) fn set_state_for(&mut self, id: &EventId, comment: &str) -> Option<Event> {
|
||||||
let t = self.tasks.get_mut(id);
|
let t = self.tasks.get_mut(id);
|
||||||
t.and_then(|task| {
|
t.and_then(|task| {
|
||||||
task.set_state(
|
task.set_state(
|
||||||
|
|
Loading…
Reference in New Issue