Restore curses after running external command

This allows running TUI tools like vim via run_external_command without
destroying the ncmpcpp curses output.
master
Jan Holthuis 8 years ago committed by Andrzej Rybczak
parent 1ef061a87c
commit 81cb7a4f85
  1. 1
      NEWS
  2. 11
      src/curses/window.cpp
  3. 6
      src/curses/window.h
  4. 4
      src/macro_utilities.cpp
  5. 6
      src/screens/lyrics.cpp

@ -1,4 +1,5 @@
ncmpcpp-0.9 (????-??-??)
* Restore curses window after running external command
ncmpcpp-0.8.2 (2018-04-11)
* Help screen: fixed display of EoF keycode

@ -443,6 +443,17 @@ void initScreen(bool enable_colors, bool enable_mouse)
rl_startup_hook = rl::add_base;
}
void pauseScreen()
{
def_prog_mode();
endwin();
}
void unpauseScreen()
{
refresh();
}
void destroyScreen()
{
Mouse::disable();

@ -219,6 +219,12 @@ void disable();
/// @param enable_colors enables colors
void initScreen(bool enable_colors, bool enable_mouse);
/// Pauses the screen (e.g. for running an external command)
void pauseScreen();
/// Unpauses the screen
void unpauseScreen();
/// Destroys the screen
void destroyScreen();

@ -21,6 +21,7 @@
#include "bindings.h"
#include "global.h"
#include "macro_utilities.h"
#include "curses/window.h"
#include "utility/string.h"
#include "utility/wide_string.h"
@ -87,7 +88,10 @@ RunExternalCommand::RunExternalCommand(std::string &&command)
void RunExternalCommand::run()
{
GNUC_UNUSED int res;
NC::pauseScreen();
res = std::system(m_command.c_str());
NC::unpauseScreen();
}
}

@ -329,12 +329,10 @@ void Lyrics::edit()
if (Config.use_console_editor)
{
command = "/bin/sh -c \"" + Config.external_editor + " \\\"" + filename + "\\\"\"";
NC::pauseScreen();
res = system(command.c_str());
NC::unpauseScreen();
fetch(m_song);
// Reset ncurses state to refresh the screen.
endwin();
initscr();
curs_set(0);
}
else
{

Loading…
Cancel
Save