listen for user input