Skip to content

Commit 2cac060

Browse files
committed
feat: added Term resize event
1 parent 91d76b0 commit 2cac060

File tree

1 file changed

+27
-1
lines changed
  • src/main/java/org/codejive/context/terminal

1 file changed

+27
-1
lines changed

src/main/java/org/codejive/context/terminal/Term.java

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,17 @@
33
import java.io.Closeable;
44
import java.io.Flushable;
55
import java.io.IOException;
6+
import org.codejive.context.events.Event;
7+
import org.codejive.context.events.EventEmitter;
8+
import org.codejive.context.events.EventTarget;
69
import org.jline.terminal.Attributes;
710
import org.jline.terminal.Terminal;
811
import org.jline.terminal.TerminalBuilder;
912
import 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

Comments
 (0)