public void scrollToShowAllOutput()

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();
    }
  }