1

Situation:

table = { this, that, something else, x_coord, y_coord }
table.x_coord = { 1,2,3,4,7,8,n}
table.y_coord = { 2,4,5,9,n} -- numbers aren't fix
table.check_boxes = { [12] = a function,
                      [14] = a function,
                      [15] = a function,
                      [24] = a function,
                      [29] = a function,
                         ....(n) }

As you can see, the x/y_coords forming check_boxes. For example:

table.x_coord[1]..table.y_coord[1] ~ table.check_boxes[1]

I use this to move the cursor in the Terminal between the check_boxes.

The problem now is in my cursormovement. Currently I got a function that's searching for the next x/y_coord to the left/right/up/down depending on the given input (arrow-keys). With return/space I call the function behind the checkbox.

Now, that could set the Cursor on positions where no check_boxes are given. Actually that's not a big deal, because when input == space/return, an inputhandler calls the function at

table.check_boxes[table.x_coorx[x_index]..table.y_coords[y_index]]

So if the cursor doesn't point on a function, just nothing happens. But now I want the cursor to be forced to the next check_box. What can I do?

My Idea so far:

following function either for x or y, depending on input left/right up/down:

while true do
    for k, v in pairs(table.check_boxes) do
        if(table.x_coord[x_index] .. table.y_coord[y_index] == k then break end
    end -- break -> okay, coord is at a checkbox

    x_index = x_index + 1 -- or -1 

    if table.x_coord[x_index] == nil then 
        x_index = 1
    end
end

The Problem now is that the last if will not allow cases like x_coord = {1,3} because it will set x_index to 1 if 2 is reached.

Any tips?

Edit: Now I got that one going:

function cursorTioNextBoxRight()
    searc_index = x_index
    search = true
    while search do
        search_index = search_index + 1

        if search_index > #table.x_coord then
            search_index = 1
        end

    for k, v in pairs(table.check_boxes) do
        if tonumber(table.x_coord[search_index..table.y_coord[y_index] == k then
            x_index = search_index -- YAAAY
            search = false
            break
         end
     end
end

I'ts damn slow.

Alécio Carvalho
  • 13,481
  • 5
  • 68
  • 74
jawo
  • 856
  • 1
  • 8
  • 24
  • Please don't confuse between [Lua](https://github.com/LuaDist/lua) and [LUA](https://github.com/mniip/lua). Both languages are different. "Lua" is a name, and means "Moon" in Portugese. Please **do not write** it as _"LUA"_, which is both ugly and confusing, because then it becomes an acronym with [different meanings](http://acronyms.thefreedictionary.com/lua) for different people. – hjpotter92 Aug 12 '14 at 05:40

2 Answers2

0
local x_newIndex = x_index + 1 --[[ or -1 --]]
x_index = table.x_coord[x_newIndex] and x_newIndex or x_index

x_index becomes x_newIndex when x_newIndex exists in the table otherwise it stays the old x_index

Enigma
  • 1,699
  • 10
  • 14
0
function cursorTioNextBoxRight()
searc_index = x_index
search = true
while search do
    search_index = search_index + 1

    if search_index > #table.x_coord then
        search_index = 1
    end

for k, v in pairs(table.check_boxes) do
    if tonumber(table.x_coord[search_index..table.y_coord[y_index] == k then
        x_index = search_index -- YAAAY
        search = false
        break
     end
 end

end

jawo
  • 856
  • 1
  • 8
  • 24