A virtual user-programmable keyboard