diff --git a/main.cpp b/main.cpp index 220b4af..a9918b4 100644 --- a/main.cpp +++ b/main.cpp @@ -250,10 +250,16 @@ void move_cursor(char ch) { break; } } -// Jump to line +// Jump to line TODO scroll down if needed void jump(count_type r) { + if(r >= get_size()) r = get_size()-1; + if(r - file_offset > LINES || r < file_offset) - file_offset = max(0, min(file.size()-LINES, r)); + file_offset = max(0, min(get_size()-LINES, r)); + + else if(file_offset + LINES > get_size() && get_size() > LINES) + file_offset = get_size() - LINES; + cur.r = max(0, r - file_offset); jump_line_end(); } @@ -316,9 +322,15 @@ int main(int argc, char* argv[]) { jump(get_number("line number")); print_file(file_offset); break; + case 'G': + jump(get_size()); + print_file(file_offset); + break; case 'd': remove(file_offset + cur.r); - print_file(file_offset + cur.r); + if(file_offset + cur.r >= get_size()) + jump(cur + file_offset); + print_file(file_offset); break; case 'x': remove(cur + file_offset); @@ -418,6 +430,8 @@ int main(int argc, char* argv[]) { break; case 'x': remove_selection(cur + file_offset); + if(file_offset + cur.r >= get_size()) + jump(cur + file_offset); print_file(); mode = NORMAL; break;