docs: def magictype(text, prompt_template="default", speed=1):
      """Echo each character in ``text`` as keyboard characters are pressed.
      Characters are echo'd ``speed`` characters at a time.
      """
      echo_prompt(prompt_template)
      cursor_position = 0
      return_to_regular_type = False
      with raw_mode():
          while True:
              char = text[cursor_position : cursor_position + speed]
              in_char = getchar()
              if in_char in {ESC, CTRLC}:
                  echo(carriage_return=True)
                  raise click.Abort()
              elif in_char == TAB:
                  return_to_regular_type = True
                  break
              elif in_char == BACKSPACE:
                  if cursor_position > 0:
                      echo("\b \b", nl=False)
                      cursor_position -= 1
              elif in_char in RETURNS:
                  # Only return at end of command
                  if cursor_position >= len(text):
                      echo("\r", nl=True)
                      break
              elif in_char == CTRLZ and hasattr(signal, "SIGTSTP"):
                  # Background process
                  os.kill(0, signal.SIGTSTP)
                  # When doitlive is back in foreground, clear the terminal
                  # and resume where we left off
                  click.clear()
                  echo_prompt(prompt_template)
                  echo(text[:cursor_position], nl=False)
              else:
                  if cursor_position < len(text):
                      echo(char, nl=False)
                      increment = min([speed, len(text) - cursor_position])
                      cursor_position += increment
      return return_to_regular_type