Use raw terminal, and handle signals manually
C-c now sends SIGINT to the process group of Kakoune server when used in normal mode. Fixes #30
This commit is contained in:
parent
2aaae7473c
commit
217ba625ad
|
@ -211,12 +211,9 @@ void on_term_resize(int)
|
||||||
EventManager::instance().force_signal(0);
|
EventManager::instance().force_signal(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static sig_atomic_t ctrl_c_pending = 0;
|
|
||||||
|
|
||||||
void on_sigint(int)
|
void on_sigint(int)
|
||||||
{
|
{
|
||||||
ctrl_c_pending = 1;
|
// do nothing
|
||||||
EventManager::instance().force_signal(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NCursesUI::NCursesUI()
|
NCursesUI::NCursesUI()
|
||||||
|
@ -224,7 +221,7 @@ NCursesUI::NCursesUI()
|
||||||
m_input_callback(); }}
|
m_input_callback(); }}
|
||||||
{
|
{
|
||||||
initscr();
|
initscr();
|
||||||
cbreak();
|
raw();
|
||||||
noecho();
|
noecho();
|
||||||
nonl();
|
nonl();
|
||||||
intrflush(stdscr, false);
|
intrflush(stdscr, false);
|
||||||
|
@ -403,9 +400,6 @@ bool NCursesUI::is_key_available()
|
||||||
{
|
{
|
||||||
check_resize();
|
check_resize();
|
||||||
|
|
||||||
if (ctrl_c_pending)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
timeout(0);
|
timeout(0);
|
||||||
const int c = getch();
|
const int c = getch();
|
||||||
if (c != ERR)
|
if (c != ERR)
|
||||||
|
@ -418,17 +412,16 @@ Key NCursesUI::get_key()
|
||||||
{
|
{
|
||||||
check_resize();
|
check_resize();
|
||||||
|
|
||||||
if (ctrl_c_pending)
|
|
||||||
{
|
|
||||||
ctrl_c_pending = false;
|
|
||||||
return ctrl('c');
|
|
||||||
}
|
|
||||||
|
|
||||||
const int c = getch();
|
const int c = getch();
|
||||||
if (c > 0 and c < 27)
|
if (c > 0 and c < 27)
|
||||||
{
|
{
|
||||||
if (c == CTRL('l'))
|
if (c == CTRL('l'))
|
||||||
redrawwin(stdscr);
|
redrawwin(stdscr);
|
||||||
|
if (c == CTRL('z'))
|
||||||
|
{
|
||||||
|
raise(SIGTSTP);
|
||||||
|
return Key::Invalid;
|
||||||
|
}
|
||||||
return ctrl(Codepoint(c) - 1 + 'a');
|
return ctrl(Codepoint(c) - 1 + 'a');
|
||||||
}
|
}
|
||||||
else if (c == 27)
|
else if (c == 27)
|
||||||
|
|
|
@ -17,6 +17,8 @@
|
||||||
#include "user_interface.hh"
|
#include "user_interface.hh"
|
||||||
#include "window.hh"
|
#include "window.hh"
|
||||||
|
|
||||||
|
#include <signal.h>
|
||||||
|
|
||||||
namespace Kakoune
|
namespace Kakoune
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -1389,6 +1391,8 @@ KeyMap keymap =
|
||||||
|
|
||||||
{ Key::PageUp, { "scroll one page up", scroll<Key::PageUp> } },
|
{ Key::PageUp, { "scroll one page up", scroll<Key::PageUp> } },
|
||||||
{ Key::PageDown, { "scroll one page down", scroll<Key::PageDown> } },
|
{ Key::PageDown, { "scroll one page down", scroll<Key::PageDown> } },
|
||||||
|
|
||||||
|
{ ctrl('c'), { "interupt", [](Context&, int) { killpg(getpgrp(), SIGINT); } } },
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user