aradzie / keybr.com

The smartest way to learn touch typing and improve your typing speed.
https://www.keybr.com/
GNU Affero General Public License v3.0
1.93k stars 171 forks source link

[FEATURE REQUEST] Internal visualisation mode. Hiding all text ahead, flashing next word(s) on previous completion. #205

Open kroko opened 6 months ago

kroko commented 6 months ago

Reason

To approach practical typing outside of this training domain the internal visualisation of the text is needed. The existing principle strongly ties visual with typing, I mean, user is literally shown what the next character (all of them) needs to be.

Mode

Guided lessons

Practically applicable

When Prefer natural words is chosen although one can use it also on random gibberish. So explanation should be presented.

Currently

All characters (and words) that are to come are in full contrast, all solved characters (and words) are dimmed.

Proposed mode

set first_word to BLACK
while typing
    set ALL untyped characters AFTER cursor to TRANSPARENT
    if cursor exactly after last character of word
        for next COUNT words set characters to BLACK
    if <meta+space> press
        set current word characters black

N.B. showing one word (COUNT == 1) ahead might be too less, so there is a setting about how many next words are "flashed" when a word has just been finished.

here is the idea shown visually (COUNT=1 for simplicity)

  1. at the beginning

    Screenshot 2024-05-01 at 20 10 36
  2. starting to type

    Screenshot 2024-05-01 at 20 10 44
  3. still typing, just before the last character of word

    Screenshot 2024-05-01 at 20 11 03
  4. just finished word, the next is flushed

    Screenshot 2024-05-01 at 20 11 31
  5. continuing, the word hides

    Screenshot 2024-05-01 at 20 11 40
  6. still typing

    Screenshot 2024-05-01 at 20 11 52
  7. again at the end of word, next is shown

    Screenshot 2024-05-01 at 20 12 15
  8. continue typing

    Screenshot 2024-05-01 at 20 12 21
Screenshot 2024-05-01 at 20 12 32 Screenshot 2024-05-01 at 20 12 43
  1. currently writing word, but what was it ?

    Screenshot 2024-05-01 at 20 12 51
  2. meta+space (or whateva) shows the word

    Screenshot 2024-05-01 at 20 14 22
  3. ok, lets continue

    Screenshot 2024-05-01 at 20 14 34
kroko commented 6 months ago

btw, to add - mode where all characters to come are always hidden and the text that needs to be written is in other box, e.g. interfaces such as in 10fastfingers is also having having next character(s) visually spoon-fed 😄 to the user. eyes are fixated, a visual-to-muscle memory is established which simply isn't there in real life, as there is no text yet on the paper to look at, only in head. to repeat myself, knowing the word that needs to be typed, but not seeing it yields better quality for real-world typing, although it makes typing slower and learning more frustrating.

aradzie commented 6 months ago

That is an interesting idea. And let me say that I appreciate the effort you put into describing it. How would we show errors? Let's say I am in the middle of a word, the letters on the left from cursor are visible, and on the right are hidden. Then I make an error. I think it should immediately reveal the whole word.

kroko commented 6 months ago

mby settable internalisationModeRevealOnError? as IMHO this mode should be used (makes sense) with natural words most of the errors would be technical typing errors instead of not knowing how to spell the word errors, so if user misses BUT has word internalised already then it would be obvious what the error is and no need to show the word. but, idea that the word is shown also sounds reasonable, also for those who truly have issues with spelling

if internalisationModeEnabled &&
    isError &&
    !errorCorrected &&
    internalisationModeRevealOnError &&
    !forgiveErrors:
        show current word

i haven't used forgive errors mode myself, so i have no insight on that usage and how it works with this. if that mode just skips over errors, then no reveal is necessary(?) or maybe the opposite - when that mode is on, on any error reveal the word with error forever.

aradzie commented 6 months ago

Having many options is both impressive and annoying at the same time ;) Imo it is better to have a reasonable default and just show the word.

forgive errors automatically fixes some errors, like a skipped or a replaced character. It allows you to preserve speed and the state of "flow".

kroko commented 6 months ago

so reveal until corrected. and in case of forgive errors that would mean that the word stays revealed (as it is not corrected). sounds as a reasonable default 😄

if  !errorCorrected && # implies isError
    internalisationModeEnabled:
        show current word

edit: ⚠️ by next word i mean count of next words where count > 0. if you're good at it, you can look ahead and internalise multiple next words (like a dictation test in primary school, where you are presented with a sentence before writing it down). so the "flow" is kept. revealing only one word would be chunky, as after finishing the word one has to stop, read the revealed word.

kroko commented 6 months ago

have a reasonable default

i tried practically and actually there might be 3 variables (see C)

the screenshots in my OP is A=true, B=1, C=false

here is A=true, B=1, C=true

Screenshot 2024-05-03 at 22 44 04 Screenshot 2024-05-03 at 22 44 10 Screenshot 2024-05-03 at 22 44 22

here is A=true, B=2, C=true

Screenshot 2024-05-03 at 22 34 30 Screenshot 2024-05-03 at 22 34 59 Screenshot 2024-05-03 at 22 35 07

while this internalisation / write blindly mode leads to slower typing speeds anyway (part of the point), this may lead to more smoother experience.