Exemple #1
0
  def mainRender(needsRender, menu, selection):
    term = Terminal()
    
    if needsRender == 1:
      print(term.clear())
      print(term.move_y(term.height // 16))
      print(term.black_on_cornsilk4(term.center('IOTstack Homebridg Server Options')))
      print("")
      print(term.center(commonTopBorder(renderMode)))
      print(term.center(commonEmptyLine(renderMode)))
      print(term.center("{bv}      Select Option to configure                                                {bv}".format(bv=specialChars[renderMode]["borderVertical"])))
      print(term.center(commonEmptyLine(renderMode)))

    if needsRender >= 1:
      renderHotZone(term, menu, selection, hotzoneLocation)

    if needsRender == 1:
      print(term.center(commonEmptyLine(renderMode)))
      print(term.center(commonEmptyLine(renderMode)))
      if not hideHelpText:
        print(term.center(commonEmptyLine(renderMode)))
        print(term.center("{bv}      Controls:                                                                 {bv}".format(bv=specialChars[renderMode]["borderVertical"])))
        print(term.center("{bv}      [Up] and [Down] to move selection cursor                                  {bv}".format(bv=specialChars[renderMode]["borderVertical"])))
        print(term.center("{bv}      [H] Show/hide this text                                                   {bv}".format(bv=specialChars[renderMode]["borderVertical"])))
        print(term.center("{bv}      [Enter] to run command or save input                                      {bv}".format(bv=specialChars[renderMode]["borderVertical"])))
        print(term.center("{bv}      [Escape] to go back to build stack menu                                   {bv}".format(bv=specialChars[renderMode]["borderVertical"])))
        print(term.center(commonEmptyLine(renderMode)))
      print(term.center(commonEmptyLine(renderMode)))
      print(term.center(commonBottomBorder(renderMode)))
Exemple #2
0
  def mainRender(needsRender, menu, selection):
    global paginationStartIndex
    global paginationSize
    term = Terminal()
    
    if selection >= paginationStartIndex + paginationSize:
      paginationStartIndex = selection - (paginationSize - 1) + 1
      needsRender = 1
      
    if selection <= paginationStartIndex - 1:
      paginationStartIndex = selection
      needsRender = 1

    if needsRender == 1:
      print(term.clear())
      print(term.move_y(term.height // 16))
      print(term.black_on_cornsilk4(term.center('IOTstack MariaDB Password Options')))
      print("")
      print(term.center(commonTopBorder(renderMode)))
      print(term.center(commonEmptyLine(renderMode)))
      print(term.center("{bv}      Select Password Option                                                    {bv}".format(bv=specialChars[renderMode]["borderVertical"])))
      print(term.center(commonEmptyLine(renderMode)))

    if needsRender >= 1:
      renderHotZone(term, needsRender, menu, selection, hotzoneLocation)

    if needsRender == 1:
      print(term.center(commonEmptyLine(renderMode)))
      if not hideHelpText:
        if term.height < 32:
          print(term.center(commonEmptyLine(renderMode)))
          print(term.center("{bv}      Not enough vertical room to render controls help text                     {bv}".format(bv=specialChars[renderMode]["borderVertical"])))
          print(term.center(commonEmptyLine(renderMode)))
        else: 
          print(term.center(commonEmptyLine(renderMode)))
          print(term.center("{bv}      Controls:                                                                 {bv}".format(bv=specialChars[renderMode]["borderVertical"])))
          print(term.center("{bv}      [Space] to select option                                                  {bv}".format(bv=specialChars[renderMode]["borderVertical"])))
          print(term.center("{bv}      [Up] and [Down] to move selection cursor                                  {bv}".format(bv=specialChars[renderMode]["borderVertical"])))
          print(term.center("{bv}      [H] Show/hide this text                                                   {bv}".format(bv=specialChars[renderMode]["borderVertical"])))
          print(term.center("{bv}      [Enter] to build and save option                                          {bv}".format(bv=specialChars[renderMode]["borderVertical"])))
          print(term.center("{bv}      [Escape] to cancel changes                                                {bv}".format(bv=specialChars[renderMode]["borderVertical"])))
          print(term.center(commonEmptyLine(renderMode)))
          print(term.center(commonEmptyLine(renderMode)))
      print(term.center(commonBottomBorder(renderMode)))
Exemple #3
0
  def mainRender(needsRender, menu, selection):
    term = Terminal()
    
    if needsRender == 1:
      print(term.clear())
      print(term.move_y(term.height // 16))
      print(term.black_on_cornsilk4(term.center('IOTstack Next Cloud Options')))
      print("")
      print(term.center(commonTopBorder(renderMode)))
      print(term.center(commonEmptyLine(renderMode)))
      print(term.center("{bv}      Select Option to configure                                                {bv}".format(bv=specialChars[renderMode]["borderVertical"])))
      print(term.center(commonEmptyLine(renderMode)))

    if needsRender >= 1:
      renderHotZone(term, menu, selection, hotzoneLocation)

    if needsRender == 1:
      print(term.center(commonEmptyLine(renderMode)))
      print(term.center(commonEmptyLine(renderMode)))
      if not hideHelpText:
        print(term.center(commonEmptyLine(renderMode)))
        print(term.center("{bv}      Controls:                                                                 {bv}".format(bv=specialChars[renderMode]["borderVertical"])))
        print(term.center("{bv}      [Up] and [Down] to move selection cursor                                  {bv}".format(bv=specialChars[renderMode]["borderVertical"])))
        print(term.center("{bv}      [H] Show/hide this text                                                   {bv}".format(bv=specialChars[renderMode]["borderVertical"])))
        print(term.center("{bv}      [Enter] to run command or save input                                      {bv}".format(bv=specialChars[renderMode]["borderVertical"])))
        print(term.center("{bv}      [Escape] to go back to build stack menu                                   {bv}".format(bv=specialChars[renderMode]["borderVertical"])))
        print(term.center(commonEmptyLine(renderMode)))
        if len(documentationHint) > 1:
          if len(documentationHint) > 56:
            documentationAndPadding = padText(documentationHint, 71)
            print(term.center("{bv}      Documentation:                                                            {bv}".format(bv=specialChars[renderMode]["borderVertical"])))
            print(term.center("{bv}        {dap} {bv}".format(bv=specialChars[renderMode]["borderVertical"], dap=documentationAndPadding)))
          else:
            documentationAndPadding = padText(documentationHint, 56)
            print(term.center("{bv}        Documentation: {dap} {bv}".format(bv=specialChars[renderMode]["borderVertical"], dap=documentationAndPadding)))
          print(term.center(commonEmptyLine(renderMode)))
      print(term.center(commonEmptyLine(renderMode)))
      print(term.center(commonBottomBorder(renderMode)))
Exemple #4
0
    def mainRender(needsRender, menu, selection):
        term = Terminal()

        if needsRender == 1:
            print(term.clear())
            print(term.move_y(6 - hotzoneLocation[0]))
            print(
                term.black_on_cornsilk4(
                    term.center('IOTstack Miscellaneous Commands')))
            print("")
            print(term.center(commonTopBorder(renderMode)))
            print(term.center(commonEmptyLine(renderMode)))
            print(
                term.center(
                    "{bv}      Select Command to run                                                     {bv}"
                    .format(bv=specialChars[renderMode]["borderVertical"])))
            print(term.center(commonEmptyLine(renderMode)))
            print(term.center(commonEmptyLine(renderMode)))
            print(term.center(commonEmptyLine(renderMode)))

        if needsRender >= 1:
            renderHotZone(term, menu, selection, hotzoneLocation)

        if needsRender == 1:
            print(term.center(commonEmptyLine(renderMode)))
            if not hideHelpText:
                if term.height < 30:
                    print(term.center(commonEmptyLine(renderMode)))
                    print(
                        term.center(
                            "{bv}      Not enough vertical room to render controls help text                     {bv}"
                            .format(bv=specialChars[renderMode]
                                    ["borderVertical"])))
                    print(term.center(commonEmptyLine(renderMode)))
                else:
                    print(term.center(commonEmptyLine(renderMode)))
                    print(
                        term.center(
                            "{bv}      Controls:                                                                 {bv}"
                            .format(bv=specialChars[renderMode]
                                    ["borderVertical"])))
                    print(
                        term.center(
                            "{bv}      [Up] and [Down] to move selection cursor                                  {bv}"
                            .format(bv=specialChars[renderMode]
                                    ["borderVertical"])))
                    print(
                        term.center(
                            "{bv}      [H] Show/hide this text                                                   {bv}"
                            .format(bv=specialChars[renderMode]
                                    ["borderVertical"])))
                    print(
                        term.center(
                            "{bv}      [Enter] to run command                                                    {bv}"
                            .format(bv=specialChars[renderMode]
                                    ["borderVertical"])))
                    print(
                        term.center(
                            "{bv}      [Escape] to go back to main menu                                          {bv}"
                            .format(bv=specialChars[renderMode]
                                    ["borderVertical"])))
                    print(term.center(commonEmptyLine(renderMode)))
            print(term.center(commonEmptyLine(renderMode)))
            print(term.center(commonBottomBorder(renderMode)))
Exemple #5
0
    def mainRender(needsRender, menu, selection):
        term = Terminal()

        if needsRender == 1:
            print(term.clear())
            print(term.move_y(term.height // 16))
            print(
                term.black_on_cornsilk4(
                    term.center('IOTstack NodeRed Options')))
            print("")
            print(term.center(commonTopBorder(renderMode)))
            print(term.center(commonEmptyLine(renderMode)))
            print(
                term.center(
                    "{bv}      Select Option to configure                                                {bv}"
                    .format(bv=specialChars[renderMode]["borderVertical"])))
            print(term.center(commonEmptyLine(renderMode)))

        if needsRender >= 1:
            renderHotZone(term, menu, selection, hotzoneLocation)

        if needsRender == 1:
            if os.path.exists(serviceService + '/addons_list.yml'):
                if hasRebuiltAddons:
                    print(term.center(commonEmptyLine(renderMode)))
                    print(
                        term.center(
                            '{bv}     {t.grey_on_blue4} {text} {t.normal}{t.white_on_black}{t.normal}                            {bv}'
                            .format(
                                t=term,
                                text=
                                "Addons list has been rebuilt: addons_list.yml",
                                bv=specialChars[renderMode]
                                ["borderVertical"])))
                else:
                    print(term.center(commonEmptyLine(renderMode)))
                    print(
                        term.center(
                            '{bv}     {t.grey_on_blue4} {text} {t.normal}{t.white_on_black}{t.normal}                   {bv}'
                            .format(
                                t=term,
                                text=
                                "Using existing addons_list.yml for addons installation",
                                bv=specialChars[renderMode]
                                ["borderVertical"])))
            else:
                print(term.center(commonEmptyLine(renderMode)))
                print(term.center(commonEmptyLine(renderMode)))
            if not hideHelpText:
                print(term.center(commonEmptyLine(renderMode)))
                print(
                    term.center(
                        "{bv}      Controls:                                                                 {bv}"
                        .format(
                            bv=specialChars[renderMode]["borderVertical"])))
                print(
                    term.center(
                        "{bv}      [Up] and [Down] to move selection cursor                                  {bv}"
                        .format(
                            bv=specialChars[renderMode]["borderVertical"])))
                print(
                    term.center(
                        "{bv}      [H] Show/hide this text                                                   {bv}"
                        .format(
                            bv=specialChars[renderMode]["borderVertical"])))
                print(
                    term.center(
                        "{bv}      [Enter] to run command or save input                                      {bv}"
                        .format(
                            bv=specialChars[renderMode]["borderVertical"])))
                print(
                    term.center(
                        "{bv}      [Escape] to go back to build stack menu                                   {bv}"
                        .format(
                            bv=specialChars[renderMode]["borderVertical"])))
                print(term.center(commonEmptyLine(renderMode)))
                if len(documentationHint) > 1:
                    if len(documentationHint) > 56:
                        documentationAndPadding = padText(
                            documentationHint, 71)
                        print(
                            term.center(
                                "{bv}      Documentation:                                                            {bv}"
                                .format(bv=specialChars[renderMode]
                                        ["borderVertical"])))
                        print(
                            term.center("{bv}        {dap} {bv}".format(
                                bv=specialChars[renderMode]["borderVertical"],
                                dap=documentationAndPadding)))
                    else:
                        documentationAndPadding = padText(
                            documentationHint, 56)
                        print(
                            term.center(
                                "{bv}        Documentation: {dap} {bv}".format(
                                    bv=specialChars[renderMode]
                                    ["borderVertical"],
                                    dap=documentationAndPadding)))
                    print(term.center(commonEmptyLine(renderMode)))
            print(term.center(commonEmptyLine(renderMode)))
            print(term.center(commonBottomBorder(renderMode)))
Exemple #6
0
    def mainRender(needsRender, menu, selection):
        global paginationStartIndex
        global paginationSize
        term = Terminal()

        if selection >= paginationStartIndex + paginationSize:
            paginationStartIndex = selection - (paginationSize - 1) + 1
            needsRender = 1

        if selection <= paginationStartIndex - 1:
            paginationStartIndex = selection
            needsRender = 1

        if needsRender == 1:
            print(term.clear())
            print(term.move_y(term.height // 16))
            print(
                term.black_on_cornsilk4(
                    term.center('IOTstack Node Red Addons')))
            print("")
            print(term.center(commonTopBorder(renderMode)))
            print(term.center(commonEmptyLine(renderMode)))
            print(
                term.center(
                    "{bv}      Select NodeRed Addons (npm) to install on initial run                     {bv}"
                    .format(bv=specialChars[renderMode]["borderVertical"])))
            print(term.center(commonEmptyLine(renderMode)))

        if needsRender >= 1:
            renderHotZone(term, needsRender, menu, selection, hotzoneLocation)

        if needsRender == 1:
            print(term.center(commonEmptyLine(renderMode)))
            if not hideHelpText:
                if term.height < 32:
                    print(term.center(commonEmptyLine(renderMode)))
                    print(
                        term.center(
                            "{bv}      Not enough vertical room to render controls help text                     {bv}"
                            .format(bv=specialChars[renderMode]
                                    ["borderVertical"])))
                    print(term.center(commonEmptyLine(renderMode)))
                else:
                    print(term.center(commonEmptyLine(renderMode)))
                    print(
                        term.center(
                            "{bv}                                                                                {bv}"
                            .format(bv=specialChars[renderMode]
                                    ["borderVertical"])))
                    print(
                        term.center(
                            "{bv}      Note: After initial startup installation, you must use the Palettes menu  {bv}"
                            .format(bv=specialChars[renderMode]
                                    ["borderVertical"])))
                    print(
                        term.center(
                            "{bv}        in the NodeRed WUI to add or remove addons from NodeRed.                {bv}"
                            .format(bv=specialChars[renderMode]
                                    ["borderVertical"])))
                    print(
                        term.center(
                            "{bv}                                                                                {bv}"
                            .format(bv=specialChars[renderMode]
                                    ["borderVertical"])))
                    print(
                        term.center(
                            "{bv}      Controls:                                                                 {bv}"
                            .format(bv=specialChars[renderMode]
                                    ["borderVertical"])))
                    print(
                        term.center(
                            "{bv}      [Space] to select or deselect addon                                       {bv}"
                            .format(bv=specialChars[renderMode]
                                    ["borderVertical"])))
                    print(
                        term.center(
                            "{bv}      [Up] and [Down] to move selection cursor                                  {bv}"
                            .format(bv=specialChars[renderMode]
                                    ["borderVertical"])))
                    print(
                        term.center(
                            "{bv}      [Tab] Expand or collapse addon menu size                                  {bv}"
                            .format(bv=specialChars[renderMode]
                                    ["borderVertical"])))
                    print(
                        term.center(
                            "{bv}      [S] Switch between sorted by checked and sorted alphabetically            {bv}"
                            .format(bv=specialChars[renderMode]
                                    ["borderVertical"])))
                    print(
                        term.center(
                            "{bv}      [H] Show/hide this text                                                   {bv}"
                            .format(bv=specialChars[renderMode]
                                    ["borderVertical"])))
                    print(
                        term.center(
                            "{bv}      [Enter] to build and save addons list                                     {bv}"
                            .format(bv=specialChars[renderMode]
                                    ["borderVertical"])))
                    print(
                        term.center(
                            "{bv}      [Escape] to cancel changes                                                {bv}"
                            .format(bv=specialChars[renderMode]
                                    ["borderVertical"])))
                    print(term.center(commonEmptyLine(renderMode)))
                    print(term.center(commonEmptyLine(renderMode)))
            print(term.center(commonBottomBorder(renderMode)))
  def mainRender(menu, selection, renderType = 1):
    global paginationStartIndex
    global paginationSize
    paddingBefore = 4

    allIssues = []

    if selection >= paginationStartIndex + paginationSize:
      paginationStartIndex = selection - (paginationSize - 1) + 1
      renderType = 1
      
    if selection <= paginationStartIndex - 1:
      paginationStartIndex = selection
      renderType = 1

    try:
      if (renderType == 1):
        checkForOptions()
        print(term.clear())
        print(term.move_y(7 - hotzoneLocation[0]))
        print(term.black_on_cornsilk4(term.center('IOTstack Build Menu')))
        print("")
        print(term.center(commonTopBorder(renderMode)))

        print(term.center(commonEmptyLine(renderMode)))
        print(term.center("{bv}      Select containers to build                                                {bv}".format(bv=specialChars[renderMode]["borderVertical"])))
        print(term.center(commonEmptyLine(renderMode)))
        print(term.center(commonEmptyLine(renderMode)))
        print(term.center(commonEmptyLine(renderMode)))

      renderHotZone(term, renderType, menu, selection, paddingBefore, allIssues)

      if (renderType == 1):
        print(term.center(commonEmptyLine(renderMode)))
        if not hideHelpText:
          room = term.height - (28 + len(allIssues) + paginationSize)
          if room < 0:
            allIssues.append({ "serviceName": "BuildStack Menu", "issues": { "screenSize": 'Not enough scren height to render correctly (t-height = ' + str(term.height) + ' v-lines = ' + str(room) + ')' } })
            print(term.center(commonEmptyLine(renderMode)))
            print(term.center("{bv}      Not enough vertical room to render controls help text ({th}, {rm})          {bv}".format(bv=specialChars[renderMode]["borderVertical"], th=padText(str(term.height), 3), rm=padText(str(room), 3))))
            print(term.center(commonEmptyLine(renderMode)))
          else: 
            print(term.center(commonEmptyLine(renderMode)))
            print(term.center("{bv}      Controls:                                                                 {bv}".format(bv=specialChars[renderMode]["borderVertical"])))
            print(term.center("{bv}      [Space] to select or deselect image                                       {bv}".format(bv=specialChars[renderMode]["borderVertical"])))
            print(term.center("{bv}      [Up] and [Down] to move selection cursor                                  {bv}".format(bv=specialChars[renderMode]["borderVertical"])))
            print(term.center("{bv}      [Right] for options for containers that support them                      {bv}".format(bv=specialChars[renderMode]["borderVertical"])))
            print(term.center("{bv}      [Tab] Expand or collapse build menu size                                  {bv}".format(bv=specialChars[renderMode]["borderVertical"])))
            print(term.center("{bv}      [H] Show/hide this text                                                   {bv}".format(bv=specialChars[renderMode]["borderVertical"])))
            # print(term.center("{bv}      [F] Filter options                                                        {bv}".format(bv=specialChars[renderMode]["borderVertical"])))
            print(term.center("{bv}      [Enter] to begin build                                                    {bv}".format(bv=specialChars[renderMode]["borderVertical"])))
            print(term.center("{bv}      [Escape] to cancel build                                                  {bv}".format(bv=specialChars[renderMode]["borderVertical"])))
            print(term.center(commonEmptyLine(renderMode)))
            print(term.center(commonEmptyLine(renderMode)))
        print(term.center(commonEmptyLine(renderMode)))
        print(term.center(commonBottomBorder(renderMode)))

        if len(allIssues) > 0:
          print(term.center(""))
          print(term.center(""))
          print(term.center(""))
          print(term.center(("{btl}{bh}{bh}{bh}{bh}{bh}{bh} Build Issues "
            "{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}"
            "{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}"
            "{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}"
            "{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}"
            "{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}"
            "{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}"
            "{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}{bh}"
            "{bh}{bh}{bh}{bh}{bh}{bh}{bh}{btr}").format(
            btl=specialChars[renderMode]["borderTopLeft"],
            btr=specialChars[renderMode]["borderTopRight"],
            bh=specialChars[renderMode]["borderHorizontal"]
          )))
          print(term.center(commonEmptyLine(renderMode, size = 139)))
          for serviceIssues in allIssues:
            for index, issue in enumerate(serviceIssues["issues"]):
              spacesAndBracketsLen = 5
              issueAndTypeLen = len(issue) + len(serviceIssues["serviceName"]) + spacesAndBracketsLen
              serviceNameAndConflictType = '{t.red_on_black}{issueService}{t.normal} ({t.yellow_on_black}{issueType}{t.normal}) '.format(t=term, issueService=serviceIssues["serviceName"], issueType=issue)
              formattedServiceNameAndConflictType = generateLineText(str(serviceNameAndConflictType), textLength=issueAndTypeLen, paddingBefore=0, lineLength=32)
              issueDescription = generateLineText(str(serviceIssues["issues"][issue]), textLength=len(str(serviceIssues["issues"][issue])), paddingBefore=0, lineLength=103)
              print(term.center("{bv} {nm} - {desc} {bv}".format(nm=formattedServiceNameAndConflictType, desc=issueDescription, bv=specialChars[renderMode]["borderVertical"]) ))
          print(term.center(commonEmptyLine(renderMode, size = 139)))
          print(term.center(commonBottomBorder(renderMode, size = 139)))

    except Exception as err: 
      print("There was an error rendering the menu:")
      print(err)
      print("Press [Esc] to go back")
      return

    return
Exemple #8
0
    def mainRender(menu, selection):
        term = Terminal()
        print(term.clear())

        print(term.clear())
        print(term.move_y(term.height // 16))
        print(term.black_on_cornsilk4(
            term.center('IOTstack Example Commands')))
        print("")
        print(term.center(commonTopBorder(renderMode)))
        print(term.center(commonEmptyLine(renderMode)))
        print(
            term.center(
                "{bv}      Select Command to run                                                     {bv}"
                .format(bv=specialChars[renderMode]["borderVertical"])))

        print(term.center(commonEmptyLine(renderMode)))

        lineLengthAtTextStart = 71

        for (index, menuItem) in enumerate(menu):
            toPrint = ""
            if index == selection:  # This checks if the current rendering item is the one that's selected
                toPrint += (
                    '{bv} -> {t.blue_on_green} {title} {t.normal} <-'.format(
                        t=term,
                        title=menuItem[0],
                        bv=specialChars[renderMode]["borderVertical"]))
            else:
                if len(
                        menu[index]
                ) > 2 and "customProperty" in menu[index][2] and menu[index][2][
                        "customProperty"] == True:  # A custom property check example
                    toPrint += (
                        '{bv}    {t.black_on_green} {title} {t.normal}   '.
                        format(t=term,
                               title=menuItem[0],
                               bv=specialChars[renderMode]["borderVertical"]))
                else:
                    toPrint += ('{bv}    {t.normal} {title}    '.format(
                        t=term,
                        title=menuItem[0],
                        bv=specialChars[renderMode]["borderVertical"]))

            for i in range(lineLengthAtTextStart -
                           len(menuItem[0])):  # Pad the remainder of the line
                toPrint += " "

            toPrint += "{bv}".format(
                bv=specialChars[renderMode]["borderVertical"])

            toPrint = term.center(toPrint)

            print(toPrint)

        print(term.center(commonEmptyLine(renderMode)))
        if not hideHelpText:
            print(term.center(commonEmptyLine(renderMode)))
            print(
                term.center(
                    "{bv}      Controls:                                                                 {bv}"
                    .format(bv=specialChars[renderMode]["borderVertical"])))
            print(
                term.center(
                    "{bv}      [Up] and [Down] to move selection cursor                                  {bv}"
                    .format(bv=specialChars[renderMode]["borderVertical"])))
            print(
                term.center(
                    "{bv}      [H] Show/hide this text                                                   {bv}"
                    .format(bv=specialChars[renderMode]["borderVertical"])))
            print(
                term.center(
                    "{bv}      [Enter] to run command                                                    {bv}"
                    .format(bv=specialChars[renderMode]["borderVertical"])))
            print(
                term.center(
                    "{bv}      [Escape] to go back to build stack menu                                   {bv}"
                    .format(bv=specialChars[renderMode]["borderVertical"])))
            print(term.center(commonEmptyLine(renderMode)))
        print(term.center(commonEmptyLine(renderMode)))
        print(term.center(commonBottomBorder(renderMode)))