From 8ce06103b5c5848b48dd31e21b6efd3eefed03d7 Mon Sep 17 00:00:00 2001 From: Jan Tuomi Date: Sun, 9 Oct 2016 13:28:54 +0300 Subject: Add line editing --- editor.cpp | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) (limited to 'editor.cpp') diff --git a/editor.cpp b/editor.cpp index 9c35249..3eb0d7a 100644 --- a/editor.cpp +++ b/editor.cpp @@ -1,5 +1,7 @@ #include "editor.h" #include "utils.h" +#include +#include Editor::Editor(std::vector* contents): m_current_line(0) { @@ -15,12 +17,45 @@ int Editor::run_editor() { print_contents_on_line(m_current_line); char input = Utils::getch(); + switch (input) { + case 'e': + edit_command(); + break; + default: + break; + } } return 0; } int Editor::print_contents_on_line(int line) const { - for (int i = line; i < m_contents->size(); i++) { + for (int i = line; i < std::min(m_contents->size(), line + OUTPUT_LINE_MAX); i++) { std::cout << i << " " << m_contents->at(i) << '\n'; } } + +int Editor::edit_command() { + std::cout << "Edit which line? "; + int line; + std::cin >> line; + if (std::cin.fail() || line < 0 || line >= m_contents->size()) { + std::cout << "Not a valid line number!\n"; + std::cin.clear(); + std::cin.ignore(std::numeric_limits::max(),'\n'); + return 1; + } + + edit_line(line); +} + +int Editor::edit_line(int line) { + std::cout << "> "; + std::string input; + + std::cin.ignore(std::numeric_limits::max(),'\n'); + std::getline(std::cin, input); + std::cin.clear(); + (*m_contents)[line] = input; + + return 0; +} -- cgit v1.3