summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2016-04-11 13:44:10 +0100
committerMaxime Coste <frrrwww@gmail.com>2016-04-11 13:44:10 +0100
commit815924e4da2d2569e90cf3029b488118f0e824be (patch)
treec40dd67bd67734c4c3b339f55f8bc7f6a2a8cc69 /src
parenta026ebf298d7c12d9bb9a823924b1a38db28d74d (diff)
parente74878c299a53a1932fde492a8afc4a909b86ae0 (diff)
Merge remote-tracking branch 'lenormf/buffer-padding'
Diffstat (limited to 'src')
-rw-r--r--src/client.cc3
-rw-r--r--src/face_registry.cc1
-rw-r--r--src/json_ui.cc4
-rw-r--r--src/json_ui.hh3
-rw-r--r--src/main.cc6
-rw-r--r--src/ncurses_ui.cc29
-rw-r--r--src/ncurses_ui.hh8
-rw-r--r--src/remote.cc10
-rw-r--r--src/user_interface.hh3
9 files changed, 53 insertions, 14 deletions
diff --git a/src/client.cc b/src/client.cc
index 06ee4260..3dc3ea07 100644
--- a/src/client.cc
+++ b/src/client.cc
@@ -190,7 +190,8 @@ void Client::redraw_ifn()
if (m_ui_pending & Draw)
{
- m_ui->draw(window.update_display_buffer(context()), get_face("Default"));
+ m_ui->draw(window.update_display_buffer(context()),
+ get_face("Default"), get_face("BufferPadding"));
if (not m_menu.items.empty() and m_menu.style == MenuStyle::Inline and
m_menu.ui_anchor != window.display_position(m_menu.anchor))
diff --git a/src/face_registry.cc b/src/face_registry.cc
index 7da57e9c..f5f415a2 100644
--- a/src/face_registry.cc
+++ b/src/face_registry.cc
@@ -120,6 +120,7 @@ FaceRegistry::FaceRegistry()
{ "StatusCursor", Face{ Color::Black, Color::Cyan } },
{ "Prompt", Face{ Color::Yellow, Color::Default } },
{ "MatchingChar", Face{ Color::Default, Color::Default, Attribute::Bold } },
+ { "BufferPadding", Face{ Color::Blue, Color::Default } },
}
{}
diff --git a/src/json_ui.cc b/src/json_ui.cc
index aea412b1..05f0d38b 100644
--- a/src/json_ui.cc
+++ b/src/json_ui.cc
@@ -168,9 +168,9 @@ JsonUI::JsonUI()
}
void JsonUI::draw(const DisplayBuffer& display_buffer,
- const Face& default_face)
+ const Face& default_face, const Face& padding_face)
{
- rpc_call("draw", display_buffer.lines(), default_face);
+ rpc_call("draw", display_buffer.lines(), default_face, padding_face);
}
void JsonUI::draw_status(const DisplayLine& status_line,
diff --git a/src/json_ui.hh b/src/json_ui.hh
index 3ebbafbb..e4d278fc 100644
--- a/src/json_ui.hh
+++ b/src/json_ui.hh
@@ -19,7 +19,8 @@ public:
JsonUI& operator=(const JsonUI&) = delete;
void draw(const DisplayBuffer& display_buffer,
- const Face& default_face) override;
+ const Face& default_face,
+ const Face& buffer_padding) override;
void draw_status(const DisplayLine& status_line,
const DisplayLine& mode_line,
diff --git a/src/main.cc b/src/main.cc
index e14385ea..f7e2ea68 100644
--- a/src/main.cc
+++ b/src/main.cc
@@ -258,7 +258,9 @@ void register_options()
" ncurses_set_title bool\n"
" ncurses_enable_mouse bool\n"
" ncurses_wheel_up_button int\n"
- " ncurses_wheel_down_button int\n",
+ " ncurses_wheel_down_button int\n"
+ " ncurses_buffer_padding_str str\n"
+ " ncurses_buffer_padding_type fill|single|off\n",
UserInterface::Options{});
reg.declare_option("modelinefmt", "format string used to generate the modeline",
"%val{bufname} %val{cursor_line}:%val{cursor_char_column} "_str);
@@ -308,7 +310,7 @@ std::unique_ptr<UserInterface> make_ui(UIType ui_type)
void info_show(StringView, StringView, CharCoord, Face, InfoStyle) override {}
void info_hide() override {}
- void draw(const DisplayBuffer&, const Face&) override {}
+ void draw(const DisplayBuffer&, const Face&, const Face&) override {}
void draw_status(const DisplayLine&, const DisplayLine&, const Face&) override {}
CharCoord dimensions() override { return {24,80}; }
bool is_key_available() override { return false; }
diff --git a/src/ncurses_ui.cc b/src/ncurses_ui.cc
index da23807e..05ba0106 100644
--- a/src/ncurses_ui.cc
+++ b/src/ncurses_ui.cc
@@ -343,8 +343,11 @@ void NCursesUI::draw_line(NCursesWin* window, const DisplayLine& line,
}
}
+static const DisplayLine empty_line = String(" ");
+
void NCursesUI::draw(const DisplayBuffer& display_buffer,
- const Face& default_face)
+ const Face& default_face,
+ const Face& padding_face)
{
wbkgdset(m_window, COLOR_PAIR(get_color_pair(default_face)));
@@ -359,12 +362,18 @@ void NCursesUI::draw(const DisplayBuffer& display_buffer,
++line_index;
}
- set_face(m_window, { Color::Blue, Color::Default }, default_face);
+ set_face(m_window, padding_face, default_face);
+
+ const DisplayLine padding_line = m_buffer_padding_str;
+ const DisplayLine* padding_line_ptr = m_buffer_padding_type != BufferPaddingType::None ?
+ &padding_line : &empty_line;
while (line_index < m_dimensions.line + (m_status_on_top ? 1 : 0))
{
wmove(m_window, (int)line_index++, 0);
wclrtoeol(m_window);
- waddch(m_window, '~');
+ draw_line(m_window, *padding_line_ptr, 0, m_dimensions.column, padding_face);
+ if (m_buffer_padding_type == BufferPaddingType::Single)
+ padding_line_ptr = &empty_line;
}
m_dirty = true;
@@ -982,6 +991,20 @@ void NCursesUI::set_ui_options(const Options& options)
m_wheel_down_button = wheel_down_it != options.end() ?
str_to_int_ifp(wheel_down_it->value).value_or(5) : 5;
}
+
+ {
+ auto padding_str_it = options.find("ncurses_buffer_padding_str");
+ m_buffer_padding_str = padding_str_it == options.end() or !padding_str_it->value.length() ?
+ "~" : padding_str_it->value;
+
+ auto padding_type_it = options.find("ncurses_buffer_padding_type");
+ if (padding_type_it == options.end() or padding_type_it->value == "fill")
+ m_buffer_padding_type = BufferPaddingType::Fill;
+ else if (padding_type_it->value == "single")
+ m_buffer_padding_type = BufferPaddingType::Single;
+ else
+ m_buffer_padding_type = BufferPaddingType::None;
+ }
}
}
diff --git a/src/ncurses_ui.hh b/src/ncurses_ui.hh
index 870a3fc7..6f8d9fd9 100644
--- a/src/ncurses_ui.hh
+++ b/src/ncurses_ui.hh
@@ -13,6 +13,8 @@ namespace Kakoune
struct NCursesWin;
+enum BufferPaddingType { None, Single, Fill };
+
class NCursesUI : public UserInterface
{
public:
@@ -23,7 +25,8 @@ public:
NCursesUI& operator=(const NCursesUI&) = delete;
void draw(const DisplayBuffer& display_buffer,
- const Face& default_face) override;
+ const Face& default_face,
+ const Face& padding_face) override;
void draw_status(const DisplayLine& status_line,
const DisplayLine& mode_line,
@@ -126,6 +129,9 @@ private:
int m_wheel_up_button = 4;
int m_wheel_down_button = 5;
+ String m_buffer_padding_str = "~";
+ BufferPaddingType m_buffer_padding_type = BufferPaddingType::None;
+
bool m_set_title = true;
bool m_dirty = false;
diff --git a/src/remote.cc b/src/remote.cc
index 718d7f7d..d5a747cc 100644
--- a/src/remote.cc
+++ b/src/remote.cc
@@ -249,7 +249,8 @@ public:
void info_hide() override;
void draw(const DisplayBuffer& display_buffer,
- const Face& default_face) override;
+ const Face& default_face,
+ const Face& padding_face) override;
void draw_status(const DisplayLine& status_line,
const DisplayLine& mode_line,
@@ -334,12 +335,14 @@ void RemoteUI::info_hide()
}
void RemoteUI::draw(const DisplayBuffer& display_buffer,
- const Face& default_face)
+ const Face& default_face,
+ const Face& padding_face)
{
Message msg(m_socket_watcher.fd());
msg.write(RemoteUIMsg::Draw);
msg.write(display_buffer);
msg.write(default_face);
+ msg.write(padding_face);
}
void RemoteUI::draw_status(const DisplayLine& status_line,
@@ -505,7 +508,8 @@ void RemoteClient::process_next_message()
{
auto display_buffer = read<DisplayBuffer>(socket);
auto default_face = read<Face>(socket);
- m_ui->draw(display_buffer, default_face);
+ auto padding_face = read<Face>(socket);
+ m_ui->draw(display_buffer, default_face, padding_face);
break;
}
case RemoteUIMsg::DrawStatus:
diff --git a/src/user_interface.hh b/src/user_interface.hh
index e8a30a4b..26cf9097 100644
--- a/src/user_interface.hh
+++ b/src/user_interface.hh
@@ -53,7 +53,8 @@ public:
virtual void info_hide() = 0;
virtual void draw(const DisplayBuffer& display_buffer,
- const Face& default_face) = 0;
+ const Face& default_face,
+ const Face& padding_face) = 0;
virtual void draw_status(const DisplayLine& status_line,
const DisplayLine& mode_line,