trime icon indicating copy to clipboard operation
trime copied to clipboard

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

Open iovxw opened this issue 3 years ago • 6 comments

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 avatar Jan 13 '22 06:01 iovxw

未解决的问题:

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

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

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

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

比如

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

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

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

加一个 NoOperation

iovxw avatar Jan 13 '22 07:01 iovxw

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

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

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

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

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

ameaninglessname avatar Jan 14 '22 03:01 ameaninglessname

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

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

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

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

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

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

tumuyan avatar Jan 14 '22 04:01 tumuyan

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

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

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

tumuyan avatar Jan 14 '22 04:01 tumuyan

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

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

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

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

Lak4CYUT avatar Jan 26 '22 09:01 Lak4CYUT

此问题应该继续跟进

nopdan avatar Jan 25 '24 08:01 nopdan