Fix relative offset in line printing

This commit is contained in:
Matúš Púll 2025-05-28 16:05:15 +02:00
parent d8981403ac
commit 7259c7ba7a
2 changed files with 17 additions and 25 deletions

View file

@ -13,8 +13,8 @@ void Editor::save() {
}
// Clear line
void Editor::clear_line(count_type r) {
::move(r - file_offset, 0);
void Editor::clear_line(count_type i) {
::move(i, 0);
clrtoeol();
}
// Print any text
@ -32,16 +32,10 @@ void Editor::print_file(count_type start) {
else
clear_line(i);
}
// Print input
void Editor::print_input(string text) {
clear_line(file_offset + cur.r);
::move(cur.r, 0);
adds(text);
}
// Generic input taking
template <typename F>
string Editor::get_input(string prompt, F func) {
print_input(prompt+": ");
print_text(cur.r, prompt+": ");
string s = "";
char ch = getch();
while((ch != ENTER && func(ch)) || ch == BS) {
@ -49,7 +43,7 @@ string Editor::get_input(string prompt, F func) {
s.pop_back();
else
s += ch;
print_input(prompt+": " + s);
print_text(cur.r, prompt+": " + s);
ch = getch();
}
return s;
@ -154,7 +148,7 @@ bool Editor::take_action() {
char ch = getch();
switch(mode) {
case NORMAL:
print_line(file_offset + cur.r);
print_current_line();
switch(ch) {
case 'h': case 'j': case 'k': case 'l':
move_cursor(ch);
@ -175,7 +169,7 @@ bool Editor::take_action() {
break;
case 'x':
file.remove(cur + file_offset);
print_line(file_offset + cur.r);
print_current_line();
break;
case 'o':
file.insert(file_offset + cur.r, "");
@ -197,12 +191,12 @@ bool Editor::take_action() {
break;
case 'f':
last_find = get_string("to find");
print_line(file_offset + cur.r);
print_current_line();
case 'n':
{
auto result = find(last_find);
if(!result.first) {
print_line(file_offset + cur.r);
print_current_line();
break;
}
jump(result.second);
@ -212,12 +206,12 @@ bool Editor::take_action() {
case 's':
last_find = get_string("to find");
last_replace = get_string("to replace");
print_line(file_offset + cur.r);
print_current_line();
case 'r':
{
auto result = find(last_find);
if(!result.first) {
print_line(file_offset + cur.r);
print_current_line();
break;
}
jump(result.second);
@ -239,7 +233,7 @@ bool Editor::take_action() {
case ESC:
mode = NORMAL;
// Change current row into current_insert TODO
print_line(file_offset + cur.r);
print_current_line();
break;
case BS:
// Modify current_insert TODO
@ -247,7 +241,7 @@ bool Editor::take_action() {
cur.c -= 1;
file.remove(cur + file_offset);
}
print_line(file_offset + cur.r);
print_current_line();
break;
case ENTER:
// Modify current_insert and update TODO
@ -260,18 +254,18 @@ bool Editor::take_action() {
// Modify current_insert TODO
file.insert(cur + file_offset, "\t");
cur.c += TAB_SIZE - (cur.c % TAB_SIZE);
print_line(file_offset + cur.r);
print_current_line();
break;
default:
// Modify current_insert TODO
file.insert(cur + file_offset, string(1, ch));
cur.c += 1;
print_line(file_offset + cur.r);
print_current_line();
break;
}
break;
case SELECT:
print_line(file_offset + cur.r);
print_current_line();
switch(ch) {
case 'h': case 'j': case 'k': case 'l':
move_cursor(ch);

View file

@ -1,6 +1,5 @@
#pragma once
#include <ncurses.h>
#include <curses.h>
#include <vector>
#include <fstream>
#include <iostream>
@ -104,12 +103,11 @@ class Editor{
void save();
// Printing
void clear_line(count_type r);
void clear_line(count_type i);
void print_text(count_type i, string text);
void print_line(count_type r) { print_text(r - file_offset, file.get_line(r)); }
void print_current_line() { print_text(cur.r, file.get_line(file_offset + cur.r)); }
// User input
void print_input(string text);
template <typename F>
string get_input(string prompt, F func);
string get_string(string prompt);