implement status is-breakpoint

This implements `status is-breakpoint` that returns true if the current
shell prompt is displayed in the context of a `breakpoint` command.

This also fixes several bugs. Most notably making `breakpoint` a no-op if
the shell isn't interactive. Also, typing `breakpoint` at an interactive
prompt should be an error rather than creating a new nested debugging
context.

Partial fix for #1310
This commit is contained in:
Kurtis Rader
2017-06-19 21:05:34 -07:00
parent d234a1870b
commit bd299e96b2
15 changed files with 85 additions and 33 deletions

View File

@@ -805,7 +805,7 @@ static void test_cancellation() {
// Test for #3780
// Ugly hack - temporarily set is_interactive_session
// else we will SIGINT ourselves in response to our child death
scoped_push<int> iis(&is_interactive_session, 1);
scoped_push<bool> iis(&is_interactive_session, true);
const wchar_t *child_self_destructor = L"while true ; sh -c 'sleep .25; kill -s INT $$' ; end";
parser_t::principal_parser().eval(child_self_destructor, io_chain_t(), TOP);
iis.restore();