diff --git a/src/ewig/buffer.cpp b/src/ewig/buffer.cpp index 0221bdc..3bd1949 100644 --- a/src/ewig/buffer.cpp +++ b/src/ewig/buffer.cpp @@ -480,10 +480,10 @@ text selected_text(buffer buf) : buf.content) .take(ends.row + 1) .drop(starts.row) - .update(ends.row-starts.row, [&] (auto l) { + .update(ends.row-starts.row, [&, ends = ends] (auto l) { return l.take(line_char(l, ends.col)); }) - .update(0, [&] (auto l) { + .update(0, [&, starts = starts] (auto l) { return l.drop(line_char(l, starts.col)); }); } @@ -500,14 +500,14 @@ std::pair cut(buffer buf) : buf.content; buf.content = content .take(starts.row + 1) - .update(starts.row, [&] (auto l1) { + .update(starts.row, [&, ends = ends, starts = starts] (auto l1) { auto l2 = content[ends.row]; return l1.take(line_char(l1, starts.col)) + l2.drop(line_char(l2, ends.col)); }) + buf.content.drop(ends.row + 1); } else { - buf.content = buf.content.update(starts.row, [&] (auto l) { + buf.content = buf.content.update(starts.row, [&, starts = starts, ends = ends] (auto l) { return l.take(line_char(l, starts.col)) + l.drop(line_char(l, ends.col)); }); diff --git a/src/ewig/draw.cpp b/src/ewig/draw.cpp index 3ccaf3a..1e06407 100644 --- a/src/ewig/draw.cpp +++ b/src/ewig/draw.cpp @@ -23,6 +23,11 @@ #include extern "C" { + +#ifndef _XOPEN_SOURCE_EXTENDED + #define _XOPEN_SOURCE_EXTENDED +#endif + #include } @@ -85,7 +90,7 @@ void draw_text(const buffer& buf, coord size) (index)buf.content.size()); auto [starts, ends] = display_selected_region(buf); - immer::for_each(first_ln, last_ln, [&] (auto ln) { + immer::for_each(first_ln, last_ln, [&, starts=starts, ends=ends] (auto ln) { str.clear(); display_line_fill(ln, buf.scroll.col + col, 2*size.col, str); ::move(row, col); @@ -94,9 +99,9 @@ void draw_text(const buffer& buf, coord size) auto hl_first = row == starts.row ? std::max(starts.col, 0) : 0; auto hl_last = row == ends.row ? std::max(ends.col, 0) : str.size(); ::addnwstr(str.c_str(), hl_first); - ::attron(COLOR_PAIR(color::selection)); + ::attron(COLOR_PAIR((int)color::selection)); ::addnwstr(str.c_str() + hl_first, hl_last - hl_first); - ::attroff(COLOR_PAIR(color::selection)); + ::attroff(COLOR_PAIR((int)color::selection)); ::addnwstr(str.c_str() + hl_last, str.size() - hl_last); } else { ::addwstr(str.c_str()); @@ -126,7 +131,7 @@ void draw_mode_line(const buffer& buf, index maxcol) auto percentage = int(progress * 100); ::move(getcury(stdscr), maxcol - str.size() - 6); attrset(A_NORMAL | A_BOLD); - ::attron(COLOR_PAIR(color::mode_line_message)); + ::attron(COLOR_PAIR((int)color::mode_line_message)); ::printw(" %s %*d%% ", str.c_str(), 2, percentage); }, [&] (const loading_file& file) { @@ -135,7 +140,7 @@ void draw_mode_line(const buffer& buf, index maxcol) auto percentage = int(progress * 100); ::move(getcury(stdscr), maxcol - str.size() - 6); attrset(A_NORMAL | A_BOLD); - ::attron(COLOR_PAIR(color::mode_line_message)); + ::attron(COLOR_PAIR((int)color::mode_line_message)); ::printw(" %s %*d%% ", str.c_str(), 2, percentage); }, [](auto&&) {})(buf.from); @@ -144,10 +149,10 @@ void draw_mode_line(const buffer& buf, index maxcol) void draw_message(const message& msg) { attrset(A_NORMAL); - ::attron(COLOR_PAIR(color::message)); + ::attron(COLOR_PAIR((int)color::message)); ::addstr(" "); ::addstr(msg.content.get().c_str()); - ::attroff(COLOR_PAIR(color::message)); + ::attroff(COLOR_PAIR((int)color::message)); } void draw_text_cursor(const buffer& buf, coord window_size) diff --git a/src/ewig/keys.cpp b/src/ewig/keys.cpp index 4cb7d79..75697f5 100644 --- a/src/ewig/keys.cpp +++ b/src/ewig/keys.cpp @@ -22,9 +22,15 @@ #include extern "C" { + +#ifndef _XOPEN_SOURCE_EXTENDED + #define _XOPEN_SOURCE_EXTENDED +#endif + #include } + using namespace std::string_literals; namespace ewig { @@ -69,7 +75,7 @@ namespace { key_seq from_special_str(const char* name) { - auto id = ::tigetstr(name); + auto id = ::tigetstr((NCURSES_CONST char*)name); if (!id || id == (char*)-1) throw std::runtime_error{"tigetstr() error for: "s + name}; auto code = ::key_defined(name); diff --git a/src/ewig/main.cpp b/src/ewig/main.cpp index afade2a..a8fccd6 100644 --- a/src/ewig/main.cpp +++ b/src/ewig/main.cpp @@ -121,7 +121,7 @@ void run(int argc, const char** argv, const std::string& fname) application{term.size(), key_map_emacs}, update, draw, - lager::boost_asio_event_loop{serv, [&] { term.stop(); }}, + lager::with_boost_asio_event_loop{serv, [&] { term.stop(); }}, enhancer); term.start([&] (auto ev) { st.dispatch (ev); }); st.dispatch(command_action{"load", fname}); diff --git a/src/ewig/terminal.cpp b/src/ewig/terminal.cpp index ef4c241..2baa93a 100644 --- a/src/ewig/terminal.cpp +++ b/src/ewig/terminal.cpp @@ -26,9 +26,15 @@ #include extern "C" { + +#ifndef _XOPEN_SOURCE_EXTENDED + #define _XOPEN_SOURCE_EXTENDED +#endif + #include } + using namespace std::placeholders; using namespace std::string_literals;