diff --git a/contrib/kakoune.spec b/contrib/kakoune.spec index c0d5faf1..0174708a 100644 --- a/contrib/kakoune.spec +++ b/contrib/kakoune.spec @@ -30,6 +30,12 @@ make test cd src %make_install PREFIX=/usr +%files +%doc +%{_bindir}/* +%{_datadir}/doc/kak/* +%{_datadir}/kak/* + %changelog * Sat Mar 28 2015 jkonecny - 0-5.20150328gitd1b81c8f - Automated git update by dgroc script new hash: d1b81c8f @@ -39,10 +45,3 @@ cd src * Tue Mar 17 2015 Jiri Konecny 0-1.12a732dgit - Create first rpm for kakoune - -%files -%doc -%{_bindir}/* -%{_datadir}/doc/kak/* -%{_datadir}/kak/* - diff --git a/src/Makefile b/src/Makefile index e0ce7d88..2945e536 100644 --- a/src/Makefile +++ b/src/Makefile @@ -59,7 +59,7 @@ install: kak mkdir -p $(sharedir)/rc install -m 0644 ../share/kak/kakrc $(sharedir) install -m 0644 ../rc/* $(sharedir)/rc - ln -s $(sharedir)/rc $(sharedir)/autoload + ln -r -s $(sharedir)/rc $(sharedir)/autoload mkdir -p $(docdir) install -m 0644 ../README.asciidoc $(docdir) install -m 0644 ../doc/* $(docdir) diff --git a/src/buffer_utils.cc b/src/buffer_utils.cc index 6e84a4f1..ff05e781 100644 --- a/src/buffer_utils.cc +++ b/src/buffer_utils.cc @@ -108,7 +108,7 @@ Buffer* create_fifo_buffer(String name, int fd, bool scroll) watcher->close_fd(); buffer->run_hook_in_own_context("BufCloseFifo", ""); buffer->flags() &= ~Buffer::Flags::Fifo; - watcher->~FDWatcher(); + delete watcher; }; // capture a non static one to silence a warning. diff --git a/src/commands.cc b/src/commands.cc index e496124a..e1aad46d 100644 --- a/src/commands.cc +++ b/src/commands.cc @@ -1477,7 +1477,13 @@ static Completions complete_face(const Context&, CompletionFlags flags, const CommandDesc face_cmd = { "face", nullptr, - "face : set face to refer to \n", + "face : set face to refer to \n" + "\n" + "facespec format is [,][+]\n" + "colors are either a color name, or rgb:###### values.\n" + "attributes is a combination of:\n" + " u: underline, r: reverse, b: bold, B: blink, d: dim\n" + "facespec can as well just be the name of another face" , ParameterDesc{{}, ParameterDesc::Flags::None, 2, 2}, CommandFlags::None, CommandHelper{}, diff --git a/src/display_buffer.hh b/src/display_buffer.hh index 35381058..9d264279 100644 --- a/src/display_buffer.hh +++ b/src/display_buffer.hh @@ -149,9 +149,13 @@ public: void optimize(); void compute_range(); + void set_default_face(const Face& face) { m_default_face = face; } + const Face& default_face() const { return m_default_face; } + private: LineList m_lines; BufferRange m_range; + Face m_default_face; }; } diff --git a/src/face_registry.cc b/src/face_registry.cc index 1a972852..cbbd32ed 100644 --- a/src/face_registry.cc +++ b/src/face_registry.cc @@ -91,6 +91,7 @@ CandidateList FaceRegistry::complete_alias_name(StringView prefix, FaceRegistry::FaceRegistry() : m_aliases{ + { "Default", Face{ Color::Default, Color::Default } }, { "PrimarySelection", Face{ Color::White, Color::Blue } }, { "SecondarySelection", Face{ Color::Black, Color::Blue } }, { "PrimaryCursor", Face{ Color::Black, Color::White } }, diff --git a/src/ncurses_ui.cc b/src/ncurses_ui.cc index 46d6d76e..7ea51ef2 100644 --- a/src/ncurses_ui.cc +++ b/src/ncurses_ui.cc @@ -206,13 +206,18 @@ static int get_color_pair(const Face& face) } } -static void set_face(WINDOW* window, Face face) +void set_face(WINDOW* window, Face face, const Face& default_face) { static int current_pair = -1; if (current_pair != -1) wattroff(window, COLOR_PAIR(current_pair)); + if (face.fg == Color::Default) + face.fg = default_face.fg; + if (face.bg == Color::Default) + face.bg = default_face.bg; + if (face.fg != Color::Default or face.bg != Color::Default) { current_pair = get_color_pair(face); @@ -333,11 +338,12 @@ void NCursesUI::update_dimensions() --m_dimensions.line; } -void NCursesUI::draw_line(const DisplayLine& line, CharCount col_index) const +void NCursesUI::draw_line(const DisplayLine& line, CharCount col_index, + const Face& default_face) const { for (const DisplayAtom& atom : line) { - set_face(m_window, atom.face); + set_face(m_window, atom.face, default_face); StringView content = atom.content(); if (content.empty()) @@ -365,6 +371,9 @@ void NCursesUI::draw(const DisplayBuffer& display_buffer, const DisplayLine& status_line, const DisplayLine& mode_line) { + const Face& default_face = display_buffer.default_face(); + wbkgdset(m_window, COLOR_PAIR(get_color_pair(default_face))); + check_resize(); LineCount line_index = m_status_on_top ? 1 : 0; @@ -372,11 +381,11 @@ void NCursesUI::draw(const DisplayBuffer& display_buffer, { wmove(m_window, (int)line_index, 0); wclrtoeol(m_window); - draw_line(line, 0); + draw_line(line, 0, default_face); ++line_index; } - set_face(m_window, { Color::Blue, Color::Default }); + set_face(m_window, { Color::Blue, Color::Default }, default_face); while (line_index < m_dimensions.line + (m_status_on_top ? 1 : 0)) { wmove(m_window, (int)line_index++, 0); @@ -387,14 +396,14 @@ void NCursesUI::draw(const DisplayBuffer& display_buffer, int status_line_pos = m_status_on_top ? 0 : (int)m_dimensions.line; wmove(m_window, status_line_pos, 0); wclrtoeol(m_window); - draw_line(status_line, 0); + draw_line(status_line, 0, default_face); const auto mode_len = mode_line.length(); const auto remaining = m_dimensions.column - status_line.length(); if (mode_len < remaining) { CharCount col = m_dimensions.column - mode_len; wmove(m_window, status_line_pos, (int)col); - draw_line(mode_line, col); + draw_line(mode_line, col, default_face); } else if (remaining > 2) { @@ -405,7 +414,7 @@ void NCursesUI::draw(const DisplayBuffer& display_buffer, CharCount col = m_dimensions.column - remaining + 1; wmove(m_window, status_line_pos, (int)col); - draw_line(trimmed_mode_line, col); + draw_line(trimmed_mode_line, col, default_face); } const char* tsl = tigetstr((char*)"tsl"); diff --git a/src/ncurses_ui.hh b/src/ncurses_ui.hh index 2f992d2e..5227c4be 100644 --- a/src/ncurses_ui.hh +++ b/src/ncurses_ui.hh @@ -51,7 +51,8 @@ public: private: void check_resize(); void redraw(); - void draw_line(const DisplayLine& line, CharCount col_index) const; + void draw_line(const DisplayLine& line, CharCount col_index, + const Face& default_face) const; NCursesWin* m_window = nullptr; diff --git a/src/window.cc b/src/window.cc index 7685b97c..0cacdad2 100644 --- a/src/window.cc +++ b/src/window.cc @@ -2,6 +2,7 @@ #include "assert.hh" #include "context.hh" +#include "face_registry.hh" #include "highlighter.hh" #include "hook_manager.hh" #include "client.hh" @@ -65,6 +66,7 @@ void Window::update_display_buffer(const Context& context) kak_assert(&buffer() == &context.buffer()); scroll_to_keep_selection_visible_ifn(context); + m_display_buffer.set_default_face(get_face("Default")); DisplayBuffer::LineList& lines = m_display_buffer.lines(); lines.clear(); @@ -283,6 +285,11 @@ ByteCoordAndTarget Window::offset_coord(ByteCoordAndTarget coord, LineCount offs return { find_buffer_coord(lines[1], buffer(), column), column }; } +void Window::clear_display_buffer() +{ + m_display_buffer = DisplayBuffer{}; +} + void Window::on_option_changed(const Option& option) { run_hook_in_own_context("WinSetOption", diff --git a/src/window.hh b/src/window.hh index 0ad70a54..f83377d7 100644 --- a/src/window.hh +++ b/src/window.hh @@ -44,7 +44,7 @@ public: ByteCoord offset_coord(ByteCoord coord, CharCount offset); ByteCoordAndTarget offset_coord(ByteCoordAndTarget coord, LineCount offset); - void clear_display_buffer() { m_display_buffer = DisplayBuffer{}; } + void clear_display_buffer(); private: Window(const Window&) = delete;