diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2016-04-11 13:44:10 +0100 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2016-04-11 13:44:10 +0100 |
| commit | 815924e4da2d2569e90cf3029b488118f0e824be (patch) | |
| tree | c40dd67bd67734c4c3b339f55f8bc7f6a2a8cc69 /src | |
| parent | a026ebf298d7c12d9bb9a823924b1a38db28d74d (diff) | |
| parent | e74878c299a53a1932fde492a8afc4a909b86ae0 (diff) | |
Merge remote-tracking branch 'lenormf/buffer-padding'
Diffstat (limited to 'src')
| -rw-r--r-- | src/client.cc | 3 | ||||
| -rw-r--r-- | src/face_registry.cc | 1 | ||||
| -rw-r--r-- | src/json_ui.cc | 4 | ||||
| -rw-r--r-- | src/json_ui.hh | 3 | ||||
| -rw-r--r-- | src/main.cc | 6 | ||||
| -rw-r--r-- | src/ncurses_ui.cc | 29 | ||||
| -rw-r--r-- | src/ncurses_ui.hh | 8 | ||||
| -rw-r--r-- | src/remote.cc | 10 | ||||
| -rw-r--r-- | src/user_interface.hh | 3 |
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, |
