code: def send_string(self, string: str):
          
          if not string:
              return
  
          string = string.replace('\n', "<enter>")
          string = string.replace('\t', "<tab>")
          
          _logger.debug("Send via event interface")
          self.__clearModifiers()
          modifiers = []
          for section in KEY_SPLIT_RE.split(string):
              if len(section) > 0:
                  if Key.is_key(section[:-1]) and section[-1] == '+' and section[:-1] in MODIFIERS:
                      # Section is a modifier application (modifier followed by '+')
                      modifiers.append(section[:-1])
                      
                  else:
                      if len(modifiers) > 0:
                          # Modifiers ready for application - send modified key
                          if Key.is_key(section):
                              self.interface.send_modified_key(section, modifiers)
                              modifiers = []
                          else:
                              self.interface.send_modified_key(section[0], modifiers)
                              if len(section) > 1:
                                  self.interface.send_string(section[1:])
                              modifiers = []
                      else:
                          # Normal string/key operation
                          if Key.is_key(section):
                              self.interface.send_key(section)
                          else:
                              self.interface.send_string(section)
                              
          self.__reapplyModifiers()
docs: Sends the given string for output.