-
Notifications
You must be signed in to change notification settings - Fork 2.9k
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
command: make script-binding command scalable #15316
Conversation
Download the artifacts for this pull request: |
Did you mean If it's still script-message, then at which level is the extra argument added? The So adding an argument at this level will surely break existing clients which expect the receiver to see exactly the arguments they send. Or maybe it's only in how script-binding uses script-message? Please clarify. |
It's noted in the changed I have updated the commit message to clarify this.
This only affects how |
7ab0ca9
to
43ab609
Compare
Added some documentation for scalable keys and scalable commands to better clarify scalable stuffs as a whole. |
4ed42c6
to
e1d605a
Compare
We can't actually use this for cursor-centric-zoom can we? Because that needs to be bound to script-message in input.conf and not script-binding to send the zoom argument. |
You can add a script key binding for |
I mean the user can no longer configure the zoom amount in input.conf. I guess we need to add a script-opt for it, which is more indirect. |
Actually,
On top of |
The case you mentioned can simply be a |
In my opinion having both script-message and script-binding for the same function is more complex to write and document than to just write it in C and extremely confusing for users, how are they supposed to understand which one to use? And users that want both high resolution scaling and bindings with different amounts still have to define user-unfriendly bindings like above. |
The intended way is to configure keybinds and amounts as script options, and let the script create and destroy key bindings by itself, and doesn't require putting anything into The only reason they are useful as script messages is for other scripts to call them. I don't think they're needed on their own when script options serve the purpose.
Like I said script options is a better choice.
I mentioned in your PR how features like animated zooming would be much harder to do in C while being easier in lua. mpv clients are clearly in a better place to implement these features compared in player core.
Yeah, some are commands and others are script messages... totally not confusing which you seem trying so hard to avoid. I looked into making the |
I don't think zoom and pan amounts are complex or specialized. All key bindings that modify properties already configure amounts in input.conf, it is nothing new.
We can add a command for osd-relative-pan and keep cursor-centric-zoom in a script a middle ground. Wanting key bindings that pan with different amounts should be much more common than key bindings that zoom in different amounts. This is also the case in https://github.com/occivink/mpv-image-viewer/blob/master/input.conf, it has multiple pan amounts and one cursor-centric-zoom amount. I don't know if having to define the bindings in #15316 (comment) just do that seems sane to you. ¯\(ツ)/¯ But if maintainers deem it fine I'm fine with either way.
Most mpv key bindings are already commands and some script messages, the only difference is that I'm adding these ones at the same time.
Nah, that is too hacky. You can't know whether numbers for script-message are floats or integers not meant to be scaled. Also ideally the axis would ideally be the first argument to pan. |
0b8bec6
to
573274c
Compare
Added a custom argument for |
Without expressing an opinion on this whole PR, I'm not fond of overloading I also don't quite understand what According to the new docs, at the prototype it's additional to
I presume this refers to the new Then why is And, looking at the JS patch only: if (key_data.arg)
key_data.input = key_data.input + " " + key_data.arg; You do realize that this string is parsed according to input.conf syntax, right? which means it can become several arguments at the callback. Also, if it's supposed to get back to the caller during callback, like some context argument which mpv itself doesn't care about? (is this what it is?) then, at least with the JS code, but almost certainly also at the lua code, you don't need to append it to the input.conf line and then parse it back during the callback. JS and Lua have closures. You can just keep it in This is way too complex and too unclear for my taste. |
Thanks, this is much saner. I assume this can be extended to pass multiple arguments to script-binding in the future by converting them to a JSON array like I suggested. I assume adding arg to the signature of mp.add_key_binding is a mistake, since it is passed to script-binding instead. Also passing arg = 'has spaces' to add_key_binding errors. But I'm not sure why this is even needed, is it only a default if no argument is passed to script-binding? |
e048078
to
9c9372a
Compare
Removed the ability to specify a default
Yes.
The point of this is to allow the
This is fixed now. |
A bit better in a quick glance. You should also add a trailing comma in lists which just keep getting longer, this way at least the next time an item is added, only one line is added and no line is modified. But overall, I'm not fond of it. This is just too many arguments at the callback, hard for the user to not make mistakes, and becomes increasingly annoying to extend. Not sure what the solution should be, if at all. |
9c9372a
to
c7897dc
Compare
Added. The trailing comma wasn't here before this PR so I didn't add it.
The callback parameter is a single table. If the user doesn't care about some of the fields they can simply ignore them. |
Correct. Thanks. But even internally, functions with arguments list which just keep getting longer is really meh. Especially when it's prpagated from one place to another. In this case adding a single argument required updating 4 lists at the code (dispatch input arguments, dispatch call arguments, binding callback arguments, callback object). This is not nice. You just experience first hand how easy it is to forget to add it on one of the places - with the missing arg at Also, unrelated, if I read it right, mp.add_key_binding now does them scalable by default? I've not followed the whole scalable subject, and I definitely don't know the details, but IMO this can break scripts easily, if they expect discrete wheel events but now by default they'd get bombarded with events. |
You have to opt-in with scalable = true in add_key_binding. Also I don't think scalable changes the number of the events, just the amounts. It would have been nice to make script-binding send 1 script-message JSON argument like mp.input so the order of arguments doesn't matter, but changing it now is a breaking change. |
Nitpick about the organization of commits: Since we don’t use merge commits and instead maintain a linear history, it would be better to organize commits based on functionality rather than structure. After merging, PR boundaries are not visible, and separating documentation changes from functional changes makes it harder to follow the history, revert changes, and understand the context. In general, having 13 commits for a patch set with +89 and −29 changes is excessive. I'm all for small, easy to understand commits, but splitting single change into 5 commits (change + docs + lua + js + lua docs) is not making it easier to follow. |
script-binding command is currently not scalable, so script registered key bindings also cannot be scalable, unlink input.conf bindings. This makes script-binding command scalable so that it's possible to define scalable key bindings in scripts. It now calls script-message command with an extra argument with the scale of the key.
c7897dc
to
83ccc05
Compare
This is just a natural effect of a feature requiring coordination between several components. This only concerns the development process and I think the current process works well.
No, it's opt-in for If you think this is a problem, I can make it nonscalable by default, and introduce a new command prefix
It was split because it's easier for me to manage in WIP state. I have merged the doc commits into code changes. |
I see. So at input.conf without adding any prefix it's scalable by default, but in The docs are not wrong, but it doesn't immediately stand out that it's different than the normal binding scalability behavior. It might be worth adding a note at the add_key_binding scalable docs. (and about the whole PR... well... I'll shut up). |
For complex key bindings, the table now contains a new member of the current key scale. mp.add_key_binding() now accepts the scalable flag to make the binding scalable.
This documents the scalable keys (currently WHEEL_*) and notes how the keys work with scalable commands. Mention touch pad as a common source of scalable input source.
This allows passing arbitrary information in the script-binding command. The content is available as a new message argument.
The information is available in the table.
83ccc05
to
947b7a5
Compare
Yes. I made the behavior of
Added a note for this. |
The docs say:
At the C code: scale_s, cmd->args[1].v.s}; Is this guaranteed to be an empty string if the user didn't add the extra argument? |
Yes. Line 7162 in 947b7a5
|
This makes
script-binding
command and key bindings added bymp.add_key_binding()
scalable. The script-message command now has an extra argument with the scale of the key.