Implement workaround for nested shell interruption handling #1215
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR implements a workaround to fix the issue with interruption handling in nested shells. The fix clears the current pipe before creating a child shell and restores it afterward, ensuring that when Ctrl+C is pressed in a child shell (e.g., when running 'sh' followed by 'ttop'), the interruption signal is properly propagated to the child process.
The implementation uses reflection to access the Pipe.setCurrentPipe method in Felix Gogo runtime, which is currently private. The proper fix has been submitted to the Felix project in two PRs:
Once these PRs are merged and released, the modified Shell.java and Posix.java classes should be removed from JLine and the official Felix Gogo JLine implementation should be used instead.
Fixes #1143