mirror of
				https://github.com/SquidDev-CC/CC-Tweaked
				synced 2025-10-31 13:42:59 +00:00 
			
		
		
		
	Multiple fixes and feature fixes for lua side of CC
In no particular order: bios.lua - added missing test for ensure turtle folder exists. paintutils.lua - added drawLineHorizontal() to reduce most (not all) cases of running multiple writes on same horizontal line that can be solved with one write. textutils.lua - Added exception to complete function - will not complete if provided with LuaKeyword - solves do->dofile problem and removes other LuaKeyword related ones in advance. edit.lua - Changed logic in handling the paste event - if paste event is received when menu is open it automatically closed said menu and lets it paste - resolves ctrl+ctrl+v annoyance. Added Jump to Menu functions - allows for fast jump to needed line - must for bigger files and a nice feature to have. set.lua - Switched set to use pagedPrint - this will ensure that even if there are more settings than lines on screen the set command will show you all of them. startup.lua - Added autocompletition for turtle programs go, turn, equip, unequip and command program exec. lua.lua - Changed return function to print returned stuff correctly - will print all returned variables even if there are any nils in there.
This commit is contained in:
		| @@ -747,7 +747,7 @@ for n,sFile in ipairs( tApis ) do | |||||||
|     end |     end | ||||||
| end | end | ||||||
|  |  | ||||||
| if turtle then | if turtle and fs.isDir( "rom/apis/turtle" ) then | ||||||
|     -- Load turtle APIs |     -- Load turtle APIs | ||||||
|     local tApis = fs.list( "rom/apis/turtle" ) |     local tApis = fs.list( "rom/apis/turtle" ) | ||||||
|     for n,sFile in ipairs( tApis ) do |     for n,sFile in ipairs( tApis ) do | ||||||
|   | |||||||
| @@ -4,6 +4,11 @@ local function drawPixelInternal( xPos, yPos ) | |||||||
|     term.write(" ") |     term.write(" ") | ||||||
| end | end | ||||||
|  |  | ||||||
|  | local function drawLineHorizontal( xPos, yPos , nLen ) | ||||||
|  |     term.setCursorPos( xPos, yPos ) | ||||||
|  |     term.write(string.rep( " ", nLen )) | ||||||
|  | end | ||||||
|  |  | ||||||
| local tColourLookup = {} | local tColourLookup = {} | ||||||
| for n=1,16 do | for n=1,16 do | ||||||
|     tColourLookup[ string.byte( "0123456789abcdef",n,n ) ] = 2^(n-1) |     tColourLookup[ string.byte( "0123456789abcdef",n,n ) ] = 2^(n-1) | ||||||
| @@ -78,6 +83,11 @@ function drawLine( startX, startY, endX, endY, nColour ) | |||||||
|     local xDiff = maxX - minX |     local xDiff = maxX - minX | ||||||
|     local yDiff = maxY - minY |     local yDiff = maxY - minY | ||||||
|      |      | ||||||
|  |     if minY == maxY then | ||||||
|  |         drawLineHorizontal( minX, minY , xDiff + 1 ) | ||||||
|  |         return | ||||||
|  |     end | ||||||
|  |              | ||||||
|     if xDiff > math.abs(yDiff) then |     if xDiff > math.abs(yDiff) then | ||||||
|         local y = minY |         local y = minY | ||||||
|         local dy = yDiff / xDiff |         local dy = yDiff / xDiff | ||||||
| @@ -133,10 +143,8 @@ function drawBox( startX, startY, endX, endY, nColour ) | |||||||
|         maxY = startY |         maxY = startY | ||||||
|     end |     end | ||||||
|  |  | ||||||
|     for x=minX,maxX do |     drawLineHorizontal( minX, minY , maxX - minX + 1 ) | ||||||
|         drawPixelInternal( x, minY ) |     drawLineHorizontal( minX, maxY , maxX - minX + 1 ) | ||||||
|         drawPixelInternal( x, maxY ) |  | ||||||
|     end |  | ||||||
|  |  | ||||||
|     if (maxY - minY) >= 2 then |     if (maxY - minY) >= 2 then | ||||||
|         for y=(minY+1),(maxY-1) do |         for y=(minY+1),(maxY-1) do | ||||||
| @@ -177,10 +185,8 @@ function drawFilledBox( startX, startY, endX, endY, nColour ) | |||||||
|         maxY = startY |         maxY = startY | ||||||
|     end |     end | ||||||
|  |  | ||||||
|     for x=minX,maxX do |  | ||||||
|     for y=minY,maxY do |     for y=minY,maxY do | ||||||
|             drawPixelInternal( x, y ) |         drawLineHorizontal( minX, y , maxX - minX + 1 ) | ||||||
|         end |  | ||||||
|     end |     end | ||||||
| end | end | ||||||
|  |  | ||||||
|   | |||||||
| @@ -338,6 +338,7 @@ end | |||||||
|  |  | ||||||
| local tEmpty = {} | local tEmpty = {} | ||||||
| function complete( sSearchText, tSearchTable ) | function complete( sSearchText, tSearchTable ) | ||||||
|  |     if g_tLuaKeywords[sSearchText] then return tEmpty end | ||||||
|     local nStart = 1 |     local nStart = 1 | ||||||
|     local nDot = string.find( sSearchText, ".", nStart, true ) |     local nDot = string.find( sSearchText, ".", nStart, true ) | ||||||
|     local tTable = tSearchTable or _ENV |     local tTable = tSearchTable or _ENV | ||||||
|   | |||||||
| @@ -59,6 +59,7 @@ end | |||||||
| if peripheral.find( "printer" ) then | if peripheral.find( "printer" ) then | ||||||
|     table.insert( tMenuItems, "Print" ) |     table.insert( tMenuItems, "Print" ) | ||||||
| end | end | ||||||
|  | table.insert( tMenuItems, "Jump" ) | ||||||
| table.insert( tMenuItems, "Exit" ) | table.insert( tMenuItems, "Exit" ) | ||||||
|  |  | ||||||
| local sStatus = "Press Ctrl to access menu" | local sStatus = "Press Ctrl to access menu" | ||||||
| @@ -282,6 +283,47 @@ local function redrawMenu() | |||||||
|     term.setCursorPos( x - scrollX, y - scrollY ) |     term.setCursorPos( x - scrollX, y - scrollY ) | ||||||
| end | end | ||||||
|  |  | ||||||
|  | local function setCursor( newX, newY ) | ||||||
|  |     local oldX, oldY = x, y | ||||||
|  |     x, y = newX, newY | ||||||
|  |     local screenX = x - scrollX | ||||||
|  |     local screenY = y - scrollY | ||||||
|  |      | ||||||
|  |     local bRedraw = false | ||||||
|  |     if screenX < 1 then | ||||||
|  |         scrollX = x - 1 | ||||||
|  |         screenX = 1 | ||||||
|  |         bRedraw = true | ||||||
|  |     elseif screenX > w then | ||||||
|  |         scrollX = x - w | ||||||
|  |         screenX = w | ||||||
|  |         bRedraw = true | ||||||
|  |     end | ||||||
|  |      | ||||||
|  |     if screenY < 1 then | ||||||
|  |         scrollY = y - 1 | ||||||
|  |         screenY = 1 | ||||||
|  |         bRedraw = true | ||||||
|  |     elseif screenY > h-1 then | ||||||
|  |         scrollY = y - (h-1) | ||||||
|  |         screenY = h-1 | ||||||
|  |         bRedraw = true | ||||||
|  |     end | ||||||
|  |  | ||||||
|  |     recomplete() | ||||||
|  |     if bRedraw then | ||||||
|  |         redrawText() | ||||||
|  |     elseif y ~= oldY then | ||||||
|  |         redrawLine( oldY ) | ||||||
|  |         redrawLine( y ) | ||||||
|  |     else | ||||||
|  |         redrawLine( y ) | ||||||
|  |     end | ||||||
|  |     term.setCursorPos( screenX, screenY ) | ||||||
|  |  | ||||||
|  |     redrawMenu() | ||||||
|  | end | ||||||
|  |  | ||||||
| local tMenuFuncs = {  | local tMenuFuncs = {  | ||||||
|     Save = function() |     Save = function() | ||||||
|         if bReadOnly then |         if bReadOnly then | ||||||
| @@ -395,7 +437,26 @@ local tMenuFuncs = { | |||||||
|             sStatus="Error saving to "..sTempPath |             sStatus="Error saving to "..sTempPath | ||||||
|         end |         end | ||||||
|         redrawMenu() |         redrawMenu() | ||||||
|  |     end, | ||||||
|  |     Jump = function() | ||||||
|  |         term.setCursorPos( 1, h ) | ||||||
|  |         term.clearLine() | ||||||
|  |         term.setTextColour( highlightColour ) | ||||||
|  |         term.write( "Line : " ) | ||||||
|  |         term.setTextColour( textColour ) | ||||||
|  |         local nLine = tonumber(read()) | ||||||
|  |         if type(nLine) == "number" then | ||||||
|  |             nLine = math.min(math.max( 1, nLine ), #tLines ) | ||||||
|  |             setCursor( 1, nLine ) | ||||||
|  |             sStatus="Jumped to line "..nLine | ||||||
|  |             redrawMenu() | ||||||
|  |             redrawText() | ||||||
|  |         else | ||||||
|  |             sStatus="Invalid line number" | ||||||
|  |             redrawMenu() | ||||||
|  |             redrawText() | ||||||
|         end |         end | ||||||
|  |     end, | ||||||
| } | } | ||||||
|  |  | ||||||
| local function doMenuItem( _n ) | local function doMenuItem( _n ) | ||||||
| @@ -407,47 +468,6 @@ local function doMenuItem( _n ) | |||||||
|     redrawMenu() |     redrawMenu() | ||||||
| end | end | ||||||
|  |  | ||||||
| local function setCursor( newX, newY ) |  | ||||||
|     local oldX, oldY = x, y |  | ||||||
|     x, y = newX, newY |  | ||||||
|     local screenX = x - scrollX |  | ||||||
|     local screenY = y - scrollY |  | ||||||
|      |  | ||||||
|     local bRedraw = false |  | ||||||
|     if screenX < 1 then |  | ||||||
|         scrollX = x - 1 |  | ||||||
|         screenX = 1 |  | ||||||
|         bRedraw = true |  | ||||||
|     elseif screenX > w then |  | ||||||
|         scrollX = x - w |  | ||||||
|         screenX = w |  | ||||||
|         bRedraw = true |  | ||||||
|     end |  | ||||||
|      |  | ||||||
|     if screenY < 1 then |  | ||||||
|         scrollY = y - 1 |  | ||||||
|         screenY = 1 |  | ||||||
|         bRedraw = true |  | ||||||
|     elseif screenY > h-1 then |  | ||||||
|         scrollY = y - (h-1) |  | ||||||
|         screenY = h-1 |  | ||||||
|         bRedraw = true |  | ||||||
|     end |  | ||||||
|  |  | ||||||
|     recomplete() |  | ||||||
|     if bRedraw then |  | ||||||
|         redrawText() |  | ||||||
|     elseif y ~= oldY then |  | ||||||
|         redrawLine( oldY ) |  | ||||||
|         redrawLine( y ) |  | ||||||
|     else |  | ||||||
|         redrawLine( y ) |  | ||||||
|     end |  | ||||||
|     term.setCursorPos( screenX, screenY ) |  | ||||||
|  |  | ||||||
|     redrawMenu() |  | ||||||
| end |  | ||||||
|  |  | ||||||
| -- Actual program functionality begins | -- Actual program functionality begins | ||||||
| load(sPath) | load(sPath) | ||||||
|  |  | ||||||
| @@ -709,7 +729,13 @@ while bRunning do | |||||||
|         end |         end | ||||||
|  |  | ||||||
|     elseif sEvent == "paste" then |     elseif sEvent == "paste" then | ||||||
|         if not bMenu and not bReadOnly then |         if not bReadOnly then | ||||||
|  |             -- Close menu if open | ||||||
|  |             if bMenu then | ||||||
|  |                 bMenu = false | ||||||
|  |                 term.setCursorBlink( true ) | ||||||
|  |                 redrawMenu() | ||||||
|  |             end | ||||||
|             -- Input text |             -- Input text | ||||||
|             local sLine = tLines[y] |             local sLine = tLines[y] | ||||||
|             tLines[y] = string.sub(sLine,1,x-1) .. param .. string.sub(sLine,x) |             tLines[y] = string.sub(sLine,1,x-1) .. param .. string.sub(sLine,x) | ||||||
|   | |||||||
| @@ -64,10 +64,10 @@ while bRunning do | |||||||
|     end |     end | ||||||
|      |      | ||||||
|     if func then |     if func then | ||||||
|         local tResults = { pcall( func ) } |         local tResults = table.pack( pcall( func ) ) | ||||||
|         if tResults[1] then |         if tResults[1] then | ||||||
|             local n = 1 |             local n = 1 | ||||||
|             while (tResults[n + 1] ~= nil) or (n <= nForcePrint) do |             while n < tResults.n or (n <= nForcePrint) do | ||||||
|                 local value = tResults[ n + 1 ] |                 local value = tResults[ n + 1 ] | ||||||
|                 if type( value ) == "table" then |                 if type( value ) == "table" then | ||||||
|                     local metatable = getmetatable( value ) |                     local metatable = getmetatable( value ) | ||||||
|   | |||||||
| @@ -2,9 +2,12 @@ | |||||||
| local tArgs = { ... } | local tArgs = { ... } | ||||||
| if #tArgs == 0 then | if #tArgs == 0 then | ||||||
|     -- "set" |     -- "set" | ||||||
|  |     local x,y = term.getCursorPos() | ||||||
|  |     local tSettings = {} | ||||||
|     for n,sName in ipairs( settings.getNames() ) do |     for n,sName in ipairs( settings.getNames() ) do | ||||||
|         print( textutils.serialize(sName) .. " is " .. textutils.serialize(settings.get(sName)) ) |         tSettings[n] = textutils.serialize(sName) .. " is " .. textutils.serialize(settings.get(sName)) | ||||||
|     end |     end | ||||||
|  |     textutils.pagedPrint(table.concat(tSettings,"\n"),y-3) | ||||||
|  |  | ||||||
| elseif #tArgs == 1 then | elseif #tArgs == 1 then | ||||||
|     -- "set foo" |     -- "set foo" | ||||||
|   | |||||||
| @@ -195,6 +195,45 @@ shell.setCompletionFunction( "rom/programs/fun/advanced/paint.lua", completeFile | |||||||
| shell.setCompletionFunction( "rom/programs/http/pastebin.lua", completePastebin ) | shell.setCompletionFunction( "rom/programs/http/pastebin.lua", completePastebin ) | ||||||
| shell.setCompletionFunction( "rom/programs/rednet/chat.lua", completeChat ) | shell.setCompletionFunction( "rom/programs/rednet/chat.lua", completeChat ) | ||||||
|  |  | ||||||
|  | if turtle then | ||||||
|  |     local tGoOptions = { "left", "right", "forward", "back", "down", "up" } | ||||||
|  |     local function completeGo( shell, nIndex, sText ) | ||||||
|  |         if nIndex == 1 then | ||||||
|  |             return completeMultipleChoice(sText,tGoOptions) | ||||||
|  |         end | ||||||
|  |     end | ||||||
|  |     local tTurnOptions = { "left", "right" } | ||||||
|  |     local function completeTurn( shell, nIndex, sText ) | ||||||
|  |         if nIndex == 1 then | ||||||
|  |             return completeMultipleChoice( sText, tTurnOptions ) | ||||||
|  |         end | ||||||
|  |     end | ||||||
|  |     local tEquipOptions = { "left", "right" } | ||||||
|  |     local function completeEquip( shell, nIndex, sText ) | ||||||
|  |         if nIndex == 2 then | ||||||
|  |             return completeMultipleChoice( sText, tEquipOptions ) | ||||||
|  |         end | ||||||
|  |     end | ||||||
|  |     local function completeUnequip( shell, nIndex, sText ) | ||||||
|  |         if nIndex == 1 then | ||||||
|  |             return completeMultipleChoice( sText, tEquipOptions ) | ||||||
|  |         end | ||||||
|  |     end | ||||||
|  |     shell.setCompletionFunction( "rom/programs/turtle/go.lua", completeGo ) | ||||||
|  |     shell.setCompletionFunction( "rom/programs/turtle/turn.lua", completeTurn ) | ||||||
|  |     shell.setCompletionFunction( "rom/programs/turtle/equip.lua", completeEquip ) | ||||||
|  |     shell.setCompletionFunction( "rom/programs/turtle/unequip.lua", completeUnequip ) | ||||||
|  | end | ||||||
|  |  | ||||||
|  | if commands then | ||||||
|  |     local function completExec( shell, nIndex, sText ) | ||||||
|  |         if nIndex == 1 then | ||||||
|  |             return completeMultipleChoice( sText, commands.list() ) | ||||||
|  |         end | ||||||
|  |     end | ||||||
|  |     shell.setCompletionFunction( "rom/programs/command/exec.lua", completExec ) | ||||||
|  | end | ||||||
|  |  | ||||||
| -- Run autorun files | -- Run autorun files | ||||||
| if fs.exists( "/rom/autorun" ) and fs.isDir( "/rom/autorun" ) then | if fs.exists( "/rom/autorun" ) and fs.isDir( "/rom/autorun" ) then | ||||||
|     local tFiles = fs.list( "/rom/autorun" ) |     local tFiles = fs.list( "/rom/autorun" ) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Wojbie
					Wojbie