Text input
此协议允许合成器充当输入法并向应用程序发送文本。文本输入对象用于管理应用程序中通常是文本输入字段的状态。
本文档在使用"必须"、"应当"、"可以"等词语时遵循 RFC 2119。
警告!此文件中描述的协议是实验性的,可能会进行向后不兼容的更改。向后兼容的更改可以与相应的接口版本号一起添加。向后不兼容的更改通过提升协议和接口名称中的版本号并重置接口版本来完成。一旦协议被宣布为稳定,协议和接口名称中的 'z' 前缀和版本号将被移除,接口版本号将被重置。
zwp_text_input_v3 接口表示与 seat 关联的文本输入和输入法。它提供 enter/leave 事件以跟踪 seat 的文本输入焦点。
请求用于启用/禁用文本输入对象和设置状态信息,如周围文本和选定文本或内容类型。有关输入文本的信息通过 preedit_string 和 commit_string 事件发送到文本输入对象。
文本是有效的 UTF-8 编码,索引和长度以字节为单位。索引不得指向代码点内的中间字节:它们必须指向代码点的第一个字节或缓冲区的末尾。长度必须在两个有效索引之间测量。
焦点在表面之间移动将导致发出 zwp_text_input_v3.enter 和 zwp_text_input_v3.leave 事件。聚焦的表面必须在键盘焦点在 UI 的可编辑和不可编辑元素之间移动时提交 zwp_text_input_v3.enable 和 zwp_text_input_v3.disable 请求。这两个请求不需要配对,合成器必须能够处理连续的相同请求序列。
状态由状态请求(set_surrounding_text、set_content_type 和 set_cursor_rectangle)和 commit 请求发送。在 enter 事件或 disable 请求之后,所有状态信息都失效,需要由客户端重新发送。
destroy()
销毁 wp_text_input 对象。同时禁用通过此 wp_text_input 对象启用的所有表面。
enable()
在先前从 enter 事件获得的表面上请求文本输入。
每次聚焦的文本输入更改为新的时(包括在当前表面内),都必须发出此请求。当当前表面上不再有任何输入焦点时使用 zwp_text_input_v3.disable。
客户端不得在单个 seat 上启用多个文本输入,并应在启用新文本输入之前禁用当前文本输入。在同一 seat 上已启用另一个文本输入时启用文本输入的请求必须被合成器忽略。
此请求重置与先前 enable、disable、set_surrounding_text、set_text_change_cause、set_content_type 和 set_cursor_rectangle 请求相关的所有状态,以及与 preedit_string、commit_string 和 delete_surrounding_text 事件相关的状态。
如果文本输入支持必要的功能,set_surrounding_text、set_content_type 和 set_cursor_rectangle 请求必须跟在此请求之后。
此请求设置的状态是双缓冲的。它将在下一个 zwp_text_input_v3.commit 请求时应用,并保持有效直到下一个提交的 enable 或 disable 请求。
更改必须由合成器在发出 zwp_text_input_v3.commit 请求后应用。
disable()
显式禁用当前表面上的文本输入(通常当表面上没有任何文本输入框获得焦点时)。
此请求设置的状态是双缓冲的。它将在下一个 zwp_text_input_v3.commit 请求时应用。
设置输入周围的纯文本,不包括预编辑文本。
客户端应通知合成器此请求携带的任何值的任何更改,包括处理传入文本输入事件引起的更改以及其他机制(如键盘输入)引起的更改。
如果客户端不知道光标周围的文本,则不应发出此请求,以向合成器表示缺乏支持。
文本是 UTF-8 编码的,应包括光标位置、完整的选择以及它们前后的额外字符。Wayland 消息有最大长度限制,因此文本不能超过 4000 字节。
光标是文本缓冲区中光标的字节偏移量。
锚点是文本缓冲区中选择锚点的字节偏移量。如果没有选定的文本,锚点与光标相同。
如果存在任何预编辑文本,为了此事件的目的,它将被光标替换。
此请求设置的值是双缓冲的。它们将在下一个 zwp_text_input_v3.commit 请求时应用,并保持有效直到下一个提交的 enable 或 disable 请求。
受影响字段的初始状态为空,表示文本输入不支持发送周围文本。如果应用了空值,后续更改尝试可能无效。
set_text_change_cause(cause: uint<zwp_text_input_v3.change_cause>)
参数 | 类型 | 描述 |
|---|---|---|
| cause | uint<zwp_text_input_v3.change_cause> |
告知合成器光标周围的文本更改的原因。
每当客户端检测到文本、光标或锚点位置的外部更改时,必须向合成器发出此请求。此请求旨在让输入法有机会以适当的方式更新预编辑文本,例如在用户开始用键盘输入时将其移除。
cause 描述更改的来源。
此请求设置的值是双缓冲的。它必须在下一个 zwp_text_input_v3.commit 请求时应用并重置为初始值。
cause 的初始值是 input_method。
set_content_type(hint: uint<zwp_text_input_v3.content_hint>, purpose: uint<zwp_text_input_v3.content_purpose>)
设置内容用途和内容提示。用途是输入字段的基本用途,提示标志允许修改某些行为。
此请求设置的值是双缓冲的。它们将在下一个 zwp_text_input_v3.commit 请求时应用。后续更新尝试可能无效。这些值保持有效直到下一个提交的 enable 或 disable 请求。
hint 的初始值是 none,purpose 的初始值是 normal。
将光标周围的区域标记为表面局部坐标中的 x、y、width、height 矩形。
允许合成器将带有单词建议的窗口放在光标附近,而不会遮挡正在输入的文本。
如果客户端不知道编辑文本的位置,则不应发出此请求,以向合成器表示缺乏支持。
此请求设置的值是双缓冲的。它们将在下一个 zwp_text_input_v3.commit 请求时应用,并保持有效直到下一个提交的 enable 或 disable 请求。
描述光标矩形的初始值为空。这意味着文本输入不支持描述光标区域。如果应用了空值,后续更改尝试可能无效。
commit()
原子地应用最近发送到合成器的状态更改。
commit 请求建立和更新客户端的状态,必须在任何更改后发出以应用它们。
文本输入状态(启用状态、内容用途、内容提示、周围文本和更改原因、光标矩形)在文本输入的上下文中是概念上双缓冲的,即在提交的 enable 请求和后续提交的 enable 或 disable 请求之间。
协议请求修改待处理状态,而不是输入法使用的当前状态。commit 请求原子地应用所有待处理状态,替换当前状态。提交后,新的待处理状态如每个相关请求所记录。
请求按到达顺序应用。
除非另有说明,否则当前和待处理状态均不会被修改。
合成器必须计算来自每个 zwp_text_input_v3 对象的 commit 请求数量,并将该计数用作 done 事件中的序列号。
enter(surface: object<wl_surface>)
参数 | 类型 | 描述 |
|---|---|---|
| surface | object<wl_surface> |
通知此 seat 的文本输入焦点在某个表面上。
如果客户端创建了多个文本输入对象,合成器必须将此事件发送给所有对象。
当 seat 具有键盘功能时,文本输入焦点跟随键盘焦点。此事件为文本输入对象设置当前表面。
leave(surface: object<wl_surface>)
参数 | 类型 | 描述 |
|---|---|---|
| surface | object<wl_surface> |
通知此 seat 的文本输入焦点不再在某个表面上。客户端应重置先前设置的任何预编辑字符串。
leave 通知清除当前表面。它在新焦点的 enter 通知之前发送。leave 事件后,合成器必须忽略来自任何文本输入实例的请求,直到下一个 enter 事件。
当 seat 具有键盘功能时,文本输入焦点跟随键盘焦点。
preedit_string(text: string, cursor_begin: int, cursor_end: int)
参数 | 类型 | 描述 |
|---|---|---|
| text | string允许为空 | |
| cursor_begin | int | |
| cursor_end | int |
通知何时应在当前光标位置设置新的组合文本(预编辑)。必须移除先前设置的任何组合文本。必须移除任何先前存在的选定文本。
参数 text 包含预编辑字符串缓冲区。
参数 cursor_begin 和 cursor_end 以字节为单位相对于提交的文本缓冲区的开头计数。当两者都等于 -1 时应隐藏光标。
客户端可以将它们表示为一行(如果两个值相同),否则表示为文本高亮。
此事件设置的值是双缓冲的。它们必须在下一个 zwp_text_input_v3.done 事件时应用并重置为初始值。
text 的初始值是空字符串,cursor_begin、cursor_end 和 cursor_hidden 都是 0。
commit_string(text: string)
参数 | 类型 | 描述 |
|---|---|---|
| text | string允许为空 |
通知何时应将文本插入编辑器小部件。要提交的文本可以是按键后的单个字符,也可以是某些组合(预编辑)的结果。
此事件设置的值是双缓冲的。它们必须在下一个 zwp_text_input_v3.done 事件时应用并重置为初始值。
text 的初始值是空字符串。
delete_surrounding_text(before_length: uint, after_length: uint)
参数 | 类型 | 描述 |
|---|---|---|
| before_length | uint | length of text before current cursor position |
| after_length | uint | length of text after current cursor position |
通知何时应删除当前光标位置周围的文本。
before_length 和 after_length 是当前光标索引前后要删除的字节数(不包括选择)。
如果存在预编辑文本,实际上 before_length 从其开头计数,after_length 从其结尾计数(参见 done 事件序列)。
此事件设置的值是双缓冲的。它们必须在下一个 zwp_text_input_v3.done 事件时应用并重置为初始值。
before_length 和 after_length 的初始值都是 0。
done(serial: uint)
参数 | 类型 | 描述 |
|---|---|---|
| serial | uint |
指示应用程序应用 preedit_string、commit_string 和 delete_surrounding_text 事件请求的状态更改。与这些事件相关的状态是双缓冲的,每个都修改待处理状态。此事件用待处理状态替换当前状态。
应用程序必须按以下顺序评估更改:
1. 用光标替换现有预编辑字符串。 2. 删除请求的周围文本。 3. 在光标位于其末尾处插入 commit 字符串。 4. 计算要发送的周围文本。 5. 在光标位置插入新的预编辑文本。 6. 将光标放在预编辑文本内。
序列号反映合成器已知的 zwp_text_input_v3 对象的最后状态。serial 参数的值必须等于该对象上已发出的 commit 请求数量。
当客户端收到序列号与过去的 commit 请求数量不同的 done 事件时,必须照常继续评估和应用更改,只是不应更改 zwp_text_input_v3 对象的当前状态。在收到匹配序列的 zwp_text_input_v3.done 事件后,应发送并提交 zwp_text_input_v3 对象上的所有待处理状态请求(set_surrounding_text、set_content_type 和 set_cursor_rectangle)。
change_cause { input_method, other }
参数 | 值 | 描述 |
|---|---|---|
| input_method | 0 | 输入法引起的更改 |
| other | 1 | 输入法以外的原因引起的更改 |
周围文本或光标位置更改的原因。
content_hint { none, completion, spellcheck, auto_capitalization, lowercase, uppercase, titlecase, hidden_text, sensitive_data, latin, multiline }
参数 | 值 | 描述 |
|---|---|---|
| none | 0x0 | 无特殊行为 |
| completion | 0x1 | 建议单词补全 |
| spellcheck | 0x2 | 建议单词更正 |
| auto_capitalization | 0x4 | 在句子开头切换到大写字母 |
| lowercase | 0x8 | 首选小写字母 |
| uppercase | 0x10 | 首选大写字母 |
| titlecase | 0x20 | 首选标题和标题的大小写(可能取决于语言) |
| sensitive_data | 0x80 | 输入的文本不应被存储 |
| latin | 0x100 | 只应输入拉丁字符 |
| multiline | 0x200 | 文本输入是多行的 |
内容提示是一个位掩码,允许修改文本输入的行为。
content_purpose { normal, alpha, digits, number, phone, url, email, name, password, pin, date, time, datetime, terminal }
参数 | 值 | 描述 |
|---|---|---|
| normal | 0 | 默认输入,允许所有字符 |
| alpha | 1 | 只允许字母字符 |
| digits | 2 | 只允许数字 |
| number | 3 | 输入数字(包括小数分隔符和符号) |
| phone | 4 | 输入电话号码 |
| url | 5 | 输入 URL |
| 6 | 输入电子邮件地址 | |
| name | 7 | 输入人名 |
| password | 8 | 输入密码(与 sensitive_data 提示组合使用) |
| pin | 9 | 输入是数字密码(与 sensitive_data 提示组合使用) |
| date | 10 | 输入日期 |
| time | 11 | 输入时间 |
| datetime | 12 | 输入日期和时间 |
| terminal | 13 | 用于终端的输入 |
内容用途允许指定文本输入的主要用途。
这允许输入法显示带有额外字符的特殊用途输入面板,或禁止某些字符。
文本输入对象的工厂。此对象是全局单例。
destroy()
销毁 wp_text_input_manager 对象。
get_text_input(id: new_id<zwp_text_input_v3>, seat: object<wl_seat>)
参数 | 类型 | 描述 |
|---|---|---|
| id | new_id<zwp_text_input_v3> | |
| seat | object<wl_seat> |
为给定的 seat 创建新的文本输入对象。
合成器支持
Cage | COSMIC | GameScope | Hyprland | Jay | KWin | Labwc | Louvre | Mir | Muffin | Mutter | niri | phoc | river | Sway | Treeland | Wayfire | Weston | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| zwp_text_input_manager_v3 | x | 1 | x | 1 | 1 | 1 | 1 | x | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | x | x |
Copyright
Copyright © 2012, 2013 Intel Corporation Copyright © 2015, 2016 Jan Arne Petersen Copyright © 2017, 2018 Red Hat, Inc. Copyright © 2018 Purism SPC
Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of the copyright holders not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. The copyright holders make no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty.
THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.