Ensure cursor stays visible with wrapped line bigger than window

Fixes #1459
This commit is contained in:
Maxime Coste 2017-06-27 09:29:25 +01:00
parent 169426dc3c
commit ce8078ad73
5 changed files with 17 additions and 2 deletions

View File

@ -687,6 +687,7 @@ struct WrapHighlighter : Highlighter
return; return;
const Buffer& buffer = context.buffer(); const Buffer& buffer = context.buffer();
const auto& cursor = context.selections().main().cursor();
const int tabstop = context.options()["tabstop"].get<int>(); const int tabstop = context.options()["tabstop"].get<int>();
const LineCount win_height = context.window().dimensions().line; const LineCount win_height = context.window().dimensions().line;
for (auto it = display_buffer.lines().begin(); for (auto it = display_buffer.lines().begin();
@ -717,10 +718,18 @@ struct WrapHighlighter : Highlighter
line.erase(atom_it, line.end()); line.erase(atom_it, line.end());
if (it+1 - display_buffer.lines().begin() == win_height) if (it+1 - display_buffer.lines().begin() == win_height)
{
if (cursor >= new_line.begin()->begin()) // strip first lines if cursor is not visible
{
display_buffer.lines().erase(display_buffer.lines().begin(), display_buffer.lines().begin()+1);
--it;
}
else
{ {
display_buffer.lines().erase(it+1, display_buffer.lines().end()); display_buffer.lines().erase(it+1, display_buffer.lines().end());
return; return;
} }
}
it = display_buffer.lines().insert(it+1, new_line); it = display_buffer.lines().insert(it+1, new_line);
coord = next_split_coord(buffer, wrap_column, tabstop, coord); coord = next_split_coord(buffer, wrap_column, tabstop, coord);
@ -790,6 +799,8 @@ struct WrapHighlighter : Highlighter
coord = split_coord; coord = split_coord;
} }
kak_assert(setup.cursor_pos.column >= 0 and setup.cursor_pos.column < setup.window_range.column); kak_assert(setup.cursor_pos.column >= 0 and setup.cursor_pos.column < setup.window_range.column);
if (setup.cursor_pos.line >= win_height) // In that case we will remove some lines from the top
setup.cursor_pos.line = win_height - 1;
} }
win_line += wrap_count + 1; win_line += wrap_count + 1;

View File

@ -0,0 +1 @@
ge

View File

@ -0,0 +1 @@
Eius voluptas ut blanditiis tempore quia harum quae nobis. Eum magnam natus quo unde animi voluptatem laudantium. Repellat quidem animi omnis laudantium ut sed. A vero omnis autem qui qui. Maxime qui quo voluptatem vel id similique est doloribus. Exercitationem tenetur eos sint rerum eos et. Quia dolor esse distinctio eveniet voluptas sed ut. Cupiditate doloremque ut cupiditate nulla possimus. Dolorem natus autem aspernatur et placeat laudantium molestiae laudantium. Accusamus ea labore asperiores dignissimos explicabo ab culpa. Suscipit aliquam voluptas fuga voluptas animi. Perferendis eaque aut et iusto libero et quod. Ipsa maxime animi in libero in similique aliquam repudiandae. Totam omnis facere consequatur praesentium sapiente. Voluptas et deserunt repellendus velit. Veritatis est tempore a qui nihil harum ea qui. Voluptatum sequi deleniti saepe. Quae facere sunt quam esse est voluptatem qui dolorem. Et aut ut porro blanditiis impedit minus quia. Reiciendis optio quas eius veritatis. Delectus ea ipsum aut aspernatur. Iure corporis quisquam nisi in aspernatur ipsam et aliquam. Voluptatum facilis deserunt veritatis nobis. Alias fuga voluptatem eum ea ullam blanditiis quam. Nam omnis magni quaerat officia non dolor voluptatem. Eius et ut quia iusto occaecati saepe eos. Ut et esse quas quas. Aut sunt porro similique aut. Et veniam repellendus blanditiis necessitatibus provident fugit perspiciatis cupiditate. Cum voluptas dicta necessitatibus ut id nihil nihil. Similique asperiores atque neque perspiciatis. Iusto ea et recusandae dolorum ut totam. Quis quibusdam quo suscipit nihil molestiae porro aut. Quas reprehenderit dolorum omnis libero ipsa sapiente ipsam maxime. Quae repudiandae nulla aut eos unde. Architecto qui neque quis quis dolores voluptatem est. Nobis asperiores molestias accusantium molestias soluta. Voluptatem quod temporibus itaque minima. Non quos amet ab consequuntur qui. Dolorem laudantium dicta placeat necessitatibus qui. Molestias laboriosam ut quis non odio incidunt quod optio. Vel qui molestiae ipsum et sunt rem voluptatibus. Pariatur voluptatem officia mollitia harum ut. Ipsa eum dolor quo. Rerum ullam beatae doloribus unde.

View File

@ -0,0 +1 @@
Eius voluptas ut blanditiis tempore quia harum quae nobis. Eum magnam natus quo unde animi voluptatem laudantium. Repellat quidem animi omnis laudantium ut sed. A vero omnis autem qui qui. Maxime qui quo voluptatem vel id similique est doloribus. Exercitationem tenetur eos sint rerum eos et. Quia dolor esse distinctio eveniet voluptas sed ut. Cupiditate doloremque ut cupiditate nulla possimus. Dolorem natus autem aspernatur et placeat laudantium molestiae laudantium. Accusamus ea labore asperiores dignissimos explicabo ab culpa. Suscipit aliquam voluptas fuga voluptas animi. Perferendis eaque aut et iusto libero et quod. Ipsa maxime animi in libero in similique aliquam repudiandae. Totam omnis facere consequatur praesentium sapiente. Voluptas et deserunt repellendus velit. Veritatis est tempore a qui nihil harum ea qui. Voluptatum sequi deleniti saepe. Quae facere sunt quam esse est voluptatem qui dolorem. Et aut ut porro blanditiis impedit minus quia. Reiciendis optio quas eius veritatis. Delectus ea ipsum aut aspernatur. Iure corporis quisquam nisi in aspernatur ipsam et aliquam. Voluptatum facilis deserunt veritatis nobis. Alias fuga voluptatem eum ea ullam blanditiis quam. Nam omnis magni quaerat officia non dolor voluptatem. Eius et ut quia iusto occaecati saepe eos. Ut et esse quas quas. Aut sunt porro similique aut. Et veniam repellendus blanditiis necessitatibus provident fugit perspiciatis cupiditate. Cum voluptas dicta necessitatibus ut id nihil nihil. Similique asperiores atque neque perspiciatis. Iusto ea et recusandae dolorum ut totam. Quis quibusdam quo suscipit nihil molestiae porro aut. Quas reprehenderit dolorum omnis libero ipsa sapiente ipsam maxime. Quae repudiandae nulla aut eos unde. Architecto qui neque quis quis dolores voluptatem est. Nobis asperiores molestias accusantium molestias soluta. Voluptatem quod temporibus itaque minima. Non quos amet ab consequuntur qui. Dolorem laudantium dicta placeat necessitatibus qui. Molestias laboriosam ut quis non odio incidunt quod optio. Vel qui molestiae ipsum et sunt rem voluptatibus. Pariatur voluptatem officia mollitia harum ut. Ipsa eum dolor quo. Rerum ullam beatae doloribus unde.

View File

@ -0,0 +1 @@
add-highlighter wrap