forked from kageru/tracc
Allow for time adjustments with +/-
I much prefer this solution to the old one. Parsing times was a mistake. I wonder if rustc realizes that I only ever pass 5 or -5 as arguments to that function and then creates two `time::Duration`s for 5 and -5 minutes respectively to avoid the allocations on each keypress. Also, I had to satisfy the OCD meme by rounding all adjusted times to %5. It would be too annoying to change a number without being able to always set it to a “nice” number.
This commit is contained in:
parent
a94d8b77ea
commit
9503962dd5
@ -77,6 +77,16 @@ impl TimeSheet {
|
|||||||
self.times.iter().map(TimePoint::to_string).collect()
|
self.times.iter().map(TimePoint::to_string).collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adjust the current time by `minutes` and round the result to a multiple of `minutes`.
|
||||||
|
* This is so I can adjust in steps of 5 but still get nice, even numbers in the output.
|
||||||
|
*/
|
||||||
|
pub fn shift_current(&mut self, minutes: i64) {
|
||||||
|
let time = &mut self.times[self.selected].time;
|
||||||
|
let current_minute = time.minute() as i64;
|
||||||
|
*time += Duration::minutes(minutes - current_minute % minutes);
|
||||||
|
}
|
||||||
|
|
||||||
fn current(&self) -> &TimePoint {
|
fn current(&self) -> &TimePoint {
|
||||||
&self.times[self.selected]
|
&self.times[self.selected]
|
||||||
}
|
}
|
||||||
|
@ -69,6 +69,8 @@ impl Tracc {
|
|||||||
}
|
}
|
||||||
Key::Char('a') | Key::Char('A') => self.set_mode(Mode::Insert)?,
|
Key::Char('a') | Key::Char('A') => self.set_mode(Mode::Insert)?,
|
||||||
Key::Char(' ') if self.focus == Focus::Top => self.todos.toggle_current(),
|
Key::Char(' ') if self.focus == Focus::Top => self.todos.toggle_current(),
|
||||||
|
Key::Char('-') if self.focus == Focus::Bottom => self.times.shift_current(-5),
|
||||||
|
Key::Char('+') if self.focus == Focus::Bottom => self.times.shift_current(5),
|
||||||
// dd
|
// dd
|
||||||
Key::Char('d') => {
|
Key::Char('d') => {
|
||||||
if let Some(Ok(Key::Char('d'))) = inputs.next() {
|
if let Some(Ok(Key::Char('d'))) = inputs.next() {
|
||||||
|
Loading…
Reference in New Issue
Block a user