public void init()

in ui/src/com/jediterm/terminal/ui/TerminalPanel.java [180:351]


  public void init(@NotNull JScrollBar scrollBar) {
    initFont();

    setPreferredSize(new java.awt.Dimension(getPixelWidth(), getPixelHeight()));

    setFocusable(true);
    enableInputMethods(true);
    setDoubleBuffered(true);

    setFocusTraversalKeysEnabled(false);

    addMouseMotionListener(new MouseMotionAdapter() {
      @Override
      public void mouseMoved(MouseEvent e) {
        handleHyperlinks(e.getPoint());
      }

      @Override
      public void mouseDragged(final MouseEvent e) {
        if (!isLocalMouseAction(e)) {
          return;
        }

        final Point charCoords = panelToCharCoords(e.getPoint());

        if (mySelection == null) {
          // prevent unlikely case where drag started outside terminal panel
          if (mySelectionStartPoint == null) {
            mySelectionStartPoint = charCoords;
          }
          updateSelection(new TerminalSelection(new Point(mySelectionStartPoint)));
        }
        repaint();
        updateSelectionEnd(charCoords);
        if (mySettingsProvider.copyOnSelect()) {
          handleCopyOnSelect();
        }

        if (e.getPoint().y < 0) {
          moveScrollBar((int) ((e.getPoint().y) * SCROLL_SPEED));
        }
        if (e.getPoint().y > getPixelHeight()) {
          moveScrollBar((int) ((e.getPoint().y - getPixelHeight()) * SCROLL_SPEED));
        }
      }
    });

    addMouseWheelListener(e -> {
      if (isLocalMouseAction(e)) {
        handleMouseWheelEvent(e, scrollBar);
      }
    });

    addMouseListener(new MouseAdapter() {
      @Override
      public void mouseExited(MouseEvent e) {
        if (myLinkHoverConsumer != null) {
          myLinkHoverConsumer.onMouseExited();
          myLinkHoverConsumer = null;
        }
        updateHoveredHyperlink(null);
      }

      @Override
      public void mousePressed(final MouseEvent e) {
        if (e.getButton() == MouseEvent.BUTTON1) {
          if (e.getClickCount() == 1) {
            mySelectionStartPoint = panelToCharCoords(e.getPoint());
            updateSelection(null);
            repaint();
          }
        }
      }

      @Override
      public void mouseReleased(final MouseEvent e) {
        requestFocusInWindow();
        repaint();
      }

      @Override
      public void mouseClicked(final MouseEvent e) {
        requestFocusInWindow();
        HyperlinkStyle hyperlink = isFollowLinkEvent(e) ? findHyperlink(e.getPoint()) : null;
        if (hyperlink != null) {
          hyperlink.getLinkInfo().navigate();
        } else if (e.getButton() == MouseEvent.BUTTON1 && isLocalMouseAction(e)) {
          int count = e.getClickCount();
          if (count == 1) {
            // do nothing
          } else if (count == 2) {
            // select word
            final Point charCoords = panelToCharCoords(e.getPoint());
            Point start = SelectionUtil.getPreviousSeparator(charCoords, myTerminalTextBuffer);
            Point stop = SelectionUtil.getNextSeparator(charCoords, myTerminalTextBuffer);
            updateSelection(new TerminalSelection(start));
            updateSelectionEnd(stop);
            if (mySettingsProvider.copyOnSelect()) {
              handleCopyOnSelect();
            }
          } else if (count == 3) {
            // select line
            final Point charCoords = panelToCharCoords(e.getPoint());
            int startLine = charCoords.y;
            while (startLine > -getScrollLinesStorage().getSize()
                    && myTerminalTextBuffer.getLine(startLine - 1).isWrapped()) {
              startLine--;
            }
            int endLine = charCoords.y;
            while (endLine < myTerminalTextBuffer.getHeight()
                    && myTerminalTextBuffer.getLine(endLine).isWrapped()) {
              endLine++;
            }
            updateSelection(new TerminalSelection(new Point(0, startLine)));
            updateSelectionEnd(new Point(myTermSize.getColumns(), endLine));
            if (mySettingsProvider.copyOnSelect()) {
              handleCopyOnSelect();
            }
          }
        } else if (e.getButton() == MouseEvent.BUTTON2 && mySettingsProvider.pasteOnMiddleMouseClick() && isLocalMouseAction(e)) {
          handlePasteSelection();
        } else if (e.getButton() == MouseEvent.BUTTON3) {
          HyperlinkStyle contextHyperlink = findHyperlink(e.getPoint());
          TerminalActionProvider provider = getTerminalActionProvider(contextHyperlink != null ? contextHyperlink.getLinkInfo() : null, e);
          JPopupMenu popup = createPopupMenu(provider);
          popup.show(e.getComponent(), e.getX(), e.getY());
        }
        repaint();
      }
    });

    addComponentListener(new ComponentAdapter() {
      @Override
      public void componentResized(final ComponentEvent e) {
        sizeTerminalFromComponent();
      }
    });

    addHierarchyListener(new HierarchyListener() {
      @Override
      public void hierarchyChanged(HierarchyEvent e) {
        // replace with com.intellij.util.ui.update.UiNotifyConnector#doWhenFirstShown when merged with intellij
        if ((e.getChangeFlags() & HierarchyEvent.SHOWING_CHANGED) != 0 && isShowing()) {
          SwingUtilities.invokeLater(() -> sizeTerminalFromComponent());
          removeHierarchyListener(this);
        }
      }
    });

    myFillCharacterBackgroundIncludingLineSpacing = mySettingsProvider.shouldFillCharacterBackgroundIncludingLineSpacing();
    addFocusListener(new FocusAdapter() {
      @Override
      public void focusGained(FocusEvent e) {
        myFillCharacterBackgroundIncludingLineSpacing = mySettingsProvider.shouldFillCharacterBackgroundIncludingLineSpacing();
        myCursor.cursorChanged();
      }

      @Override
      public void focusLost(FocusEvent e) {
        myCursor.cursorChanged();

        handleHyperlinks(e.getComponent());
      }
    });

    myBoundedRangeModel.addChangeListener(e -> {
      myClientScrollOrigin = myBoundedRangeModel.getValue();
      repaint();
    });

    createRepaintTimer();
  }