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::QUIT, std::make_unique<modes::Quit>(*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->config.get<std::string>("linenumbers") == "none" ? LineMode::NONE : LineMode::NUMBERS;
@ -40,8 +41,11 @@ namespace groove {
std::getline(file, line);
this->buffer->insert(line);
}
this->buffer->changed = false;
return true;
}
this->buffer->changed = false;
return false;
}

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

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