作用范围与回退规则
本页准确说明 Input.Observer 如何为手势选择操作:哪个窗口起作用、哪个组拥有它、全局 组何时接管,以及当多个操作都可以运行时哪个胜出。热键和文本扩展遵循相同的组规则,差异列在最后。
术语
- 作用范围:为手势尝试其操作的应用程序组。一个手势只有一个作用范围,外加可能作为回退的全局组。
- 所属组:窗口所属的唯一应用程序组。请参阅应用程序组。
- 回退到全局:当所属组没有任何内容时,尝试全局组的操作。由两个开关控制,两者都必须打开:
- 常规 页面 手势匹配时 卡片上的 回退到全局:同时作用于所有组(默认打开);
- 每个应用程序组的 在这些窗口中的行为 卡片上的 回退到全局:作用于该组(默认打开)。
起作用的窗口
对于手势,起作用的窗口是 按下绘制按钮那一刻指针下方的顶层窗口:
- 笔划之后去往何处并不重要。从记事本上开始、在浏览器上结束的笔划是记事本的手势。
- 窗口内的控件(文本框、浏览器页面)被视为其整个程序窗口。
- 所属组、配置方案检查和区域单元格全部 在按下时确定一次。绘制过程中窗口标题发生变化,或在手势期间切换配置方案,都不会改变该手势的结果。
决策步骤
按下时
-
找到所属组。 按以下顺序检查各组,并在第一个规则与窗口匹配的组处停止:
- 每个忽略组,按 忽略组 页面上从上到下的顺序;
- 每个应用程序组,按 应用程序组 页面上从上到下的顺序。
以下组会被当作不存在而跳过:未 已启用 的组、没有规则的组,以及设置了 仅当窗口处于全屏状态时 而其窗口此刻并非全屏的忽略组。
-
由忽略组拥有: 按下直接通过。不再检查其他任何内容:不回退到全局,没有手势,该窗口也不会运行任何热键或文本扩展。请参阅忽略组。
-
由应用程序组拥有: 如果 在此处启用手势 已打开且该组在活动配置方案中适用(请参阅配置方案),作用范围就是该组。否则作用范围是全局组,但前提是两个 回退到全局 开关都已打开;否则按下直接通过。
-
没有任何组拥有: 作用范围是全局组。这里 回退到全局 开关无关紧要:全局组就是该窗口自己的组。
-
作为作用范围的全局组 只有在 已启用、其 在此处启用手势 已打开并且在活动配置方案中适用时才生效。否则按下直接通过。
-
检查 排除区域,包括适用于所有窗口的区域和作用范围组的区域。在区域内的按下会交还给窗口。请参阅排除区域。
-
开始捕获。 此时会分别为作用范围组和全局组确定区域单元格(请参阅区域)。
在第 2 到第 6 步中直接通过的按下会原样且毫无延迟地传递,并且不会绘制轨迹。
松开时
-
形状。 笔划会与作用范围组的触发器使用的形状进行评分;如果作用范围组可以回退,还会加上全局组的形状。达到或超过匹配阈值的最高得分胜出;否则没有匹配。请参阅笔划如何匹配。
-
作用范围组的操作。 按列表顺序遍历其操作,并按顺序遍历每个操作的触发器。触发器在以下情况下符合条件:
- 它是针对胜出形状的手势触发器,
- 其操作已打开,
- 其操作在活动配置方案中适用,
- 您按下的修饰键恰好是它要求的那些(请参阅修饰键和时机),
- 它接受您使用的绘制按钮,
- 当该组打开了区域时,它覆盖您按下位置所在的区域单元格。
区域关闭时,第一个符合条件的触发器胜出。区域打开时,符合条件的触发器中 单元格最少 的胜出,单元格数相同时取第一个。
-
当第 9 步中没有任何符合条件的触发器,且以下条件全部成立时,回退到全局:作用范围组本身不是全局组,两个 回退到全局 开关都已打开,并且全局组已启用、在此处启用手势 已打开且在活动配置方案中适用。随后会完全按照第 9 步检查全局组的操作,使用全局组自己的区域单元格。
-
在匹配组的前置和后置操作之内 运行 胜出的操作。请参阅前置和后置操作。
-
没有符合条件的: 不运行任何内容,按下不会交还,如果您设置了 无匹配 全局事件,则会运行它。
胜出规则(按顺序)
| 问题 | 规则 |
|---|---|
| 两个组的规则都与窗口匹配 | 忽略组优先于任何应用程序组;否则取其列表中位置较高的组。一个窗口始终只由一个组拥有。 |
| 所属组没有针对该手势的操作 | 如果允许回退,则使用全局组的操作。绝不会使用位置更低的应用程序组。 |
| 应用程序组的操作和全局操作都符合条件 | 总是应用程序组的操作,无论它们的修饰键、按键或区域如何。 |
| 两个形状的得分都超过阈值 | 得分较高的。 |
| 一个组中两个操作都符合条件(区域关闭) | 在组的操作列表中位置较高的。 |
| 一个组中两个操作都符合条件(区域打开) | 触发器覆盖单元格较少的;数量相同时,取列表中位置较高的。 |
| 一个操作的两个触发器都符合条件 | 区域关闭:第一个触发器。区域打开:覆盖单元格较少的那个;数量相同时取第一个。无论哪种情况运行的都是同一个操作,但会应用所选触发器自己的设置,例如 按住的修饰键。 |
| 同一形状上,一个普通触发器和一个要求 Shift 的触发器 | 只有一个能符合条件:普通触发器要求手势期间完全不按修饰键,另一个则要求 Shift。 |
在 操作 页面上重新排序操作(上移 和 下移),在 应用程序组 页面上重新排序应用程序组。当一个触发器总是遮住另一个时,应用程序组 页面和操作编辑器会发出警告。
回退简表
| 情况 | 无回退 | 有回退(两个开关都打开) |
|---|---|---|
| 没有任何组拥有该窗口 | 全局 | 全局 |
| 所属组关闭了 在此处启用手势 | 按下直接通过 | 全局 |
| 所属组在活动配置方案中不适用 | 按下直接通过 | 全局 |
| 所属组没有针对该笔划的操作 | 无匹配 | 尝试全局组的操作 |
| 由忽略组拥有该窗口 | 按下直接通过 | 按下直接通过 |
| 所属组已关闭(已启用 关闭) | 窗口会与其下方的组进行匹配,就像此组不存在一样 | 相同 |
| 全局组已关闭 | 本应使用全局组的地方什么都没有 | 相同 |
托盘菜单的 全局操作 项就是全局组的 已启用 开关。当焦点窗口所在的组不回退到全局时,托盘图标的工具提示会说明这一点,并列出该组的名称。请参阅托盘图标。
实例
以下示例使用此设置:
| 列表 | 组 | 规则 | 操作 |
|---|---|---|---|
| 忽略组 | 远程桌面 | 程序名称 完全等于 mstsc.exe | 无 |
| 应用程序组,第 1 个 | 浏览器 | 程序名称 完全等于 chrome.exe | “向左滑动”上的“后退”;“向下滑动”上的“关闭标签页” |
| 应用程序组,第 2 个 | 文本文件 | 窗口标题 结尾为 .txt - 记事本 | “向下滑动”上的“保存” |
| 应用程序组,第 3 个 | 记事本 | 程序名称 完全等于 notepad.exe | “向左滑动”上的“撤消” |
| — | 全局 | 无 | “向下滑动”上的“最小化”;“向上滑动”上的“最大化” |
除非示例另有说明,否则两个 回退到全局 开关都已打开。
1. 组中有的形状。 您在 Chrome 上绘制“向下滑动”。浏览器组拥有 Chrome,并且在“向下滑动”上有“关闭标签页”,因此运行“关闭标签页”。全局组在同一形状上的“最小化”根本没有机会:所属组总是胜出。
2. 只有全局组有的形状。 您在 Chrome 上绘制“向上滑动”。浏览器组没有针对“向上滑动”的内容,因此手势回退到全局组并运行“最大化”,其前后包裹的是全局组的前置和后置操作,而不是浏览器组的。
3. 关闭回退。 关闭浏览器组的 回退到全局,然后在 Chrome 上绘制“向上滑动”。全局组的形状不再参与竞争,因此笔划只与“向左滑动”和“向下滑动”进行比较。如果两者都没有达到阈值,就没有匹配,并运行 无匹配 事件。如果其中一个达到了阈值(潦草的笔划可能会这样),就运行它的操作。无论哪种情况,右键单击都不会交还。
4. 两个组都匹配;只有第一个算数。 记事本打开了一个名为 notes.txt 的文件,因此其标题是“notes.txt - 记事本”。文本文件组和记事本组都与之匹配;文本文件组位置较高,因此它拥有该窗口。您绘制“向左滑动”:文本文件组和全局组都不使用该形状,因此它甚至不在被比较的形状之中,于是没有匹配。记事本组中的“撤消”永远不会为此窗口运行,因为窗口永远不会落到位置更低的应用程序组。要在这里使用“撤消”,请将它添加到文本文件组,或者将记事本组移到文本文件组之上。
5. 忽略组。 您在远程桌面窗口上绘制。忽略组拥有它,因此按下会直接传到远程计算机:没有轨迹,也没有全局组。该窗口获得焦点期间,也不会运行任何热键操作或文本扩展。
6. 已关闭的组,以及关闭了手势的组。 关闭文本文件组的 已启用,然后在“notes.txt - 记事本”上绘制“向左滑动”:现在由记事本组拥有该窗口,并运行“撤消”。重新打开文本文件组,但改为关闭其 在此处启用手势:文本文件组再次拥有该窗口,因此永远到不了记事本组;手势转到全局组,而全局组不使用“向左滑动”,所以什么都不运行。
7. 配置方案。 将浏览器组限定于“工作”配置方案,并且不激活任何配置方案。浏览器组仍拥有 Chrome,但不适用,因此 Chrome 上的手势会转到全局组:“向下滑动”运行“最小化”,而不是“关闭标签页”。如果浏览器组的 回退到全局 已关闭,按下则会直接通过,并且页面会警告 在其配置方案之外,其窗口不会得到任何操作。
热键和文本扩展
热键和文本扩展使用相同的忽略组、组顺序、已启用 开关、配置方案、回退到全局 开关、全局组以及前置和后置操作。以下几点不同:
| 手势 | 热键 | 文本扩展 | |
|---|---|---|---|
| 起作用的窗口 | 按下时指针下方的顶层窗口 | 按下按键时获得焦点的窗口 | 键入完文本时获得焦点的窗口 |
| 组的开关 | 在此处启用手势 | 在此处启用热键 | 无(文本扩展 页面有一个适用于全部内容的开关) |
| 区域、绘制按钮 | 是 | 否 | 否 |
| 何时确定组 | 按下时确定一次 | 每次按键时 | 每次扩展时 |