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

设计:区分键盘按键的状态 #674

Open
iovxw opened this issue Jan 13, 2022 · 6 comments
Open

设计:区分键盘按键的状态 #674

iovxw opened this issue Jan 13, 2022 · 6 comments

Comments

@iovxw
Copy link
Contributor

iovxw commented Jan 13, 2022

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

目前 trime 键盘上的按键,对于用户的操作,有下面这些配置项

  when:
    ascii: 西文標籤
    paging: 翻頁標籤
    has_menu: 選單標籤
    composing: 輸入狀態標籤
    #always: 始終
    #hover: 滑過
    combo: 並擊
    click: 單按
    long_click: 長按
    #double_click: 雙按
    swipe_left: 左滑
    swipe_right: 右滑
    swipe_up: 上滑
    swipe_down: 下滑

除去现在没实现的几个,这些配置项实际可以分成两类

click combo long_click swipe_* 都很好理解,就是配置在用户进行相应动作时要触发的 preset_keys 中的键

ascii paging has_menu composing 这几个,是配置的键盘在不同状态下,把 click 替换掉的建

所以它们本质是 ascii_click paging_click ...

如果用户想单独配置在翻页时或者英文状态下某个按键的上滑操作,是做不到的

Describe the solution you'd like
A clear and concise description of what you want to happen.

将按键的状态与操作拆开

在不同的状态下,click combo long_click swipe_* 触发不同的键

比如在英文模式中 Shift 按下是大写单个字母,上滑是大写锁定,但在中文输入过程中,Shift 按下是分词,上划无作用

这个功能可以在保留兼容性的前提下实现

比如现在 tongwenfeng 里的一个配置是

- {click: Shift_L, composing: delimiter}

其中 Shift_Ldelimiter 都是在 preset_keys 中定义的键

需要做的修改,就是允许 composing 不止接受 preset_keys 中定义的键,还接受一个完整的 preset_keyboardskeys 里这样的包括动作的键

就是允许套娃

修改后上面的配置的等价写法是这样的(当然保留旧的写法):

- {click: Shift_L, composing: {click: delimiter}}

扩展一下大概这种样子:

- {click: Shift_L, ascii: {click: ..., swipe_up: ...}, composing: {click: delimiter, swip_up: ..., long_click: ...}}

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

另一种保留兼容性的写法是新加一个 when 字段,接受一个数组

- {click: Shift_L, when: [{state: ascii, click: ..., swipe_up: ...}, {state: composing, click: ..., swipe_up: ...}]}

Additional context
Add any other context or screenshots about the feature request here.

可以新加几个状态,比如 shifted, alted, 来解决 #578 中的问题

@iovxw
Copy link
Contributor Author

iovxw commented Jan 13, 2022

未解决的问题:

如果多个状态同时发生,应该使用哪一个状态的配置?

比如我们加上了 shifted 和 alted 来表示 shift 或 alt 已经被按下的状态, 但这俩键同时被按下会怎么样?

是否应该提供一个权重字段?

如果一个状态中有动作没有定义,是否应该继承上一个或者默认状态的动作?

比如

- {click: Shift_L, long_click: X, composing: {click: delimiter}}

其中在 composing 的时候,long_click 是没有指定的,这时长按是否应该也输出 X

如果默认也输出 X,但用户不想它输出 X,应该如何禁用?

加一个 NoOperation

@ameaninglessname
Copy link

为啥不把每种"组合键"(按键状态)映射为一个"操作"

KeyA 上滑 = Action1
Alt + KeyA 上滑 = Action2
Ctrl + KeyA 上滑 = Action3
Ctrl + Alt + KeyA 上滑 = Action3

按键支持重定向和虚拟按键

比如KeyA上滑 = KeyB上滑 = Alt + KeyC
VirtualKeyPlaceHolder = ActionGeneric1

这样我们可以预制一些按键-操作配置来提供一些可以复用的东西
方便维护和复用

@tumuyan
Copy link
Contributor

tumuyan commented Jan 14, 2022

为啥不把每种"组合键"(按键状态)映射为一个"操作"

KeyA 上滑 = Action1
Alt + KeyA 上滑 = Action2
Ctrl + KeyA 上滑 = Action3
Ctrl + Alt + KeyA 上滑 = Action3

按键支持重定向和虚拟按键

比如KeyA上滑 = KeyB上滑 = Alt + KeyC
VirtualKeyPlaceHolder = ActionGeneric1

这样我们可以预制一些按键-操作配置来提供一些可以复用的东西
方便维护和复用

目前难道不就是类似的?快捷键可以预设为一个按键,其他按键可以引用这个按键。

@tumuyan
Copy link
Contributor

tumuyan commented Jan 14, 2022

我觉得有问题的是中文输入法切换到ASCII模式时,输入法键盘并没有切换到ASCII键盘;切换中英文标点时,键盘label没有随之切换。

用户想单独配置在翻页时或者英文状态下某个按键的上滑操作,是做不到的
如果切换到ASCII键盘,也就没有这个问题了

我不太能接受过度套娃,死循环的风险增加了

@Lak4CYUT
Copy link

我原先想以現有的架構去解決 ascii 下,用 alt 去讓按鍵變化的問題。
一開始的想法是直接加一個 ascii 鍵盤,用一個按鍵去假裝它是 'alt' key,反正按了我就切換鍵盤,再按了就切回來。

但後來卡關了,因為我的中文輸入跟 ascii 用同一個鍵盤,當我在中文輸入時想輸入 alt 複合的符號時,我沒辨法在轉跳時,同時切鍵盤又同時 enable ascii mode,那如果變成兩個動作,這個 alt 按鍵的意義就不大了...

後來又想說不如跟 shift 整合吧,但可惜的是我追了一下 code 發現, shift 看來並沒有任何的客制化能力,它就只能去切換大小寫,而那些無關大小寫的字 (i.e: 1<->! , 2<>@, etc..),我是無法幫忙自定義的。

如果能開放定義除了 ascii 之外的符號的 shift 轉換表,我想應該有很大的幫助。

@nopdan
Copy link
Contributor

nopdan commented Jan 25, 2024

此问题应该继续跟进

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

No branches or pull requests

5 participants