33import java .io .Closeable ;
44import java .io .Flushable ;
55import java .io .IOException ;
6+ import org .codejive .context .events .Event ;
7+ import org .codejive .context .events .EventEmitter ;
8+ import org .codejive .context .events .EventTarget ;
69import org .jline .terminal .Attributes ;
710import org .jline .terminal .Terminal ;
811import org .jline .terminal .TerminalBuilder ;
912import org .jline .utils .InfoCmp ;
1013
11- public class Term implements Flushable , Closeable {
14+ public class Term implements Flushable , Closeable , EventTarget {
1215 final Terminal terminal ;
16+ final EventEmitter <TermResizeEvent > onResize = new EventEmitter <>();
1317 private final Attributes savedAttributes ;
1418
1519 public static Term create () throws IOException {
@@ -19,6 +23,7 @@ public static Term create() throws IOException {
1923 private Term () throws IOException {
2024 terminal = TerminalBuilder .builder ().build ();
2125 savedAttributes = terminal .enterRawMode ();
26+ terminal .handle (Terminal .Signal .WINCH , this ::handleResize );
2227 }
2328
2429 public Size size () {
@@ -58,4 +63,25 @@ public void close() throws IOException {
5863 terminal .setAttributes (savedAttributes );
5964 terminal .close ();
6065 }
66+
67+ public class TermResizeEvent implements Event {
68+ private final Size size ;
69+
70+ public TermResizeEvent (Size size ) {
71+ this .size = size ;
72+ }
73+
74+ public Size size () {
75+ return size ;
76+ }
77+
78+ @ Override
79+ public EventTarget target () {
80+ return Term .this ;
81+ }
82+ }
83+
84+ private void handleResize (Terminal .Signal signal ) {
85+ onResize .dispatch (new TermResizeEvent (size ()));
86+ }
6187}
0 commit comments