Add jumping to specific line

This commit is contained in:
Matúš Púll 2025-04-08 15:06:10 +02:00
parent 86dad44405
commit a20cd81dff

View file

@ -36,6 +36,15 @@ void insert_char(int r, int s, char ch) { file.find(file_offset+r)->text.insert(
void remove_char(int r, int s, int len=1) { file.find(file_offset+r)->text.erase(s,len); } void remove_char(int r, int s, int len=1) { file.find(file_offset+r)->text.erase(s,len); }
void remove_line(int r) { file.remove(file_offset+r); } void remove_line(int r) { file.remove(file_offset+r); }
int get_number() {
char ch = '0';
string s = "";
while(ch >= '0' && ch <= '9') {
s += ch;
ch = getch();
}
return stoi(s);
}
// Load file to buffer // Load file to buffer
bool load(string filename) { bool load(string filename) {
@ -88,7 +97,6 @@ string split_line(int r, int s) {
} }
// TODO skoky a přesuny
// TODO kopirování // TODO kopirování
// TODO hledání a nahrazování // TODO hledání a nahrazování
// TODO undo // TODO undo
@ -139,6 +147,12 @@ void move_cursor(char ch) {
break; break;
} }
} }
// Skoky a přesuny
void jump(int r) {
file_offset = std::min(r, std::max((int)(file.size()-LINES), 0));
row = 0;
jump_line_end();
}
int main(int argc, char* argv[]) { int main(int argc, char* argv[]) {
@ -169,6 +183,10 @@ int main(int argc, char* argv[]) {
case 'h': case 'j': case 'k': case 'l': case 'h': case 'j': case 'k': case 'l':
move_cursor(ch); move_cursor(ch);
break; break;
case 'g':
jump(get_number());
print_file();
break;
case 'd': case 'd':
remove_line(row); remove_line(row);
print_file(row); print_file(row);