Newbie Asks: keyboard input?

Just got the new version of Codea and am trying some ultra-novice coding. Got as far as “io.read,” which does not seem to work. Can anyone tell me how (or if) Codea accepts input from the keyboard? Can’t seem to find any info on this. Many thanks for any help.

The info is under Display and keyboard in the help (http://twolivesleft.com/Codea/Reference/#functions/index/display)

Here is the (slightly adapted to enable newlines) example:

function setup()
    print("Tap to start editing")
    textWrapWidth(40000)
end

function touched(touch)
    --Show keyboard when the screen is touched
    showKeyboard()
end

function draw()
    background(40,40,50)
    fill(255)
    textMode(CORNER)
    buffer = keyboardBuffer()

    _,bufferHeight = textSize(buffer)
    if buffer then
        text( buffer, 10, HEIGHT - 30 - bufferHeight )
    end
end
  1. Codea does not have everything the full lua documentation has like file io. Much of it is coming soon :slight_smile:
  2. Here is some code I made that uses keyboard input:

function setup()
    displayMode(FULLSCREEN)
    print("Hello World!")
    showKeyboard()
end

function draw()
    background(255, 255, 255, 255)
    strokeWidth(5)
 
    
    textMode(CORNER)
    buffer = keyboardBuffer()
    bufferHeight = textSize(buffer)
    if buffer then
        text(buffer, 10, 400)
    end
    
end

Sorry for not responding earlier.

Oh. I didn’t see@Herwig’s respons.

Thanks to both Zoyt and Herwig! This is very helpful, and I’ll try out the code asap.

@raferguzman keyboardBuffer() is a convenience method to get the text typed with the keyboard so-far, but it may be flushed at any time. If you want a true and accurate representation of what was typed with the keyboard you can use the global keyboard( key ) callback, like this:

function setup()
    showKeyboard()

    -- Use a table for the buffer
    -- Faster than a string
    myBuffer = {}
end

function draw()
    background(0)
end

function readBuffer()
    -- Read the buffer as a string
    return table.concat( myBuffer, "" )
end

function keyboard(key)
    -- This function gets called every time a key is pressed
    if key == BACKSPACE then
        table.remove( myBuffer, #myBuffer )
    else
        myBuffer[#myBuffer+1] = key
    end
end

This is a bit more overhead to get a buffer of keys typed, but it gives you full control over when and how it is flushed.

Simeon, thanks – I’ll give this a try as well!

How can i make the PGM respond to only “t” when t is pressed and not any key ?
This prints to compiler only…

-- Main

-- Make a PGM take a keybord input

 showKeyboard()

Time=t

print("Press any key to continue, then press return")

io.read()        -- Will print done when a key  is pressed

print("Done")