From c77be4c48283fef09b12b6942cd3b4ae7575528e Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Wed, 15 Nov 2017 21:05:12 -0500 Subject: [PATCH] Implement X command --- src/gui/BufferPane.cc | 13 ++++++++++++- src/gui/BufferPane.h | 3 ++- src/gui/Window.cc | 3 ++- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/gui/BufferPane.cc b/src/gui/BufferPane.cc index 1f19356..b773712 100644 --- a/src/gui/BufferPane.cc +++ b/src/gui/BufferPane.cc @@ -325,7 +325,7 @@ void BufferPane::insert_code_point(uint32_t code_point) } } -void BufferPane::kill_character_at_cursor() +void BufferPane::kill_character_forward() { if (**m_iterator != '\n') { @@ -339,6 +339,17 @@ void BufferPane::kill_character_at_cursor() } } +void BufferPane::kill_character_backward() +{ + Buffer::Iterator it = *m_iterator; + if (it.go_left_in_line()) + { + m_buffer->erase_code_point(it); + m_buffer_view->update(); + m_window->request_redraw(); + } +} + size_t BufferPane::display_column() const { if (!m_iterator->valid()) diff --git a/src/gui/BufferPane.h b/src/gui/BufferPane.h index c70fe74..0fa0b39 100644 --- a/src/gui/BufferPane.h +++ b/src/gui/BufferPane.h @@ -35,7 +35,8 @@ public: void enter_insert_mode(Window::EnterInsertModeMode which); void insert_code_point(uint32_t code_point); void exit_insert_mode(); - void kill_character_at_cursor(); + void kill_character_forward(); + void kill_character_backward(); bool insert_mode() const { return m_buffer->insert_mode(); } void scroll_window_up(Window::ScrollMode scroll_mode); void scroll_window_down(Window::ScrollMode scroll_mode); diff --git a/src/gui/Window.cc b/src/gui/Window.cc index 0c8cd5b..0fdeaee 100644 --- a/src/gui/Window.cc +++ b/src/gui/Window.cc @@ -340,9 +340,10 @@ void Window::execute_command(const Command & command) case Command::DELETE_LINE: break; case Command::DELETE_CHAR: - m_focused_buffer_pane->kill_character_at_cursor(); + m_focused_buffer_pane->kill_character_forward(); break; case Command::DELETE_CHAR_BACK: + m_focused_buffer_pane->kill_character_backward(); break; case Command::CHANGE_MOTION: break;