十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

gogcli 实战指南:用 `gog slides element group` 在终端组合 Google Slides 元素

gogcli 实战指南:用 `gog slides element group` 在终端组合 Google Slides 元素 gogcli 实战指南用gog slides element group在终端组合 Google Slides 元素【免费下载链接】gogcliGoogle Workspace in your terminal.项目地址: https://gitcode.com/GitHub_Trending/gogcl/gogcli本篇技术指南讲解 gogcliGoogle Workspace in your terminal 命令行工具中gog slides element group子命令的完整用法它用于把同一页幻灯片上的两个或更多原生页面元素形状、线条、文本框等组合成一个可整体移动、缩放与排版的元素组。读完本文你将掌握该命令的参数格式、--group-id的自动生成与校验规则、底层 Slides API 调用原理GroupObjectsRequest、以及如何结合--dry-run、--json等全局安全开关进行可复现的批量编排。命令概览gog slides element group是 gog slides element 家族下的一个子命令其职责是“Group two or more elements”组合两个或更多元素对应的命令入口定义在 internal/cmd/slides_element.go 的SlidesElementGroupCmd结构体中Group SlidesElementGroupCmd cmd: name:group help:Group two or more elements用法gog slides (slide) element group presentationId objectId ... [flags]位置参数类型说明presentationIdstring目标演示文稿的 ID必填objectId ...string两个或更多页面元素的 object ID必填至少 2 个从源码看该命令的结构体声明如下slides_element.gotype SlidesElementGroupCmd struct { PresentationID string arg: name:presentationId help:Presentation ID ObjectIDs []string arg: name:objectId help:Two or more page element object IDs GroupID string name:group-id help:Optional stable group object ID }典型示例把两个元素组合为一个组并显式指定稳定的组 IDgog slides element group 1ABCDEfGhIjKlMnOpQrStUv 2wXyZ3aBcD4eFg5hI6jK7lM --group-id my_chart_group不指定--group-id时gogcli 会自动生成一个组 ID见下文“对象 ID 规则”gog slides element group 1ABCDEfGhIjKlMnOpQrStUv shape_101 shape_102docs/slides-structure.md中给出的组合配套示例含后续解组gog slides element group presentationId objectId objectId... --group-id groupId gog slides element ungroup presentationId groupId...--group-id参数稳定对象 ID 与自动生成规则--group-id是gog slides element group独有的核心参数帮助信息为Optional stable group object ID可选的稳定组对象 ID。自动生成当不传--group-id时源码调用slidesElementObjectID(c.GroupID, gogGroup)slides_element.gofunc slidesElementObjectID(value, prefix string) (string, error) { value strings.TrimSpace(value) if value { return newSlidesStructuralObjectID(prefix), nil } ... }自动生成的 ID 形如gogGroupUnixNano 时间戳例如gogGroup1700000000123456789。其实现位于 internal/cmd/slides_structural.gofunc newSlidesStructuralObjectID(prefix string) string { return fmt.Sprintf(%s%d, prefix, time.Now().UnixNano()) }显式指定时的校验若手动传入--group-id会校验正则^[A-Za-z0-9_][A-Za-z0-9_:-]{4,49}$slides_element.go即长度必须为 550 个字符仅允许字母、数字、下划线_、连字符-、冒号:且首字符不能是-或:。不合法时返回 usage 错误object ID must be 5-50 characters and contain only letters, digits, _, -, or :测试用例TestSlidesElementValidation中的{object ID, ... ObjectID: bad!}验证了这一点slides_element_test.go。建议在需要后续引用该组的场景例如接着用gog slides element ungroup、gog slides element transform对组做整体变换使用稳定的--group-id避免依赖自动生成的随机 ID。输入校验至少两个元素、去重与同页约束Run方法首先调用slidesElementTargets(c.PresentationID, c.ObjectIDs, 2)slides_element.go第三个参数2表示最少需要两个 object ID。该校验函数slides_element.go会执行以下检查presentationId不能为空每个objectId不能为空会被 trim 后校验拒绝重复 ID出现重复时返回duplicate objectId %q数量下限少于 2 个时报错at least 2 objectId value(s) required。测试用例对应slides_element_test.go{group count, SlidesElementGroupCmd{PresentationID: p, ObjectIDs: []string{one}}, at least 2},此外docs/slides-structure.md明确提醒slides-structure.mdz-ordertargets must share one slide and must not be grouped.groupneeds at least two ungrouped elements on one slide; Slides does not permit every element kind to be grouped.即被组合的元素必须位于同一页且本身未被组合过同时 Slides 不允许所有元素类型都能被组合例如某些特殊类型元素无法入组。底层实现GroupObjectsRequest 与批处理提交校验通过后gogcli 构造一个GroupObjectsRequest并放入BatchUpdatePresentationRequest批量请求slides_element.gorequest : slides.Request{GroupObjects: slides.GroupObjectsRequest{ ChildrenObjectIds: objectIDs, GroupObjectId: groupID, }}随后交由runSlidesElementMutation→runSlidesElementBatchMutationslides_element.go执行将请求封装为BatchUpdatePresentationRequest若非破坏性操作先走dryRunExit支持--dry-run通过requireAccount(flags)解析账号调用slidesService(...)获取 Slides API 服务执行svc.Presentations.BatchUpdate(presentationID, body).Context(ctx).Do()提交到 Google Slides API输出结果JSON 模式下输出presentationId、objectIds、groupObjectId文本模式输出Created group groupID。命令的操作元数据用于审计与 dry-run 展示Op: slides.element.group, Action: group elements, Output: map[string]any{presentationId: presentationID, objectIds: objectIDs, groupObjectId: groupID}, Text: fmt.Sprintf(Created group %s, groupID),注意group被归类为非破坏性操作未设置Destructive字段因此不需要--force确认而删除类命令如gog slides element delete才需要确认或--force。测试验证单元测试 TestSlidesElementStructuralRequests 通过 mock 服务器捕获请求验证了组合请求的结构t.Run(group, func(t *testing.T) { request : captureSlidesElementRequest(t, SlidesElementGroupCmd{ PresentationID: pres1, ObjectIDs: []string{shape1, line1}, GroupID: group_123, }, RootFlags{Account: ab.com}) if request.GroupObjects nil || request.GroupObjects.GroupObjectId ! group_123 || len(request.GroupObjects.ChildrenObjectIds) ! 2 { t.Fatalf(unexpected group request: %v, request) } })同时 TestSlidesElementDryRunSkipsService 验证了 dry-run 模式不会真正创建 Slides 服务、不会发起网络请求而是在 stdout 输出op: slides.element.group与groupObjects意图载荷。组合后的后续操作组合完成后返回的groupObjectId可作为新对象 ID 参与其他元素操作整体变换gog slides element transform presentationId groupObjectId --rotate 45对整个组统一旋转/缩放/平移解除组合gog slides element ungroup presentationId groupId...底层使用UngroupObjectsRequestslides_element.go删除gog slides element delete presentationId groupObjectId --force破坏性操作需确认或--force。全局 Flags 一览gog slides element group继承 gogcli 全命令共用的全局 Flags与本命令专属的--group-id并列使用FlagTypeDefaultHelp--access-tokenstringUse provided access token directly (bypasses stored refresh tokens; token expires in ~1h)-a--account--acctstringAccount email, alias, or auto for authenticated Google API commands--clientstringOAuth client name (selects stored credentials token bucket)--colorstringautoColor output: auto|always|never--disable-commandsstringComma-separated list of disabled commands; dot paths allowed-n--dry-run--dryrun--noop--previewboolDo not make changes; print intended actions and exit successfully--enable-commandsstringComma-separated list of enabled command prefixes; dot paths allowed (restricts CLI)--enable-commands-exactstringComma-separated list of exact enabled commands; dot paths allowed and parent commands do not enable children-y--force--assume-yes--yesboolSkip confirmations for destructive commands--gmail-no-sendboolfalseBlock Gmail send operations (agent safety)-h--helpkong.helpFlagShow context-sensitive help.--homestringOverride gogcli config/data/state/cache root (equivalent to GOG_HOME)-j--json--machineboolfalseOutput JSON to stdout (best for scripting)--no-input--non-interactive--noninteractiveboolNever prompt; fail instead (useful for CI)-p--plain--tsvboolfalseOutput stable, parseable text to stdout (TSV; no colors)--quota-projectstringGoogle Cloud project to bill for API usage (sent as X-Goog-User-Project; some APIs require it with --access-token or ADC)--readonlyboolfalseBlock mutating API requests at runtime; auth add also requests read-only OAuth scopes--results-onlyboolIn JSON mode, emit only the primary result (drops envelope fields like nextPageToken)--select--pick--projectstringIn JSON mode, select comma-separated fields (best-effort; supports dot paths). Desire path: use --fields for most commands.-v--verboseboolEnable verbose logging--versionkong.VersionFlagPrint version and exit--wrap-untrustedboolfalseIn JSON/raw output, wrap fetched text fields in external untrusted-content markers常用组合示例安全预演 脚本化输出# 先 dry-run 查看将要提交的 batch update 载荷不会调用 API gog slides element group 1ABCDEfGhIjKlMnOpQrStUv shape_101 shape_102 --dry-run --json # CI 中静默执行输出 JSON 以便提取 groupObjectId gog slides element group 1ABCDEfGhIjKlMnOpQrStUv shape_101 shape_102 \ --group-id revenue_group --json --no-input -a auto # 用 jq 提取返回的组 ID 供后续 transform / ungroup 使用 GID$(gog slides element group ... --json | jq -r .groupObjectId)相关命令与文档父命令gog slides element创建形状/线条、变换、样式、z-order、分组、alt-text、删除逆操作gog slides element ungroup场景指南docs/slides-structure.md元素堆叠、分组、标注与删除的配套用法完整命令索引docs/commands/README.md源码入口internal/cmd/slides_element.go命令定义与实现、internal/cmd/slides_element_test.go请求捕获与校验测试提示本文所描述的命令参考页由gog schema --json自动生成见 docs/commands/gog-slides-element-group.md若需在本地查看最新命令说明可运行make docs-commands重新生成命令文档。【免费下载链接】gogcliGoogle Workspace in your terminal.项目地址: https://gitcode.com/GitHub_Trending/gogcl/gogcli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表