Rename modes and utility functions

This commit is contained in:
Matúš Púll 2025-04-09 14:19:29 +02:00
parent 3962f30539
commit 112e20f4b1

View file

@ -1,19 +1,17 @@
#include <ncurses.h> #include <ncurses.h>
#include <curses.h> #include <curses.h>
#include <string> #include <string>
#include <vector>
#include <fstream> #include <fstream>
#include "treap.hpp" #include "treap.hpp"
using std::string; using std::string;
using std::vector;
#define ESC 27 #define ESC 27
#define ENTER 10 #define ENTER 10
#define BS 127 #define BS 127
#define adds(s) addstr(s.c_str()) #define adds(s) addstr(s.c_str())
enum mode_type { insert, normal }; enum mode_type { INSERT, NORMAL, SELECT };
// Global variables // Global variables
@ -31,10 +29,11 @@ string get_line(int r) {
} }
char get(int r, int s) { return get_line(file_offset+r)[s]; } char get(int r, int s) { return get_line(file_offset+r)[s]; }
void set(int r, int s, char ch) { file.find(file_offset+r)->text[s] = ch; } void set(int r, int s, char ch) { file.find(file_offset+r)->text[s] = ch; }
void insert_line(int r, string text = "") { file.insert(file_offset+r, text); } void new_line(int r, string text = "") { file.insert(file_offset+r, text); }
void insert_char(int r, int s, char ch) { file.find(file_offset+r)->text.insert(s, string{ch}); } void insert(int r, int s, string t) { file.find(file_offset+r)->text.insert(s, t); }
void remove_char(int r, int s, int len=1) { file.find(file_offset+r)->text.erase(s,len); } void insert(int r, int s, char ch) { insert(r, s, string{ch}); }
void remove_line(int r) { file.remove(file_offset+r); } void remove(int r, int s, int len=1) { file.find(file_offset+r)->text.erase(s,len); }
void remove(int r) { file.remove(file_offset+r); }
int get_number() { int get_number() {
char ch = '0'; char ch = '0';
@ -54,7 +53,7 @@ bool load(string filename) {
string line; string line;
while (std::getline(infile, line)) while (std::getline(infile, line))
file.insert(file.size(), line); file.append(line);
return 0; return 0;
} }
// Save file from buffer // Save file from buffer
@ -92,7 +91,7 @@ void print_file(int start = 0) {
string split_line(int r, int s) { string split_line(int r, int s) {
string line = get_line(r); string line = get_line(r);
string ret = line.substr(s, line.size()); string ret = line.substr(s, line.size());
remove_char(r, s, line.size()-s); remove(r, s, line.size()-s);
return ret; return ret;
} }
@ -169,7 +168,7 @@ int main(int argc, char* argv[]) {
refresh(); refresh();
print_file(); print_file();
mode_type mode = normal; mode_type mode = NORMAL;
// Main loop // Main loop
bool run = true; bool run = true;
@ -177,7 +176,7 @@ int main(int argc, char* argv[]) {
move(row, col); move(row, col);
char ch = getch(); char ch = getch();
switch(mode) { switch(mode) {
case normal: case NORMAL:
print_line(row); print_line(row);
switch(ch) { switch(ch) {
case 'h': case 'j': case 'k': case 'l': case 'h': case 'j': case 'k': case 'l':
@ -188,15 +187,15 @@ int main(int argc, char* argv[]) {
print_file(); print_file();
break; break;
case 'd': case 'd':
remove_line(row); remove(row);
print_file(row); print_file(row);
break; break;
case 'x': case 'x':
remove_char(row, col); remove(row, col);
print_line(row); print_line(row);
break; break;
case 'o': case 'o':
insert_line(row); new_line(row);
print_file(row); print_file(row);
break; break;
case 'q': case 'q':
@ -206,33 +205,34 @@ int main(int argc, char* argv[]) {
save(filename); save(filename);
break; break;
case 'i': case 'i':
mode = insert; mode = INSERT;
break; break;
default: default:
break; break;
} }
break; break;
case insert: case INSERT:
switch(ch) { switch(ch) {
case ESC: case ESC:
mode = normal; mode = NORMAL;
print_line(row); print_line(row);
break; break;
case BS: case BS:
if(col>0) if(col>0)
remove_char(row, --col); remove(row, --col);
print_line(row); print_line(row);
break; break;
case ENTER: case ENTER:
insert_line(row+1, split_line(row, col)); new_line(row+1, split_line(row, col));
print_file(row++); print_file(row++);
jump_line_end(); jump_line_end();
break; break;
default: default:
insert_char(row, col++, ch); insert(row, col++, ch);
print_line(row); print_line(row);
break; break;
} }
break;
} }
refresh(); refresh();
} }