aboutsummaryrefslogtreecommitdiffstats
path: root/editor.cpp
diff options
context:
space:
mode:
authorJan Tuomi <jan-sebastian.tuomi@aalto.fi>2016-10-09 13:28:54 +0300
committerJan Tuomi <jan-sebastian.tuomi@aalto.fi>2016-10-09 14:50:24 +0300
commit8ce06103b5c5848b48dd31e21b6efd3eefed03d7 (patch)
treeb056a1e7ddfcc06e10b672dfd733b7ddc770b310 /editor.cpp
parent7c9146efca9b565777e1093e65272f710ae5d0d9 (diff)
Add line editing
Diffstat (limited to 'editor.cpp')
-rw-r--r--editor.cpp37
1 files changed, 36 insertions, 1 deletions
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 <limits>
+#include <iostream>
Editor::Editor(std::vector<std::string>* 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<std::streamsize>::max(),'\n');
+ return 1;
+ }
+
+ edit_line(line);
+}
+
+int Editor::edit_line(int line) {
+ std::cout << "> ";
+ std::string input;
+
+ std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
+ std::getline(std::cin, input);
+ std::cin.clear();
+ (*m_contents)[line] = input;
+
+ return 0;
+}