private void initCommandCompletion() {

    //
    // init: Command Completion
    //
    CompletionInterfaceAbstract _cmdComplete_provider =
        new CompletionInterfaceAbstract(this.rgui) {

          public String getText() {
            return commandInputField.getText();
          }

          public int getCaretPosition() {
            return commandInputField.getCaretPosition();
          }

          public void setText(String text) {
            commandInputField.setText(text);
          }

          public void setCaretPosition(int pos) {
            commandInputField.setCaretPosition(pos);
          }

          public void closePopup() {
            cmdComplete.closePopups();
          }

          public boolean canShow() {
            return (!cmdSearch.isActive());
          }
        };

    // init popup components
    cmdComplete = new CompletionSupport("Completion", commandInputField, _cmdComplete_provider);

    cmdComplete.setAppearanceOption(CompletionSupport.APPEARS_ABOVE);

    // assign control hotkeys
    //

    cmdComplete.bindKeyAction(KeyUtil.getKeyStroke(KeyEvent.VK_ENTER, 0), CompletionSupport.SELECT);

    cmdComplete.bindKeyAction(KeyUtil.getKeyStroke(KeyEvent.VK_TAB, 0), CompletionSupport.COMPLETE);

    cmdComplete.bindKeyAction(
        KeyUtil.getKeyStroke(KeyEvent.VK_SPACE, KeyEvent.CTRL_MASK), CompletionSupport.COMPLETE);

    cmdComplete.bindKeyAction(
        KeyUtil.getKeyStroke(KeyEvent.VK_ESCAPE, 0), CompletionSupport.CANCEL);

    cmdComplete.bindKeyAction(KeyUtil.getKeyStroke(KeyEvent.VK_UP, 0), CompletionSupport.SCROLL_UP);

    cmdComplete.bindKeyAction(
        KeyUtil.getKeyStroke(KeyEvent.VK_DOWN, 0), CompletionSupport.SCROLL_DOWN);
  }
  private void initCommandSearch() {
    // init: Command History Search
    //
    CompletionInterface _cmdSearch_provider =
        new CompletionInterface() {
          public CompletionResult provideResult() {
            // provide command history
            Vector<String> history = getCommandHistory();

            int size = history.size();
            CompletionResult result = new CompletionResult();

            for (int i = size - 1; i >= 0; i--) {
              result.add(new CompletionItem(history.get(i), "command"));
            }

            return result;
          }

          public String providePattern() {
            return (commandInputField.getText());
          }

          public void acceptResult(final String string, final int offset) {
            commandInputField.setText(string);

            if (offset != 0) {
              commandInputField.setCaretPosition(commandInputField.getCaretPosition() + offset);
            }
          }

          public void makeAddition(final String string) {
            commandInputField.setText(string);
          }

          public boolean canShow() {
            return (!cmdComplete.isActive());
          }

          public void handlePopupShowed() {}

          public void handlePopupClosed() {}
        };

    cmdSearch = new CompletionSupport("History Search", commandInputField, _cmdSearch_provider);

    cmdSearch.setAppearanceOption(CompletionSupport.APPEARS_ABOVE);

    cmdSearch.setFilter(CompletionSupport.FREETEXT_FILTER);

    cmdSearch.bindKeyAction(KeyUtil.getKeyStroke(KeyEvent.VK_ENTER, 0), CompletionSupport.SELECT);

    cmdSearch.bindKeyAction(KeyUtil.getKeyStroke(KeyEvent.VK_TAB, 0), CompletionSupport.COMPLETE);

    cmdSearch.bindKeyAction(
        KeyUtil.getKeyStroke(KeyEvent.VK_R, KeyEvent.CTRL_MASK), CompletionSupport.COMPLETE);

    cmdSearch.bindKeyAction(KeyUtil.getKeyStroke(KeyEvent.VK_ESCAPE, 0), CompletionSupport.CANCEL);

    cmdSearch.bindKeyAction(KeyUtil.getKeyStroke(KeyEvent.VK_UP, 0), CompletionSupport.SCROLL_UP);

    cmdSearch.bindKeyAction(
        KeyUtil.getKeyStroke(KeyEvent.VK_DOWN, 0), CompletionSupport.SCROLL_DOWN);
  }