forked from janek/mostr
feat(main): properly apply input trimming
This commit is contained in:
parent
b03ad00b6a
commit
ae2172c8f2
12
README.md
12
README.md
|
@ -54,10 +54,16 @@ Using subtasks has two main advantages:
|
||||||
- ability to accumulate time tracked
|
- ability to accumulate time tracked
|
||||||
- swiftly navigate between related tasks
|
- 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,
|
Thus subtasks can be very useful for specific contexts,
|
||||||
for example a project or a specific place.
|
for example a project or a specific place.
|
||||||
|
|
||||||
On the other hand, related tasks like chores
|
On the other hand, related tasks like chores
|
||||||
should be grouped with a tag instead.
|
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
|
### 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` 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
|
- `.` - clear filters and reload
|
||||||
- `.TASK`
|
- `.TASK`
|
||||||
+ activate task by id
|
+ 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
|
- `/[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)
|
- `|[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)
|
- `:[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)
|
- `*[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` - set state for current task from text
|
||||||
- `,TEXT` - add text note (comment / description)
|
- `,TEXT` - add text note (comment / description)
|
||||||
- `@` - undoes last action (moving in place or upwards or waiting a minute confirms pending actions)
|
- `@` - 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:
|
Property Filters:
|
||||||
|
|
||||||
|
|
11
src/main.rs
11
src/main.rs
|
@ -284,8 +284,7 @@ async fn main() {
|
||||||
if remaining.is_empty() {
|
if remaining.is_empty() {
|
||||||
tasks.remove_column(index);
|
tasks.remove_column(index);
|
||||||
} else {
|
} else {
|
||||||
let value = input[2..].trim().to_string();
|
tasks.add_or_remove_property_column_at_index(remaining, index);
|
||||||
tasks.add_or_remove_property_column_at_index(value, index);
|
|
||||||
}
|
}
|
||||||
} else if let Some(arg) = arg {
|
} else if let Some(arg) = arg {
|
||||||
tasks.add_or_remove_property_column(arg);
|
tasks.add_or_remove_property_column(arg);
|
||||||
|
@ -403,7 +402,8 @@ async fn main() {
|
||||||
dots += 1;
|
dots += 1;
|
||||||
pos = tasks.get_parent(pos).cloned();
|
pos = tasks.get_parent(pos).cloned();
|
||||||
}
|
}
|
||||||
let slice = &input[dots..];
|
let slice = input[dots..].trim();
|
||||||
|
|
||||||
tasks.move_to(pos);
|
tasks.move_to(pos);
|
||||||
if slice.is_empty() {
|
if slice.is_empty() {
|
||||||
if dots > 1 {
|
if dots > 1 {
|
||||||
|
@ -423,7 +423,8 @@ async fn main() {
|
||||||
dots += 1;
|
dots += 1;
|
||||||
pos = tasks.get_parent(pos).cloned();
|
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() {
|
if slice.is_empty() {
|
||||||
tasks.move_to(pos);
|
tasks.move_to(pos);
|
||||||
} else if let Ok(depth) = slice.parse::<i8>() {
|
} else if let Ok(depth) = slice.parse::<i8>() {
|
||||||
|
@ -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);
|
tasks.move_to(None);
|
||||||
let mut new_relay = relays.keys().find(|key| key.as_str().starts_with(&input)).cloned();
|
let mut new_relay = relays.keys().find(|key| key.as_str().starts_with(&input)).cloned();
|
||||||
if new_relay.is_none() {
|
if new_relay.is_none() {
|
||||||
|
|
Loading…
Reference in New Issue