code: def _trim_text(text, max_width):
      
      width = get_cwidth(text)
  
      # When the text is too wide, trim it.
      if width > max_width:
          # When there are no double width characters, just use slice operation.
          if len(text) == width:
              trimmed_text = (text[:max(1, max_width-3)] + '...')[:max_width]
              return trimmed_text, len(trimmed_text)
  
          # Otherwise, loop until we have the desired width. (Rather
          # inefficient, but ok for now.)
          else:
              trimmed_text = ''
              for c in text:
                  if get_cwidth(trimmed_text + c) <= max_width - 3:
                      trimmed_text += c
              trimmed_text += '...'
  
              return (trimmed_text, get_cwidth(trimmed_text))
      else:
          return text, width
docs: Trim the text to `max_width`, append dots when the text is too long.
      Returns (text, width) tuple.