Display status line on top in ncurses
This commit is contained in:
parent
7d4c9c2ccf
commit
4235ab5249
|
@ -25,6 +25,8 @@
|
||||||
namespace Kakoune
|
namespace Kakoune
|
||||||
{
|
{
|
||||||
|
|
||||||
|
constexpr bool status_on_top = true;
|
||||||
|
|
||||||
using std::min;
|
using std::min;
|
||||||
using std::max;
|
using std::max;
|
||||||
|
|
||||||
|
@ -335,7 +337,7 @@ void NCursesUI::draw(const DisplayBuffer& display_buffer,
|
||||||
{
|
{
|
||||||
check_resize();
|
check_resize();
|
||||||
|
|
||||||
LineCount line_index = 0;
|
LineCount line_index = status_on_top ? 1 : 0;
|
||||||
for (const DisplayLine& line : display_buffer.lines())
|
for (const DisplayLine& line : display_buffer.lines())
|
||||||
{
|
{
|
||||||
wmove(m_window, (int)line_index, 0);
|
wmove(m_window, (int)line_index, 0);
|
||||||
|
@ -345,14 +347,15 @@ void NCursesUI::draw(const DisplayBuffer& display_buffer,
|
||||||
}
|
}
|
||||||
|
|
||||||
set_face(m_window, { Colors::Blue, Colors::Default });
|
set_face(m_window, { Colors::Blue, Colors::Default });
|
||||||
for (;line_index < m_dimensions.line; ++line_index)
|
while (line_index < m_dimensions.line + (status_on_top ? 1 : 0))
|
||||||
{
|
{
|
||||||
wmove(m_window, (int)line_index, 0);
|
wmove(m_window, (int)line_index++, 0);
|
||||||
wclrtoeol(m_window);
|
wclrtoeol(m_window);
|
||||||
waddch(m_window, '~');
|
waddch(m_window, '~');
|
||||||
}
|
}
|
||||||
|
|
||||||
wmove(m_window, (int)m_dimensions.line, 0);
|
int status_line_pos = status_on_top ? 0 : (int)m_dimensions.line;
|
||||||
|
wmove(m_window, status_line_pos, 0);
|
||||||
wclrtoeol(m_window);
|
wclrtoeol(m_window);
|
||||||
draw_line(status_line, 0);
|
draw_line(status_line, 0);
|
||||||
CharCount status_len = mode_line.length();
|
CharCount status_len = mode_line.length();
|
||||||
|
@ -360,7 +363,7 @@ void NCursesUI::draw(const DisplayBuffer& display_buffer,
|
||||||
if (m_dimensions.column - status_line.length() > status_len + 1)
|
if (m_dimensions.column - status_line.length() > status_len + 1)
|
||||||
{
|
{
|
||||||
CharCount col = m_dimensions.column - status_len;
|
CharCount col = m_dimensions.column - status_len;
|
||||||
wmove(m_window, (int)m_dimensions.line, (int)col);
|
wmove(m_window, status_line_pos, (int)col);
|
||||||
draw_line(mode_line, col);
|
draw_line(mode_line, col);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -548,7 +551,9 @@ void NCursesUI::menu_show(memoryview<String> items,
|
||||||
m_menu_bg = bg;
|
m_menu_bg = bg;
|
||||||
|
|
||||||
if (style == MenuStyle::Prompt)
|
if (style == MenuStyle::Prompt)
|
||||||
anchor = CharCoord{m_dimensions.line, 0};
|
anchor = CharCoord{status_on_top ? 0_line : m_dimensions.line, 0};
|
||||||
|
else if (status_on_top)
|
||||||
|
anchor.line += 1;
|
||||||
|
|
||||||
CharCoord maxsize = window_size(stdscr);
|
CharCoord maxsize = window_size(stdscr);
|
||||||
maxsize.column -= anchor.column;
|
maxsize.column -= anchor.column;
|
||||||
|
@ -792,8 +797,11 @@ void NCursesUI::info_show(StringView title, StringView content,
|
||||||
{
|
{
|
||||||
fancy_info_box = make_info_box(title, content, m_dimensions.column);
|
fancy_info_box = make_info_box(title, content, m_dimensions.column);
|
||||||
info_box = fancy_info_box;
|
info_box = fancy_info_box;
|
||||||
anchor = CharCoord{m_dimensions.line, m_dimensions.column-1};
|
anchor = CharCoord{status_on_top ? 0 : m_dimensions.line,
|
||||||
|
m_dimensions.column-1};
|
||||||
}
|
}
|
||||||
|
else if (status_on_top)
|
||||||
|
anchor.line += 1;
|
||||||
|
|
||||||
CharCoord size = compute_needed_size(info_box);
|
CharCoord size = compute_needed_size(info_box);
|
||||||
CharCoord pos;
|
CharCoord pos;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user