Improve the support for keyboard input! CurrentValue should be able to read more than just the modifier keys. The current support for only KeyDown events makes it very hard to make keyboard based controls for games. Sharing games with CDF is one of the best ways to get new people interested in Mathematica. I spent the first several years of teaching myself how to program by making two-player keyboard input games. Friends in my high school classes loved playing them. My school didn't offer any programming classes, and when I started an after school club for programming all people wanted to do was learn how to make games.
Mathematica is the only language I've ever used to make a result to show to someone else that doesn't support this functionality. Don't get me wrong. I love that I'll be able to read input from a DIY mass spectrometer in WL, but if you write your code on a keyboard, you need to fully support getting input from it. I don't have any data, but every second of my life tells me that for every student that wants to build a home weather station, we could gain ten users from students sharing games they make with their classmates.
Yesterday, I saw one of my friends from internships and the college programming team was making a game with Elm to practice reactive functional programming. I thought, "Hey, I'm making a Spacewar clone in Mathematica right now. I can probably sell him on Dynamic as opposed to Elm's lift and get him to install the CDF player, but I can't make a natural feeling input scheme for the Spacewar clone!"
I say this needs to be fixed or Elm or whatever the latest open-source startup language with a non-mainstream idea and a small library will eat Mathematica's lunch. I've got a boat to catch. I'll get caught up in a week. Here's the start of the Spacewar code if you want to try to make turning controls that don't jitter.
t0 = AbsoluteTime[]; dt = 0; {width, height} = {600,
400}; stars = {White, PointSize@Tiny,
Point@Transpose@{RandomReal[#, #3],
RandomReal[#2, #3]}} & @@ {width, height, 30}; ship1 := {White,
Line[4 {{{0, -3}, {1, -1}, {1, 1}, {0, 3}, {-1,
1}, {-1, -1}, {0, -3}}, {{1, -1}, {2, -2}, {2, -3}, {1/
2, -2}}, {{-1, -1}, {-2, -2}, {-2, -3}, {-(1/2), -2}},
If[CurrentValue[
"ShiftKey"], {{1/
2, -2}, {0, -4}, {-(1/2), -2}}, {}]}]}; {position1, velocity1,
angle1} = {2./3 {width, height}, {0, 0}, 0}; EventHandler[
Dynamic[(dt = # - t0; t0 = #) &@AbsoluteTime[];
If[CurrentValue["ShiftKey"],
velocity1 += 20 {-Sin@angle1, Cos@angle1} dt];
velocity1 += (10^5 Normalize@#/(Norm@#)^2 dt &)[{width, height}/2 -
position1];
Graphics[{stars, {White,
Translate[Line[{#, -#}], {width, height}/2] & /@
RandomReal[{-10, 10}, {2, 2}]},
Translate[Rotate[ship1, angle1, {0, 0}],
position1 = {Mod[#, width], Mod[#2, height]} & @@ (position1 +
velocity1 dt)]}, PlotRange -> {{0, width}, {0, height}},
ImageSize -> {width, height},
Background -> Black]], {"LeftArrowKeyDown" :> (angle1 += 10 dt),
"RightArrowKeyDown" :> (angle1 -= 10 dt)}]