code: func (ei *escapeInterpreter) output256() error {
  	if len(ei.csiParam) < 3 {
  		return ei.outputNormal()
  	}
  
  	mode, err := strconv.Atoi(ei.csiParam[1])
  	if err != nil {
  		return errCSIParseError
  	}
  	if mode != 5 {
  		return ei.outputNormal()
  	}
  
  	fgbg, err := strconv.Atoi(ei.csiParam[0])
  	if err != nil {
  		return errCSIParseError
  	}
  	color, err := strconv.Atoi(ei.csiParam[2])
  	if err != nil {
  		return errCSIParseError
  	}
  
  	switch fgbg {
  	case 38:
  		ei.curFgColor = Attribute(color + 1)
  
  		for _, param := range ei.csiParam[3:] {
  			p, err := strconv.Atoi(param)
  			if err != nil {
  				return errCSIParseError
  			}
  
  			switch {
  			case p == 1:
  				ei.curFgColor |= AttrBold
  			case p == 4:
  				ei.curFgColor |= AttrUnderline
  			case p == 7:
  				ei.curFgColor |= AttrReverse
  			}
  		}
  	case 48:
  		ei.curBgColor = Attribute(color + 1)
  	default:
  		return errCSIParseError
  	}
  
  	return nil
  }
docs: // output256 allows you to leverage the 256-colors terminal mode:
  //   0x01 - 0x08: the 8 colors as in OutputNormal
  //   0x09 - 0x10: Color* | AttrBold
  //   0x11 - 0xe8: 216 different colors
  //   0xe9 - 0x1ff: 24 different shades of grey