Conditional auto keybind
Closed this issue · 23 comments
Just like Conditional auto profiles
for input key: bind keys only when conditions are met.
Example: When only pause and the file is played to the end, the → button is bound to "next file"
忽略掉默认input的报错 #21 能满足需求吗?
我觉得不是同一个东西
我自己设想的方案,增加语法|
或者别的符号来分割按键动作和触发条件
例如:
RIGHT playlist-next #@click|pause and eof-reached
RIGHT seek 5 #@click
只有满足暂停且播放结束,点击右方向键会跳到下一个文件
mpv 的 auto profile 在 C 的部分做了很多 workaround,有些键 lua 的 observer 是无法监听的。
hooke007/MPV_lazy#220
等等看这个问题有没有解吧
临时解决方案的话我可以另外写一个脚本给你,不过要过两天
不是条件满足时触发绑定,而是执行按键动作前判断是否需要满足条件、条件是否满足
好像是我想复杂了,我试试看,但也要过两天👻
我觉得不是同一个东西 我自己设想的方案,增加语法
|
或者别的符号来分割按键动作和触发条件 例如:RIGHT playlist-next #@click|pause and eof-reached RIGHT seek 5 #@click
只有满足暂停且播放结束,点击右方向键会跳到下一个文件
一些细节的想法:
这会导致一种按键事件可能有多种不同的情况,所以需要考虑优先级:1)排在下面的优先(按照mpv原有的逻辑) 2)所有 有条件的情况都优先于无条件的。
https://github.com/zhongfly/InputEvent/tree/conditional-keybind
大概整出来了,简单测试了下能用
模仿auto-profile.lua增加了条件,理论上和profile-cond一样的条件结果
测试
默认开启了使用外部配置
外部配置默认为script-opts\inputevent_key.conf,内容如下
RIGHT playlist-next #@click|pause and time_remaining < 2
i show-text "double_click|pause" #@double_click|pause
i show-text "double_click" #@double_click
SPACE no-osd set speed 4; set pause no #@press
暂停且剩余时间小于2,点击右方向键会跳到下一个文件
暂停时双击i,显示文字"double_click|pause"
我电脑现在出问题还在修,ssh key 没有备份。等修好了再看
https://github.com/natural-harmonia-gropius/input-event#how-to-integrate-with-other-scripts
你能不能用这个做一个扩展性的脚本,我不太想塞一段很长而又针对性的东西进来
为了避免冲突可以换个前缀,像是 key command #cond@
我想不到通过这样实现的方法,因为需要在按下按键时进行判断使用什么命令,然而脚本只提供了绑定按键的接口。
一开始的input.conf
SPACE no-osd set speed 1; set pause no #@press
SPACE no-osd add speed 0.1; show-text ${speed} #cond@repeat|speed<4
SPACE no-osd add speed 0; show-text ${speed} #cond@repeat|speed>=4
通过接口把它变成这样(我没记错的话单按键绑定行为是合并),在你的脚本里再做分支
SPACE no-osd set speed 1; set pause no #@press
SPACE script-binding inputeventcond/SPACE_repeat #@repeat
还有一个问题就是release-auto和press的处理
假如把press命令是发给扩展脚本,就不能享受release-auto的便利。
如果要恢复这种便利,那就得把release也绑定给扩展脚本,并且需要在扩展脚本里实现release-auto。这么一来,我觉得扩展脚本除了多了“条件判断”、少了“按键处理”之外,和目前的脚本几乎一样了…
当然,这种使用究竟有没有必要还是问题
我觉得可以做成一个完全独立的脚本,不局限于与input-event搭配使用。
作用就是对于一个事件会根据不同条件执行不同的命令
想问一下,假如写成这样:
<按键> script-message-to <脚本名> run <event> #@repeat #cond|<real command>|speed<4
你的脚本能正常绑定吗?
这一行能正常绑定(如果我没记错)
一开始的input.conf
SPACE no-osd set speed 1; set pause no #@press SPACE no-osd add speed 0.1; show-text ${speed} #cond@repeat|speed<4 SPACE no-osd add speed 0; show-text ${speed} #cond@repeat|speed>=4
通过接口把它变成这样(我没记错的话单按键绑定行为是合并),在你的脚本里再做分支
SPACE no-osd set speed 1; set pause no #@press SPACE script-binding inputeventcond/SPACE_repeat #@repeat
这个方法似乎挺好的……还是先按这个来
理论上不会吧……单线程也没异步的脚本
按照我的设想如果a绑了a @click,b绑了b @press, c绑了 c@click, 最终是 {click:c, press:b}
问题在于主脚本 与 扩展脚本 ,它们都读取了配置文件,都想要进行绑定,先后顺序可能还不一定。为了实现本issue的目标,肯定希望使配置更新时,无论谁先处理完配置,都是主脚本先绑定,然后扩展脚本覆盖。
可能需要主脚本用script-message来广播已经完成了配置文件绑定?不了解client怎么接受处理这个
脚本1和脚本2同时想对同一个键添加新绑定
按照现在的设计 conf 会长成这样, 应该没有这样用的……
key command #@click #a #b
运行时的冲突我现在没什么想法,有空我试试这个
mpv-player/mpv#11225
另外这脚本自身就支持热重载,在刚开始的一段时间以外其他脚本绑定的可靠性也难以保证
https://github.com/natural-harmonia-gropius/input-event#support-for-multiple-configuration-files
感觉确实需要弄个优先级……头大
总的来说,用扩展脚本来做感觉复杂了很多,还不如直接改
https://github.com/zhongfly/command_cond 先这么做着吧……独立的脚本已经能覆盖绝大多数情况了
SPACE no-osd set speed 1; set pause no #@press
SPACE script-message-to command_cond speedup #@repeat
SPACE ignore #@release
SPACE cycle pause #@click
speedup no-osd add speed 0.1; show-text ${speed} #|speed<4
speedup no-osd add speed 0; show-text ${speed} #|speed>=4