Restore curses after running external command

This allows running TUI tools like vim via run_external_command without
destroying the ncmpcpp curses output.
This commit is contained in:
Jan Holthuis
2018-04-13 17:34:59 +02:00
committed by Andrzej Rybczak
parent 1ef061a87c
commit 81cb7a4f85
5 changed files with 24 additions and 4 deletions

1
NEWS
View File

@@ -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

View File

@@ -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();

View File

@@ -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();

View File

@@ -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();
}
}

View File

@@ -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
{