Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: shift + arrow keys not working to select text #1545

Open
wants to merge 2 commits into
base: develop
Choose a base branch
from

Conversation

if-can
Copy link

@if-can if-can commented Jan 3, 2025

Pull request

Issue tracker

Fixes will automatically close the related issues

Fixes #1521

Feature

Describe features of this pull request

Code of conduct

Code style

Build pass

  • make debug

Manually test

  • Done

Code Review

  1. No wildcards import
  2. Manual build and test pass
  3. GitHub Action CI pass
  4. At least one contributor review and approve
  5. Merged clean without conflicts
  6. PR will be merged by rebase upstream base

Daily build

Login and download artifact at https://github.com/osfans/trime/actions

Additional Info

@youlans
Copy link

youlans commented Jan 5, 2025

反馈一下patch测试情况,供参考:

  1. 直接使用shift组合键,以下场景均可以正常选择文本:
    shift+方向键/home/end
    ctrl+shift+home/end
  2. 单独的shift键保持锁定的情况下,再按下其它按键,部分场景有问题:
    方向键/home/end(正常,按预期选择文本)
    ctrl+home/end(异常,shift锁定无效,光标直接跳到全文开头/结尾,没有选择文本)

@WhiredPlanck
Copy link
Collaborator

反馈一下patch测试情况,供参考:

  1. 直接使用shift组合键,以下场景均可以正常选择文本:
    shift+方向键/home/end
    ctrl+shift+home/end
  2. 单独的shift键保持锁定的情况下,再按下其它按键,部分场景有问题:
    方向键/home/end(正常,按预期选择文本)
    ctrl+home/end(异常,shift锁定无效,光标直接跳到全文开头/结尾,没有选择文本)

@if-can 结合这个问题可能还麻烦你之后测一下调整 onRelease 函数会不会有奇效~

@if-can
Copy link
Author

if-can commented Jan 5, 2025

反馈一下patch测试情况,供参考:

  1. 直接使用shift组合键,以下场景均可以正常选择文本:
    shift+方向键/home/end
    ctrl+shift+home/end
  2. 单独的shift键保持锁定的情况下,再按下其它按键,部分场景有问题:
    方向键/home/end(正常,按预期选择文本)
    ctrl+home/end(异常,shift锁定无效,光标直接跳到全文开头/结尾,没有选择文本)

感谢测试反馈,我尝试复现你所描述的问题,但并未遇见 Shift 锁定下使用 Ctrl + Home/End 键无法选择文本的情况。无论是使用预设的组合键,还是通过“编辑键盘”进行单独按键点击,都能正常工作。

从理论上讲,如果预设的组合键能够正常处理,那么单独按键点击也应该不会出现问题,因为这两者的按键事件都是通过 onAction 发送的。

因此,我推测问题可能出在你的源代码中。

我查看了你的主页,和我想的一样,你有对同文进行 Fork 并增加了自己的特色,因此似乎并没有与上游同步。

(如果你不是直接 Clone 我的仓库进行编译测试,那问题大概就出在你的源码上了)

我并知晓你的本地情况,请提供更多的信息。

例如,预设键的具体配置、复现问题的步骤等。

@youlans
Copy link

youlans commented Jan 5, 2025

反馈一下patch测试情况,供参考:

  1. 直接使用shift组合键,以下场景均可以正常选择文本:
    shift+方向键/home/end
    ctrl+shift+home/end
  2. 单独的shift键保持锁定的情况下,再按下其它按键,部分场景有问题:
    方向键/home/end(正常,按预期选择文本)
    ctrl+home/end(异常,shift锁定无效,光标直接跳到全文开头/结尾,没有选择文本)

感谢测试反馈,我尝试复现你所描述的问题,但并未遇见 Shift 锁定下使用 Ctrl + Home/End 键无法选择文本的情况。无论是使用预设的组合键,还是通过“编辑键盘”进行单独按键点击,都能正常工作。

从理论上讲,如果预设的组合键能够正常处理,那么单独按键点击也应该不会出现问题,因为这两者的按键事件都是通过 onAction 发送的。

因此,我推测问题可能出在你的源代码中。

我查看了你的主页,和我想的一样,你有对同文进行 Fork 并增加了自己的特色,因此似乎并没有与上游同步。

(如果你不是直接 Clone 我的仓库进行编译测试,那问题大概就出在你的源码上了)

我并知晓你的本地情况,请提供更多的信息。

例如,预设键的具体配置、复现问题的步骤等。

我编译是使用的1.4号的官方develop分支代码,再手工加上patch修订,没有改其它地方。
以下是我使用的编辑键盘相关配置,其中的Shift1键按下后,ctrlhome和ctrlend无法按预期选择文本。其它几个键都没问题。
我也试了直接绑定Control+Shift+Home的情况下,不论Shift1是否处于锁定状态,都会选择文本。

edit:
keys:
- {click: Up, key_back_color: xdbdb}
- {click: Left, key_back_color: xdbdb}
- {click: Shift1, key_back_color: xdbdb}
- {click: Right, key_back_color: xdbdb}
- {click: CtrlHome, key_back_color: xdbdb}
- {click: Down, key_back_color: xdbdb}
- {click: CtrlEnd, key_back_color: xdbdb}
- {click: BackSpace, swipe_up: DelH, key_back_color: xdgnb}
- {click: Home, key_back_color: xdbdb}
- {click: End, key_back_color: xdbdb}

Shift1: {functional: false, label: ☩, preview: ☩, send: Shift_L, shift_lock: click}
Home: {label: Home, send: Home, functional: false}
DelH: {label: "Del↔", functional: false, text: "{Shift+Home}{BackSpace}"} #删除行
CtrlEnd: {label: "结尾", functional: false, send: Control+End}
CtrlHome: {label: "开头", functional: false, send: Control+Home}
End: {label: End, send: End, functional: false}
Left: {label: ←, send: Left, repeatable: true, functional: false}
Down: {label: ↓, send: Down, repeatable: true, functional: false}
Up: {label: ↑, send: Up, repeatable: true, functional: false}
Right: {label: →, send: Right, repeatable: true, functional: false}

@if-can if-can force-pushed the develop branch 3 times, most recently from 340c002 to 7c75077 Compare January 6, 2025 06:28
@if-can if-can closed this Jan 6, 2025
@if-can if-can reopened this Jan 6, 2025
@if-can
Copy link
Author

if-can commented Jan 6, 2025

反馈一下patch测试情况,供参考:

  1. 直接使用shift组合键,以下场景均可以正常选择文本:
    shift+方向键/home/end
    ctrl+shift+home/end
  2. 单独的shift键保持锁定的情况下,再按下其它按键,部分场景有问题:
    方向键/home/end(正常,按预期选择文本)
    ctrl+home/end(异常,shift锁定无效,光标直接跳到全文开头/结尾,没有选择文本)

感谢测试反馈,我尝试复现你所描述的问题,但并未遇见 Shift 锁定下使用 Ctrl + Home/End 键无法选择文本的情况。无论是使用预设的组合键,还是通过“编辑键盘”进行单独按键点击,都能正常工作。
从理论上讲,如果预设的组合键能够正常处理,那么单独按键点击也应该不会出现问题,因为这两者的按键事件都是通过 onAction 发送的。
因此,我推测问题可能出在你的源代码中。
我查看了你的主页,和我想的一样,你有对同文进行 Fork 并增加了自己的特色,因此似乎并没有与上游同步。
(如果你不是直接 Clone 我的仓库进行编译测试,那问题大概就出在你的源码上了)
我并知晓你的本地情况,请提供更多的信息。
例如,预设键的具体配置、复现问题的步骤等。

我编译是使用的1.4号的官方develop分支代码,再手工加上patch修订,没有改其它地方。 以下是我使用的编辑键盘相关配置,其中的Shift1键按下后,ctrlhome和ctrlend无法按预期选择文本。其它几个键都没问题。 我也试了直接绑定Control+Shift+Home的情况下,不论Shift1是否处于锁定状态,都会选择文本。

edit: keys: - {click: Up, key_back_color: xdbdb} - {click: Left, key_back_color: xdbdb} - {click: Shift1, key_back_color: xdbdb} - {click: Right, key_back_color: xdbdb} - {click: CtrlHome, key_back_color: xdbdb} - {click: Down, key_back_color: xdbdb} - {click: CtrlEnd, key_back_color: xdbdb} - {click: BackSpace, swipe_up: DelH, key_back_color: xdgnb} - {click: Home, key_back_color: xdbdb} - {click: End, key_back_color: xdbdb}

Shift1: {functional: false, label: ☩, preview: ☩, send: Shift_L, shift_lock: click} Home: {label: Home, send: Home, functional: false} DelH: {label: "Del↔", functional: false, text: "{Shift+Home}{BackSpace}"} #删除行 CtrlEnd: {label: "结尾", functional: false, send: Control+End} CtrlHome: {label: "开头", functional: false, send: Control+Home} End: {label: End, send: End, functional: false} Left: {label: ←, send: Left, repeatable: true, functional: false} Down: {label: ↓, send: Down, repeatable: true, functional: false} Up: {label: ↑, send: Up, repeatable: true, functional: false} Right: {label: →, send: Right, repeatable: true, functional: false}

题外话:没做好备份,本地仓库被我弄坏了……回滚了但没用,就只好重新拉取最新分支来重新提交了,因此多了几条强制推送的记录。


该问题源于历史遗留的设计缺陷,具体原因在于组合键的修饰状态没有与当前键盘的修饰状态进行合并。

在发送单个按键时,会使用当前键盘的修饰标志状态。

但在发送组合键时,仅会应用该组合键本身的修饰标志状态。

这种设计确保了组合键能够正常生效,但没有考虑到当前键盘的修饰标志状态。

因此,即使键盘视图显示 Shift 键已被按下并锁定,但在发送组合键时,仍然不会拥有 Shift 修饰状态,除非该组合键本身已经包含 Shift 键。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

部分shift组合键不生效
3 participants