添加自定义链接器

此功能仅适用于社群所有者和群主。

链接器可以轻松地引用第三方问题跟踪工具中的问题或票据,例如 GitHub、Salesforce、Zendesk 等。例如,您可以添加一个链接器,将 #2468 自动转换为指向 https://github.com/zulip/zulip/issues/2468 的链接。

如果该模式出现在话题中,在消息收件人栏的话题右侧添加一个打开()按钮,链接到相应的 URL。

添加自定义链接器

  1. 前往 链接转换器.

  2. 新增链接转换 下,输入一个模式URL 模板

  3. 点击 添加链接器

重新排序链接器

链接器按顺序处理,并且不会应用于已经链接的文本。因此,当多个链接器适用时,您可以选择优先处理哪些链接器。参见重叠模式部分中的示例。

  1. 前往 链接转换器.

  2. 链接器下,点击并拖动垂直点以重新排列链接器列表。

常见的链接器模式

以下示例涵盖了最常见的链接器类型,主要关注问题或票据的链接器。

链接到问题或票据

这是一个将 # 后跟数字转换为链接的模式。它通常用于链接到第三方问题跟踪工具中的问题或票据,例如 GitHub、Salesforce、Zendesk 等。

  • 模式:#(?P<id>[0-9]+)
  • URL 模板:https://github.com/zulip/zulip/issues/{id}
  • 原始文本:#2468
  • 自动链接到:https://github.com/zulip/zulip/issues/2468

链接到多个项目或应用中的问题或票据

要为多个项目中的问题或票据设置链接器,可以考虑扩展 #2468 格式,添加项目特定的变体。例如,Zulip 开发社区使用 #M2468 表示移动应用程序库中的问题,#D2468 表示桌面应用程序库中的问题,等等。

  • 模式:#M(?P<id>[0-9]+)
  • URL 模板:https://github.com/zulip/zulip-mobile/issues/{id}
  • 原始文本:#M2468
  • 自动链接到:https://github.com/zulip/zulip-mobile/issues/2468

链接到多个仓库中的问题或票据

对于通常链接到多个 GitHub 仓库的组织,这个链接器模式将 org/repo#ID 转换为问题或拉取请求的链接。

  • 模式:(?P<org>[a-zA-Z0-9_-]+)/(?P<repo>[a-zA-Z0-9_-]+)#(?P<id>[0-9]+)
  • URL 模板:https://github.com/{org}/{repo}/issues/{id}
  • 原始文本:zulip/zulip#2468
  • 自动链接到:https://github.com/zulip/zulip/issues/2468

链接到十六进制问题或票据编号

以下模式将 7 到 40 个字符长度的十六进制字符串(如 Git 提交 ID)链接化。

  • 模式:(?P<id>[0-9a-f]{7,40})
  • URL 模板:https://github.com/zulip/zulip/commit/{id}
  • 原始文本:abdc123
  • 自动链接到:https://github.com/zulip/zulip/commit/abcd123

高级链接器模式

链接器是一个灵活的系统,可用于构建适用于各种情况的规则。链接器模式是正则表达式,使用 re2 正则表达式引擎。

链接器使用 RFC 6570 兼容的 URL 模板来描述如何生成链接。这些模板支持多种表达式类型。默认表达式类型 ({var}) 将对特殊字符如 /& 进行 URL 编码;这种行为对绝大多数链接器都是需要的。高级 URL 模板表达式类型可以帮助您在角落情况中获得所需的确切行为,例如可选的 URL 查询参数。举例来说:

  • 使用 {+var} 时,URL 分隔符字符不会被 URL 编码。
  • 使用 {?var}{&var} 来表示 URL 查询参数中的变量。
  • 使用 {#var} 生成 URL 中的 # 片段。

URL 模板规范提供了简要示例详细示例,解释了 URL 模板的具体行为。

链接到文档页面

此示例模式是链接到 Zulip 的 ReadTheDocs 站点页面的简写方式。

  • 模式:RTD/(?P<article>[a-zA-Z0-9_/.#-]+)
  • URL 模板:https://zulip.readthedocs.io/en/latest/{+article}
  • 原始文本:RTD/overview/changelog.html
  • 自动链接到:https://zulip.readthedocs.io/en/latest/overview/changelog.html

此模式使用了 {+var} 表达式类型。如果使用默认表达式类型 ({article}),overviewchangelog 之间的 / 会被错误地 URL 编码。

链接到 Google 搜索结果

此示例模式允许链接到 Google 搜索。

  • 模式:google:(?P<q>\w+)?
  • URL 模板:https://google.com/search{?q}
  • 原始文本:google:foogoogle:
  • 自动链接到:https://google.com/search?q=foohttps://google.com/search

此模式使用了 {?var} 表达式类型。如果使用默认表达式类型 ({q}),则无法仅在 URL 中包含 ?(如果可选的 q 存在)。

重叠模式

在此示例中,配置了一个通用链接器,使 GitHub 仓库引用如 zulip-desktop#123 链接到该仓库中该问题的 zulip GitHub 组织中。一个更具体的链接器会覆盖该链接器,以引用不同组织中的特定仓库(如 django/django)。

  • 特定链接器(排列在通用链接器之前)

    • 模式:django#(?P<id>[0-9]+)
    • URL 模板:https://github.com/django/django/pull/{id}
  • 通用链接器

    • 模式:(?P<repo>[a-zA-Z0-9_-]+)#(?P<id>[0-9]+)
    • URL 模板:https://github.com/zulip/{repo}/pull/{id}
  • 示例同时匹配两个链接器;优先应用特定链接器:

    • 原始文本:django#123
    • 自动链接到:https://github.com/django/django/pull/123
  • 仅匹配通用链接器的示例:

    • 原始文本:zulip-desktop#123
    • 自动链接到:https://github.com/zulip/zulip-desktop/pull/123

这一组模式有重叠的正则表达式。注意,通用链接器模式也会匹配 lorem#123。只有在特定链接器排列在更通用模式之前时,特定链接器才会优先应用。您可以通过拖放现有链接器到所需顺序来自定义这一顺序。新的链接器会自动排列在最后。