added save on exit, when buffer has changed

development
Michael Ochmann 8 years ago
parent 097143ecf7
commit fa2a65d6c1
  1. 4
      src/Editor.cpp
  2. 5
      src/Editor.hpp
  3. 3
      src/modes/Edit.cpp
  4. 34
      src/modes/Exit.cpp
  5. 18
      src/modes/Exit.hpp

@ -14,6 +14,7 @@ namespace groove {
this->modes.emplace(Mode::EDIT, std::make_unique<modes::Edit>(*this)); this->modes.emplace(Mode::EDIT, std::make_unique<modes::Edit>(*this));
this->modes.emplace(Mode::QUIT, std::make_unique<modes::Quit>(*this)); this->modes.emplace(Mode::QUIT, std::make_unique<modes::Quit>(*this));
this->modes.emplace(Mode::SAVE, std::make_unique<modes::Save>(*this)); this->modes.emplace(Mode::SAVE, std::make_unique<modes::Save>(*this));
this->modes.emplace(Mode::EXIT, std::make_unique<modes::Exit>(*this));
this->lineMode = this->config.get<std::string>("linenumbers") == "relative" ? LineMode::RELATIVE : this->lineMode = this->config.get<std::string>("linenumbers") == "relative" ? LineMode::RELATIVE :
this->config.get<std::string>("linenumbers") == "none" ? LineMode::NONE : LineMode::NUMBERS; this->config.get<std::string>("linenumbers") == "none" ? LineMode::NONE : LineMode::NUMBERS;
@ -40,8 +41,11 @@ namespace groove {
std::getline(file, line); std::getline(file, line);
this->buffer->insert(line); this->buffer->insert(line);
} }
this->buffer->changed = false;
return true; return true;
} }
this->buffer->changed = false;
return false; return false;
} }

@ -10,6 +10,7 @@
#include <modes/Save.hpp> #include <modes/Save.hpp>
#include <History.hpp> #include <History.hpp>
#include <config/ConfigParser.hpp> #include <config/ConfigParser.hpp>
#include <modes/Exit.hpp>
namespace groove { namespace groove {
@ -17,7 +18,8 @@ namespace groove {
INSERT, INSERT,
EDIT, EDIT,
SAVE, SAVE,
QUIT QUIT,
EXIT
}; };
enum LineMode { enum LineMode {
@ -33,6 +35,7 @@ namespace groove {
friend class modes::Edit; friend class modes::Edit;
friend class modes::Quit; friend class modes::Quit;
friend class modes::Save; friend class modes::Save;
friend class modes::Exit;
friend class History; friend class History;
private: private:
long x, y; long x, y;

@ -10,7 +10,8 @@ namespace groove {
return; return;
switch (c) { switch (c) {
case 'q': case 'q':
this->editor.mode_ = groove::Mode::QUIT; this->editor.mode_ = groove::Mode::EXIT;
this->editor.input(' ');
break; break;
case 'i': case 'i':
this->editor.mode_ = groove::Mode::INSERT; this->editor.mode_ = groove::Mode::INSERT;

@ -0,0 +1,34 @@
#include <modes/Exit.hpp>
#include <Editor.hpp>
namespace groove {
namespace modes {
void Exit::input(int c) {
if (!this->editor.buffer->changed) {
this->editor.mode_ = groove::Mode::QUIT;
return;
}
this->status_ = "Save file '" + this->editor.filename + "'? [Y/N]:";
switch (c) {
case 27:
this->status_ = "";
this->editor.mode_ = groove::Mode::EDIT;
this->editor.input(' ');
break;
case 'n':
this->editor.mode_ = groove::Mode::QUIT;
break;
case 'y':
if (!this->editor.save())
std::cerr << "Could not write to file: '" << this->editor.filename << "'\n";
this->editor.mode_ = groove::Mode::QUIT;
break;
}
}
}
}

@ -0,0 +1,18 @@
#pragma once
#include <modes/Mode.hpp>
namespace groove {
namespace modes {
class Exit : public Mode {
public:
using Mode::Mode;
std::string status() {
return this->status_;
}
void input(int c);
};
}
}
Loading…
Cancel
Save