in ui/src/com/jediterm/terminal/ui/TerminalPanel.java [1514:1552]
public void scrollToShowAllOutput() {
myTerminalTextBuffer.lock();
try {
int historyLines = myTerminalTextBuffer.getHistoryLinesCount();
if (historyLines > 0) {
int termHeight = myTermSize.getRows();
myBoundedRangeModel.setRangeProperties(-historyLines, historyLines + termHeight, -historyLines,
termHeight, false);
TerminalModelListener modelListener = new TerminalModelListener() {
@Override
public void modelChanged() {
int zeroBasedCursorY = myCursor.myCursorCoordinates.y - 1;
if (zeroBasedCursorY + historyLines >= termHeight) {
myTerminalTextBuffer.removeModelListener(this);
SwingUtilities.invokeLater(() -> {
myTerminalTextBuffer.lock();
try {
myBoundedRangeModel.setRangeProperties(0, myTermSize.getRows(),
-myTerminalTextBuffer.getHistoryLinesCount(), myTermSize.getRows(), false);
} finally {
myTerminalTextBuffer.unlock();
}
});
}
}
};
myTerminalTextBuffer.addModelListener(modelListener);
myBoundedRangeModel.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
myBoundedRangeModel.removeChangeListener(this);
myTerminalTextBuffer.removeModelListener(modelListener);
}
});
}
} finally {
myTerminalTextBuffer.unlock();
}
}