code: def prompt_update_all(config: 'Config'):
      
  
      click.echo()
      click.echo('Welcome !')
      click.echo('Press enter to keep the defaults or enter a new value to update the configuration.')
      click.echo('Press Ctrl+C at any time to quit and save')
      click.echo()
  
      for field in config:
  
          type_ = config.__type__(field)
          hint = config.__hint__(field) + ' ({})'.format(type_.__name__)
  
          if isinstance(type_, conftypes.SubConfigType):
              continue
  
          # we prompt the paths through prompt_file and not click
          if type_ is conftypes.path:
              config[field] = prompt_file(hint, default=config[field])
              continue
  
          if isinstance(type_, conftypes.ConfigType):
              # config[field] is always real data, but we want to show something that is the closest
              # possible to what the user needs to enter
              # thus, we show what we would store in the json
              default = type_.save(config[field])
          else:
              default = config[field]
  
          # a too long hint is awful
          if len(str(default)) > 14:
              default = str(default)[:10] + '...'
  
          # ask untill we have the right type
          value = click.prompt(hint, default=default, type=type_)
  
          # click doesnt convert() the default if nothing is entered, so it wont be valid
          # however we don't care because default means that we don't have to update
          if value == default:
              LOGGER.debug('same value and default, skipping set. %r == %r', value, default)
              continue
  
          config[field] = value
docs: Prompt each field of the configuration to the user.