
gogcli 实战用gog slides element ungroup在终端中取消分组 Google Slides 元素【免费下载链接】gogcliGoogle Workspace in your terminal.项目地址: https://gitcode.com/GitHub_Trending/gogcl/gogcligog slides element ungroup是 gogcliGoogle Workspace in your terminal中用于取消幻灯片元素分组Ungroup的原子命令传入演示文稿 ID 与一个或多个顶层组对象 ID即可通过 Google Slides API 的批量更新请求将元素组拆回独立元素。本文以该命令为线索讲解其完整用法、全部全局参数、源码级实现原理参数校验、dry-run 机制、BatchUpdate 调用链与测试验证帮助你直接在终端脚本化地重组幻灯片结构。命令概览与定位gog slides element ungroup属于gog slides element命令族该命令族用于「Create and manipulate native page elements」创建与操作原生页面元素。在 gogcli 中element ungroup与 group、z-order、alt-text、delete 等命令共同构成对页面元素的增删改查能力。命令用途一句话概括取消一个或多个元素组element groups的分组。原始命令文档给出的用法为gog slides (slide) element ungroup presentationId groupId ...其中括号中的(slide)表示可选的上文命令树中的中间节点实际执行时可直接使用gog slides element ungroup presentationId groupId ...它的父命令是 gog slides element再往上是 gog slides 与 gog命令索引见 Command index。参数详解ungroup子命令自身仅接收两个位置参数均为必填位置参数类型说明presentationIdstring演示文稿PresentationIDgroupId...string...一个或多个顶层组对象 IDtop-level group object IDs可传多个实现一次取消多个分组从源码看命令结构体定义如下internal/cmd/slides_element.go#L336-L339type SlidesElementUngroupCmd struct { PresentationID string arg: name:presentationId help:Presentation ID GroupIDs []string arg: name:groupId help:One or more top-level group object IDs } func (c *SlidesElementUngroupCmd) Run(ctx context.Context, flags *RootFlags) error { presentationID, groupIDs, err : slidesElementTargets(c.PresentationID, c.GroupIDs, 1) if err ! nil { return err } request : slides.Request{UngroupObjects: slides.UngroupObjectsRequest{ObjectIds: groupIDs}} return runSlidesElementMutation(ctx, flags, slidesElementMutation{ Op: slides.element.ungroup, Action: ungroup elements, PresentationID: presentationID, Request: request, Payload: map[string]any{group_object_ids: groupIDs}, Output: map[string]any{presentationId: presentationID, groupObjectIds: groupIDs, ungrouped: true}, Text: fmt.Sprintf(Ungrouped %d group(s), len(groupIDs)), }) }值得注意的实现细节位置参数会被去重与净化slidesElementTargetsinternal/cmd/slides_element.go#L634-L656会先strings.TrimSpace每个参数拒绝空 ID并拒绝重复 IDduplicate objectId同时强制至少 1 个目标at least 1 objectId value(s) required。因此gog slides element ungroup id id这种重复传参会直接报错而不是发起无效请求。请求类型为UngroupObjectsRequest源码将其包装为单个slides.Request{UngroupObjects: ...}对应 Google Slides API 的ungroupObjects批量更新请求所有groupIds会被放进同一个ObjectIds数组作为一次原子 batch update 提交。默认文本输出成功后会输出Ungrouped N group(s)N 为去重后的组数量。groupId 从哪来ungroup针对的「组」通常由兄弟命令 gog slides element group 创建。该命令把两个或更多未分组元素合成一组并可通过--group-id groupId指定稳定的组 ID未指定时 gogcli 会以gogGroup前缀自动生成见 slides_element.go#L317。此外也可以从gog slides element get/ 结构化导出如 docs/slides-structure.md 中介绍的slides info --json思路中读取元素树来获得既有组的对象 ID。分组与取消分组通常成对出现在结构化操作中官方指南 docs/slides-structure.md#L104-L112 给出的组合示例为gog slides element z-order presentationId objectId... --operation BRING_TO_FRONT gog slides element group presentationId objectId objectId... --group-id groupId gog slides element ungroup presentationId groupId... gog slides element alt-text presentationId objectId \ --title Chart --description Quarterly revenue by region gog slides element delete presentationId objectId --force全局 Flags 完整说明ungroup自身没有专属 flag但它继承 gogcli 的全部全局 flag。以下为命令文档中提供的完整表格行为与 gogcli 所有命令一致Flag类型默认值说明--access-tokenstring直接使用提供的访问令牌绕过已存储的 refresh token令牌约 1 小时后过期-a--account--acctstring账户邮箱、别名或 auto用于已认证的 Google API 命令--clientstringOAuth 客户端名称选择已存储的凭据 token bucket--colorstringauto颜色输出auto|always|never--disable-commandsstring逗号分隔的禁用命令列表支持点路径-n--dry-run--dryrun--noop--previewbool不真正修改仅打印预期动作并以成功退出--enable-commandsstring逗号分隔的启用命令前缀列表点路径限制 CLI 可用范围--enable-commands-exactstring逗号分隔的精确启用命令列表点路径且父命令不会启用子命令-y--force--assume-yes--yesbool跳过破坏性命令的确认--gmail-no-sendboolfalse阻止 Gmail 发送操作Agent 安全-h--helpkong.helpFlag显示上下文相关帮助--homestring覆盖 gogcli 的 config/data/state/cache 根目录等价于GOG_HOME-j--json--machineboolfalse输出 JSON 到 stdout最适合脚本化--no-input--non-interactive--noninteractivebool永不提示失败即报错适合 CI-p--plain--tsvboolfalse输出稳定可解析的纯文本到 stdoutTSV无颜色--quota-projectstring用于计费的 Google Cloud 项目发送为X-Goog-User-Project部分 API 在使用--access-token或 ADC 时需要它--readonlyboolfalse在运行时阻止变更类 API 请求auth add时也仅申请只读 OAuth 范围--results-onlyboolJSON 模式下仅输出主要结果去掉 nextPageToken 等信封字段--select--pick--projectstringJSON 模式下选择逗号分隔字段尽力而为支持点路径推荐使用各命令的--fields-v--verbosebool启用详细日志--versionkong.VersionFlag打印版本并退出--wrap-untrustedboolfalseJSON/raw 输出时将拉取的文本字段包裹进外部不可信内容标记与本命令最相关的几个 flag-n, --dry-run别名--dryrun/--noop/--preview由于ungroup是变更类mutating命令建议先 dry-run 验证参数与请求体。源码中dryRunExitinternal/cmd/dryrun.go#L14-L53会在真正触达认证与 API 之前打印op与request并成功退出JSON 模式下输出{dry_run: true, op: ..., request: ...}纯文本模式下输出dry_run\ttrue与request_json。-j, --json输出结构化结果{presentationId: ..., groupObjectIds: [...], ungrouped: true}便于脚本继续处理。-p, --plain/--tsv输出稳定可解析的 TSV 文本适合日志与管道。--no-input在 CI 中禁止交互提示。--readonly开启后所有变更类请求会在运行时被阻止可作为只读审计环境的兜底。源码实现原理从参数到 API 的完整调用链ungroup的执行路径可以概括为「校验 → dry-run/确认 → 构造请求 → BatchUpdate → 输出」核心位于 internal/cmd/slides_element.go#L341-L356 与runSlidesElementMutationslides_element.go#L442-L480。参数净化与校验slidesElementTargets(presentationID, groupIDs, 1)确保presentationId非空、每个groupId非空且无重复并要求至少 1 个组 ID。构造 Slides 请求slides.Request{UngroupObjects: slides.UngroupObjectsRequest{ObjectIds: groupIDs}}随后打包为slides.BatchUpdatePresentationRequest{Requests: []*slides.Request{...}}。dry-run 短路若指定--dry-run则在触碰 keyring、OAuth 与 Google API 之前打印预期请求并退出退出码 0。账户解析与真实调用requireAccount(flags)解析账户slidesService(ctx, account)构建 Slides 服务最后执行svc.Presentations.BatchUpdate(mutation.PresentationID, body).Context(ctx).Do()输出JSON 模式写出Output字段否则打印人类可读文本Ungrouped N group(s)。值得注意的是ungroup与group/z-order一样不是破坏性命令Destructive字段为空因此不需要--force确认而delete是破坏性的必须确认或--force。这意味着在非交互环境如 CI 脚本中直接运行ungroup是安全的但仍建议先用--dry-run --json检查请求内容。实战示例以下示例均假设已完成 gogcli 认证参见 docs/quickstart.md 与 docs/install.md。1. 先预览推荐不产生任何修改gog slides element ungroup presentationId groupId --dry-run --json输出示例结构示意request内为完整 batch update 体{ dry_run: true, op: slides.element.ungroup, request: { presentation_id: ..., batch_update: { requests: [ { ungroupObjects: { objectIds: [groupId] } } ] } } }2. 取消单个分组gog slides element ungroup presentationId groupId成功后输出Ungrouped 1 group(s)。3. 一次取消多个分组同一演示文稿gog slides element ungroup presentationId groupId1 groupId2 groupId3多个groupId会合并进同一个ungroupObjects.objectIds数组作为一次原子批量更新提交。4. 脚本化 JSON 输出gog slides element ungroup presentationId groupId --json输出{ presentationId: presentationId, groupObjectIds: [groupId], ungrouped: true }5. 纯文本/TSV 输出配合日志或管道gog slides element ungroup presentationId groupId --plain测试验证请求结构有据可查仓库为ungroup提供了单元测试位于 internal/cmd/slides_element_test.go#L182-L190t.Run(ungroup, func(t *testing.T) { request : captureSlidesElementRequest(t, SlidesElementUngroupCmd{ PresentationID: pres1, GroupIDs: []string{group_123}, }, RootFlags{Account: ab.com}) if request.UngroupObjects nil || len(request.UngroupObjects.ObjectIds) ! 1 { t.Fatalf(unexpected ungroup request: %v, request) } })该测试通过captureSlidesElementRequest捕获生成的slides.Request断言UngroupObjects非空且ObjectIds长度与传入的GroupIDs一致。同一测试文件还覆盖了group断言GroupObjectId与ChildrenObjectIds、z-order、delete等结构型请求说明整个 element 命令族的请求构造都经过测试校验。注意事项与限制目标必须是顶层组对象 IDungroup的 help 明确限定为「top-level group object IDs」。从 Slides API 语义出发仅顶层组可被 ungroup嵌套组的拆分需逐层进行。只接受同一演示文稿中的对象所有groupId必须属于同一个presentationId命令按演示文稿维度执行一次 batch update。重复与空 ID 会被拒绝重复的groupId会在请求提交前被slidesElementTargets拦截错误信息为duplicate objectId。组合使用建议先用gog slides element group ... --group-id stable-id建立确定性的组 ID参见 docs/slides-structure.md 中的组合示例再在脚本中用该稳定 ID 执行ungroup避免依赖 Google 随机生成的 ID。该命令为变更操作虽然不要求确认但每次调用都会真正修改演示文稿在自动化流水线中请先以--dry-run --json预览必要时配合--readonly提供只读保护。进一步阅读父命令gog slides elementdocs/commands/gog-slides-element.md——包含 create-shape、create-line、style、transform、z-order、delete 等全部元素操作分组创建gog slides element groupdocs/commands/gog-slides-element-group.md幻灯片结构操作指南docs/slides-structure.md命令索引docs/commands/README.md核心实现internal/cmd/slides_element.go测试internal/cmd/slides_element_test.go全局认证与安装docs/quickstart.md、docs/install.md【免费下载链接】gogcliGoogle Workspace in your terminal.项目地址: https://gitcode.com/GitHub_Trending/gogcl/gogcli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考