MainMenu = {} local function getSizeOfScreen() local x, y = term.getSize() return x, y end local function initMenu() -- do a menu for computer craft local menuItems = { { name = "Get Method", action = function() shell.run("getMethodsPeripheral") end }, { name = "Settings", action = function() print("Opening settings...") end }, { name = "Exit", action = function() print("Exiting...") end } } -- put the item in MainMenu for _, item in ipairs(menuItems) do table.insert(MainMenu, item) end end local function displayMenu() local selected = 1 local function drawTitle() local x, y = getSizeOfScreen() local title = " Main Menu " term.setTextColor(colors.yellow) local decorator = '=' term.write(string.rep(decorator, math.floor((x - #title) / 2))) term.setCursorPos(math.floor((x - #title) / 2) + 1, 1) print(title) term.setCursorPos(math.floor((x + #title) / 2) + 1, 1) term.write(string.rep(decorator, math.ceil((x - #title) / 2))) term.setTextColor(colors.white) term.write(string.rep(decorator, x)) end local function drawMenuItems(selected) for i, item in ipairs(MainMenu) do term.setCursorPos(1, i + 2) if i == selected then term.setTextColor(colors.yellow) else term.setTextColor(colors.white) end -- put the item in the center and add [ ] before item local itemText = string.format("[%s] %s", i == selected and ">" or " ", item.name) local x, _ = getSizeOfScreen() local padding = math.max(0, (x - #itemText) / 2) term.write(string.rep(" ", padding) .. itemText) term.setCursorPos(1, i + 2) term.write(string.rep(" ", x - padding - #itemText)) term.setCursorPos(1, i + 2) term.setTextColor(colors.white) end end local function handleKey(selected) local event, key = os.pullEvent("key") if key == keys.up then selected = selected - 1 if selected < 1 then selected = #MainMenu end elseif key == keys.down then selected = selected + 1 if selected > #MainMenu then selected = 1 end elseif key == keys.enter then term.setTextColor(colors.white) term.clear() term.setCursorPos(1, 1) MainMenu[selected].action() return selected, true end return selected, false end while true do term.clear() term.setCursorPos(1, 1) drawTitle() term.setTextColor(colors.white) term.setCursorPos(1, 3) drawMenuItems(selected) selected, done = handleKey(selected) if done then break end end term.setTextColor(colors.white) end function Main() initMenu() displayMenu() end Main()