diff --git a/src/input.rs b/src/input.rs index 5e01bfb..2a4721e 100644 --- a/src/input.rs +++ b/src/input.rs @@ -30,8 +30,12 @@ pub fn handle_task_edit(state: &mut State<'_>, key: event::KeyEvent) -> Result<( Some(task) }, (KeyCode::Enter, TaskEditFocus::ConfirmBtn) => { - let title = task.title.clone().into_lines().join("\n"); - let description = task.description.clone().into_lines().join("\n"); + // The structure of this function is so we avoid an + // unncessary clone() here. We can just transfer + // ownership of these strings right into the task + // that's going to be created/updated + let title = task.title.into_lines().join("\n"); + let description = task.description.into_lines().join("\n"); if task.is_edit { state.edit_task(title, description)?; } else { @@ -61,23 +65,22 @@ pub fn handle_task_edit(state: &mut State<'_>, key: event::KeyEvent) -> Result<( pub fn handle_main(state: &mut State<'_>, key: event::KeyEvent) -> Result<(), Error> { match key.code { - KeyCode::Char('q') => state.quit = true, - KeyCode::Char('h') | KeyCode::Left => state.select_previous_column()?, - KeyCode::Char('j') | KeyCode::Down => state.select_next_task()?, - KeyCode::Char('k') | KeyCode::Up => state.select_previous_task()?, - KeyCode::Char('l') | KeyCode::Right => state.select_next_column()?, - KeyCode::Char('g') => state.select_first_task()?, - KeyCode::Char('G') => state.select_last_task()?, - KeyCode::Char('H') => state.move_task_previous_column()?, - KeyCode::Char('L') => state.move_task_next_column()?, - KeyCode::Char('J') => state.move_task_down()?, - KeyCode::Char('K') => state.move_task_up()?, - KeyCode::Char('n') => state.task_edit_state = Some(TaskState::default()), - KeyCode::Char('e') => state.task_edit_state = state.get_task_state_from_current(), - KeyCode::Char('D') => state.delete_task()?, - _ => {} + KeyCode::Char('q') => Ok(state.quit = true), + KeyCode::Char('h') | KeyCode::Left => state.select_previous_column(), + KeyCode::Char('j') | KeyCode::Down => state.select_next_task(), + KeyCode::Char('k') | KeyCode::Up => state.select_previous_task(), + KeyCode::Char('l') | KeyCode::Right => state.select_next_column(), + KeyCode::Char('g') => state.select_first_task(), + KeyCode::Char('G') => state.select_last_task(), + KeyCode::Char('H') => state.move_task_previous_column(), + KeyCode::Char('L') => state.move_task_next_column(), + KeyCode::Char('J') => state.move_task_down(), + KeyCode::Char('K') => state.move_task_up(), + KeyCode::Char('n') => Ok(state.task_edit_state = Some(TaskState::default())), + KeyCode::Char('e') => Ok(state.task_edit_state = state.get_task_state_from_current()), + KeyCode::Char('D') => state.delete_task(), + _ => Ok(()) } - Ok(()) } /// # Errors diff --git a/src/ui.rs b/src/ui.rs index d21dd08..22d477f 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -27,16 +27,15 @@ fn draw_tasks(f: &mut Frame<'_, B>, area: Rect, state: &State<'_>) { let mut style = Style::default(); let col_idx = state.selected_column_idx; let task_idx = state.get_selected_column().selected_task_idx; - let item_txt; + let mut span; if i == col_idx && j == task_idx { style = style.add_modifier(Modifier::BOLD | Modifier::UNDERLINED); - item_txt = format!("{} 👈", task.title); + span = Span::raw(format!("{} 👈", task.title)); } else { - item_txt = task.title.clone(); + span = Span::raw(&task.title); } - let mut s = Span::raw(item_txt); - s.style = style; - ListItem::new(vec![Spans::from(s)]) + span.style = style; + ListItem::new(vec![Spans::from(span)]) }) .collect(); let mut style = Style::default(); @@ -102,10 +101,10 @@ pub fn draw_task_popup(f: &mut Frame<'_, B>, state: &mut State<'_>, .title(popup_title) .title_alignment(Alignment::Center) .borders(Borders::ALL); + let block_inner = block.inner(area); f.render_widget(Clear, area); - f.render_widget(Paragraph::new("").block(block.clone()), area); + f.render_widget(Paragraph::new("").block(block), area); if let Some(task) = &mut state.task_edit_state { - let block_inner = block.inner(area); let layout = Layout::default() .direction(Direction::Vertical) .constraints(