121 lines
1.9 KiB
C++
121 lines
1.9 KiB
C++
#include <ncurses.h>
|
|
#include <curses.h>
|
|
#include <string>
|
|
#include <vector>
|
|
#include <fstream>
|
|
|
|
using std::string;
|
|
using std::vector;
|
|
|
|
#define adds(s) addstr(s.c_str())
|
|
|
|
// Global variables
|
|
vector<string> file(0);
|
|
int row = 0, col = 0;
|
|
|
|
enum mode_ty {
|
|
insert, normal
|
|
};
|
|
|
|
// Load file to buffer
|
|
bool load(string filename) {
|
|
std::ifstream infile(filename);
|
|
if(!infile.good())
|
|
return 1;
|
|
string line;
|
|
while (std::getline(infile, line))
|
|
file.push_back(line);
|
|
return 0;
|
|
}
|
|
|
|
// Save file from buffer
|
|
bool save(string filename) {
|
|
std::ofstream outfile(filename);
|
|
if(!outfile.good())
|
|
return 1;
|
|
for(string line : file)
|
|
outfile << line << std::endl;
|
|
return 0;
|
|
}
|
|
|
|
// Print file content
|
|
void print_file() {
|
|
for(int i = 0; i < file.size(); i++) {
|
|
move(i, 0);
|
|
adds(file[i]);
|
|
}
|
|
move(row, col);
|
|
}
|
|
|
|
// TODO psaní do souboru
|
|
// TODO mazání v souboru
|
|
// TODO vkládání a mazání řádků
|
|
// TODO skoky a přesuny
|
|
// TODO kopirování
|
|
// TODO hledání a nahrazování
|
|
// TODO undo
|
|
|
|
// Cursor movement
|
|
void move_cursor(char ch) {
|
|
move(row, col);
|
|
addch(file[row][col]);
|
|
move(row, col);
|
|
|
|
switch(ch) {
|
|
case 'h':
|
|
if(col > 0)
|
|
move(row, --col);
|
|
break;
|
|
|
|
case 'j':
|
|
if(row < file.size()-1) {
|
|
move(++row, col);
|
|
if(file[row].size() <= col) {
|
|
col = file[row].size()-1;
|
|
move(row, col);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 'k':
|
|
if(row > 0) {
|
|
move(--row, col);
|
|
if(file[row].size() <= col) {
|
|
col = file[row].size()-1;
|
|
move(row, col);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 'l':
|
|
if(col < file[row].size()-1)
|
|
move(row, ++col);
|
|
break;
|
|
}
|
|
}
|
|
|
|
int main(int argc, char* argv[]) {
|
|
|
|
// Init
|
|
initscr();
|
|
refresh();
|
|
if(argc > 1 && load(argv[1]))
|
|
return 1;
|
|
if(argc > 1 && save(argv[1]))
|
|
return 1;
|
|
|
|
print_file();
|
|
|
|
mode_ty mode = normal;
|
|
|
|
// Main loop
|
|
while(true) {
|
|
char ch = getch();
|
|
move_cursor( ch);
|
|
refresh();
|
|
}
|
|
|
|
// End
|
|
endwin();
|
|
return 0;
|
|
}
|