tput // special keys.

$ read -s -N 5 ch; printf "$ch" |od -An -c
 033   [   1   2   ~
$ tput kf1 |od -An -c
 033   O   P

Obviously during the read I pressed F1. So check something more normal, right-arrow:

[mute@geek ~]$ read -s -N 3 ch; printf "$ch" |od -An -c
 033   [   C
[mute@geek ~]$ tput kcuf1 |od -An -c
 033   O   C

Is my terminal the only broken one? I'm using PuTTY.. Changing the keyboard behavior options didn't seem to change the outcome.

So if developing a terminal application in bash, should I accept both? Are there any conflicts? A good document detailing modern terminal emulators behavior in regards to keys?

tput will use the terminfo database associated with the environment you are in (echo $TERM). Your "physical" terminal might be a different type. Just because a "physical" (could be a terminal emulator, like PuTTY) says it is using a particular terminal type doesn't mean there is a proper match with the TERM/terminfo being used.

The terminfo database is there so that you can handle whatever terminal might be used. The ability to directly query the "physical" terminal and therefore set TERM correctly isn't guaranteed.

Look under ther Terminal settings of PuTTY to adjust. If memory serves me correct, the SCO entry handles the most (ctrl, alt, shift combos)... BUT I don't believe the terminfo db for any of the SCO ansi terms in Linux is quite up to snuff... but you could create one (I know I have in the past).

I decided a mixture of PuTTY and xterm documentation, coupled with a glance at irssi and bash's readline bindings will support everything I need I guess. Thanks.