From ae2172c8f2a9216b757d59f2b217426b07bfd74e Mon Sep 17 00:00:00 2001 From: xeruf <27jf@pm.me> Date: Sat, 10 Aug 2024 18:10:40 +0300 Subject: [PATCH] feat(main): properly apply input trimming --- README.md | 12 +++++++++--- src/main.rs | 11 ++++++----- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index d367d32..eb0d9d7 100644 --- a/README.md +++ b/README.md @@ -54,10 +54,16 @@ Using subtasks has two main advantages: - ability to accumulate time tracked - swiftly navigate between related tasks +Managing a project with subtasks makes it continuously visible, +which is helpful if you want to be able to track time on the project itself +without a specific task, Thus subtasks can be very useful for specific contexts, for example a project or a specific place. + On the other hand, related tasks like chores should be grouped with a tag instead. +Similarly for projects which are only sporadically worked on +when a specific task comes up, so they do not clutter the list. ### Collaboration @@ -86,7 +92,7 @@ To stop time-tracking completely, simply move to the root of all tasks. `TASK` creation syntax: `NAME: TAG1 TAG2 ...` -- `TASK` - create task +- `TASK` - create task (prefix with space if you want a task to start with a command character) - `.` - clear filters and reload - `.TASK` + activate task by id @@ -96,7 +102,7 @@ To stop time-tracking completely, simply move to the root of all tasks. - `/[TEXT]` - like `.`, but never creates a task - `|[TASK]` - (un)mark current task as procedure or create and activate a new task procedure (where subtasks automatically depend on the previously created task) -Dots can be repeated to move to parent tasks. +Dots and slashes can be repeated to move to parent tasks. - `:[IND][COL]` - add property column COL at IND or end, if it already exists remove property column COL or IND (1-indexed) - `*[TIME]` - add timetracking with the specified offset (empty: list tracked times) @@ -105,7 +111,7 @@ Dots can be repeated to move to parent tasks. - `!TEXT` - set state for current task from text - `,TEXT` - add text note (comment / description) - `@` - undoes last action (moving in place or upwards or waiting a minute confirms pending actions) -- `wss://...` - switch or subscribe to relay +- `wss://...` - switch or subscribe to relay (prefix with space to forcibly add a new one) Property Filters: diff --git a/src/main.rs b/src/main.rs index 8686c1a..f84c08b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -284,8 +284,7 @@ async fn main() { if remaining.is_empty() { tasks.remove_column(index); } else { - let value = input[2..].trim().to_string(); - tasks.add_or_remove_property_column_at_index(value, index); + tasks.add_or_remove_property_column_at_index(remaining, index); } } else if let Some(arg) = arg { tasks.add_or_remove_property_column(arg); @@ -403,7 +402,8 @@ async fn main() { dots += 1; pos = tasks.get_parent(pos).cloned(); } - let slice = &input[dots..]; + let slice = input[dots..].trim(); + tasks.move_to(pos); if slice.is_empty() { if dots > 1 { @@ -423,7 +423,8 @@ async fn main() { dots += 1; pos = tasks.get_parent(pos).cloned(); } - let slice = &input[dots..].to_ascii_lowercase(); + let slice = &input[dots..].trim().to_ascii_lowercase(); + if slice.is_empty() { tasks.move_to(pos); } else if let Ok(depth) = slice.parse::() { @@ -447,7 +448,7 @@ async fn main() { } _ => - if Regex::new("^wss?://").unwrap().is_match(&input) { + if Regex::new("^wss?://").unwrap().is_match(&input.trim()) { tasks.move_to(None); let mut new_relay = relays.keys().find(|key| key.as_str().starts_with(&input)).cloned(); if new_relay.is_none() {