I believe this is something I figured out long ago, and completely forgot since, so I had to figure it out again. I’m using a new virtualized Linux server from Slicehost, and as usual, I have some stuff running under Screen. Now, Screen is a crufty old program, but it’s immensely useful for leaving things running and detaching from them (and later reattaching), along with multiplexing several terminals into one.
But, I started having a problem I’d had before. Inside screen, my delete key wasn’t sending ^? (ascii 127), but it was sending ^[[3~ (the escape sequence for that key). Outside of screen, it was sending ^? as I’d expect. (I’m going to avoid the whole backspace [^H] versus delete [^?] argument here — OS X and Linux distributions seem to all come with it configured for delete out of the box these days, and that’s most of what I deal with.)
I poked around, and found some workarounds like this one, but I really want to fix it, rather than lying to it about my terminal type.
This did however remind me of what was wrong. My termcap (well, terminfo) was missing the proper capability for the delete key. So, I looked what the terminal type claimed by OS X’s Terminal.app was:
$ echo $TERM
xterm-color
I poked around some .screenrc examples and an old termcap file and composed this line to put in my .screenrc :
termcapinfo xterm-color kD=\E[3~
And it works! I didn’t even have to start a new screen session, I just detached and re-attached.