When using the <key ... pressed?> block, it works with the key repeat settings. When pressing a key, the first event is received immediately, but the second event is only triggered after the key-repeat-wait-time. (at least in firefox)
Is there a way to directly check if a key is down?
hmm... not sure if I understand your question. As you've mentioned yourself, one is testing the state of a key (the key down predicate), whereas the other, the hat block, fires an event whenever the key is pressed. That event is received by the OS / hardware, and you can customize the repeat and repeat delay settings there, e.g. on a Mac: