I had a hard time trying to understand how is CTRL+C handled in jline2. I found in
consoleReader.readline an exception will be thrown if
handleUserInterrupt is set to true. But I wonder before this exception is thrown, how is CTRL+C is trapped and interpreted (instead of exiting the program)?
UserInterruptException will be thrown only from one of the
ConsoleReader.readLine methods and only when the user press CTRL+C and
handleUserInterrupt is set to true (by calling
On UNIX Platforms
Only if the terminal of the
ConsoleReader is an instance of
UnixTerminal (the default terminal for UNIX platforms), it’s
disableInterruptCharacter method is called when
readLine is called. This method disables the default behavior of CTRL+C (usually causes the JVM to exit) by executing proper command to the system (by using
stty). Before the
readLine method returns, it calls the
enableInterruptCharacter method of the terminal, which enables the default behavior of CTRL+C.
This means that the default behavior of CTRL+C is disabled only when the
readLine method is executing.