From e0e194099cdfee6ab7b5972a59713e9807908505 Mon Sep 17 00:00:00 2001 From: JackMacWindows Date: Sat, 29 May 2021 11:55:55 -0400 Subject: [PATCH] Add a scale subcommand to monitor.lua (#623) --- .../lua/rom/programs/monitor.lua | 21 ++++++++++++++++++- .../data/computercraft/lua/rom/startup.lua | 19 +++++++++++++++-- .../test-rom/spec/programs/monitor_spec.lua | 18 +++++++++++++++- 3 files changed, 54 insertions(+), 4 deletions(-) diff --git a/src/main/resources/data/computercraft/lua/rom/programs/monitor.lua b/src/main/resources/data/computercraft/lua/rom/programs/monitor.lua index e97558357..05b1823f5 100644 --- a/src/main/resources/data/computercraft/lua/rom/programs/monitor.lua +++ b/src/main/resources/data/computercraft/lua/rom/programs/monitor.lua @@ -1,6 +1,8 @@ local function printUsage() local programName = arg[0] or fs.getName(shell.getRunningProgram()) - print("Usage: " .. programName .. " ") + print("Usage:") + print(" " .. programName .. " ") + print(" " .. programName .. " scale ") return end @@ -10,6 +12,23 @@ if #tArgs < 2 then return end +if tArgs[1] == "scale" then + local sName = tArgs[2] + if peripheral.getType(sName) ~= "monitor" then + print("No monitor named " .. sName) + return + end + + local nRes = tonumber(tArgs[3]) + if nRes == nil or nRes < 0.5 or nRes > 5 then + print("Invalid scale: " .. nRes) + return + end + + peripheral.call(sName, "setTextScale", nRes) + return +end + local sName = tArgs[1] if peripheral.getType(sName) ~= "monitor" then print("No monitor named " .. sName) diff --git a/src/main/resources/data/computercraft/lua/rom/startup.lua b/src/main/resources/data/computercraft/lua/rom/startup.lua index 8c347cc33..c5ce1a1da 100644 --- a/src/main/resources/data/computercraft/lua/rom/startup.lua +++ b/src/main/resources/data/computercraft/lua/rom/startup.lua @@ -67,10 +67,25 @@ shell.setCompletionFunction("rom/programs/label.lua", completion.build( )) shell.setCompletionFunction("rom/programs/list.lua", completion.build(completion.dir)) shell.setCompletionFunction("rom/programs/mkdir.lua", completion.build({ completion.dir, many = true })) + +local complete_monitor_extra = { "scale" } shell.setCompletionFunction("rom/programs/monitor.lua", completion.build( - { completion.peripheral, true }, - completion.program + function(shell, text, previous) + local choices = completion.peripheral(shell, text, previous, true) + for _, option in pairs(completion.choice(shell, text, previous, complete_monitor_extra, true)) do + choices[#choices + 1] = option + end + return choices + end, + function(shell, text, previous) + if previous[2] == "scale" then + return completion.peripheral(shell, text, previous, true) + else + return completion.program(shell, text, previous) + end + end )) + shell.setCompletionFunction("rom/programs/move.lua", completion.build( { completion.dirOrFile, true }, completion.dirOrFile diff --git a/src/test/resources/test-rom/spec/programs/monitor_spec.lua b/src/test/resources/test-rom/spec/programs/monitor_spec.lua index 04fbb613a..b77c57b28 100644 --- a/src/test/resources/test-rom/spec/programs/monitor_spec.lua +++ b/src/test/resources/test-rom/spec/programs/monitor_spec.lua @@ -3,6 +3,22 @@ local capture = require "test_helpers".capture_program describe("The monitor program", function() it("displays its usage when given no arguments", function() expect(capture(stub, "monitor")) - :matches { ok = true, output = "Usage: monitor \n", error = "" } + :matches { + ok = true, + output = + "Usage:\n" .. + " monitor \n" .. + " monitor scale \n", + error = "", + } + end) + + it("changes the text scale with the scale command", function() + local r = 1 + stub(peripheral, "call", function(s, f, t) r = t end) + stub(peripheral, "getType", function() return "monitor" end) + expect(capture(stub, "monitor", "scale", "left", "0.5")) + :matches { ok = true, output = "", error = "" } + expect(r):equals(0.5) end) end)