From 919d65f8efb34bff37a5e39b54c8a46cb14c5fe6 Mon Sep 17 00:00:00 2001 From: Guido Cella Date: Thu, 12 Dec 2024 22:23:46 +0100 Subject: [PATCH] {select,osc}.lua: add a miscellaneous menu Add a generic menu to bar layouts to provide discoverability for the select menus to users who don't realize you can right click OSC buttons. There's no space to add it in box layout. --- DOCS/man/mpv.rst | 3 +++ DOCS/man/osc.rst | 13 ++++++++++++- etc/input.conf | 1 + player/lua/osc.lua | 24 +++++++++++++++++++----- player/lua/select.lua | 30 ++++++++++++++++++++++++++++++ 5 files changed, 65 insertions(+), 6 deletions(-) diff --git a/DOCS/man/mpv.rst b/DOCS/man/mpv.rst index e82996c3758e5..b3c3d191a5b2f 100644 --- a/DOCS/man/mpv.rst +++ b/DOCS/man/mpv.rst @@ -327,6 +327,9 @@ g-b g-r Show the values of all properties. +MENU + Show a menu with miscellaneous entries. + (The following keys are valid if you have a keyboard with multimedia keys.) PAUSE diff --git a/DOCS/man/osc.rst b/DOCS/man/osc.rst index a0cb7a7b113c6..774bfba27d6f1 100644 --- a/DOCS/man/osc.rst +++ b/DOCS/man/osc.rst @@ -21,7 +21,7 @@ The Interface :: +---------+----------+------------------------------------------+----------+ - | pl prev | pl next | title | cache | + | pl prev | menu | pl next | title cache | +------+--+---+------+---------+-----------+------+-------+-----+-----+----+ | play | skip | skip | time | seekbar | time | audio | sub | vol | fs | | | back | frwd | elapsed | | left | | | | | @@ -36,6 +36,11 @@ pl prev right-click open the playlist selector ============= ================================================ +menu + ============= ================================================ + left-click open the menu + ============= ================================================ + pl next ============= ================================================ left-click play next file in playlist @@ -510,6 +515,12 @@ clicked. ``mbtn_mid`` commands are also triggered with ``shift+mbtn_left``. ``playlist_prev_mbtn_right_command=script-binding select/select-playlist; script-message-to osc osc-hide`` +``menu_mbtn_left_command=script-binding select/menu; script-message-to osc osc-hide`` + +``menu_mbtn_mid_command=`` + +``menu_mbtn_right_command=`` + ``playlist_next_mbtn_left_command=playlist-next; show-text ${playlist} 3000`` ``playlist_next_mbtn_mid_command=show-text ${playlist} 3000`` diff --git a/etc/input.conf b/etc/input.conf index 2407e23f44ed6..8848a57dd4462 100644 --- a/etc/input.conf +++ b/etc/input.conf @@ -188,6 +188,7 @@ #g-d script-binding select/select-audio-device #g-b script-binding select/select-binding #g-r script-binding select/show-properties +#MENU script-binding select/menu #Alt+KP1 add video-rotate -1 # rotate video counterclockwise by 1 degree #Alt+KP5 set video-rotate 0 # reset rotation diff --git a/player/lua/osc.lua b/player/lua/osc.lua index 72d3948da6351..bcaa5994ace29 100644 --- a/player/lua/osc.lua +++ b/player/lua/osc.lua @@ -75,6 +75,10 @@ local user_opts = { playlist_prev_mbtn_mid_command = "show-text ${playlist} 3000", playlist_prev_mbtn_right_command = "script-binding select/select-playlist; script-message-to osc osc-hide", + menu_mbtn_left_command = "script-binding select/menu; script-message-to osc osc-hide", + menu_mbtn_mid_command = "", + menu_mbtn_right_command = "", + playlist_next_mbtn_left_command = "playlist-next", playlist_next_mbtn_mid_command = "show-text ${playlist} 3000", playlist_next_mbtn_right_command = "script-binding select/select-playlist; script-message-to osc osc-hide", @@ -1556,13 +1560,20 @@ local function bar_layout(direction) lo.alpha[1] = user_opts.boxalpha - -- Playlist prev/next + -- Playlist prev geo = { x = osc_geo.x + padX, y = line1, an = 4, w = 18, h = 18 - padY } lo = add_layout("playlist_prev") lo.geometry = geo lo.style = osc_styles.topButtonsBar + -- Menu + geo = { x = geo.x + geo.w + padX, y = geo.y, an = geo.an, w = geo.w, h = geo.h } + lo = add_layout("menu") + lo.geometry = geo + lo.style = osc_styles.topButtonsBar + + -- Playlist next geo = { x = geo.x + geo.w + padX, y = geo.y, an = geo.an, w = geo.w, h = geo.h } lo = add_layout("playlist_next") lo.geometry = geo @@ -1775,16 +1786,19 @@ local function osc_init() end bind_mouse_buttons("title") - -- playlist buttons - - -- prev + -- playlist prev ne = new_element("playlist_prev", "button") ne.content = "\238\132\144" ne.enabled = (pl_pos > 1) or (loop ~= "no") bind_mouse_buttons("playlist_prev") - --next + -- menu + ne = new_element("menu", "button") + ne.content = "☰" + bind_mouse_buttons("menu") + + -- playlist next ne = new_element("playlist_next", "button") ne.content = "\238\132\129" diff --git a/player/lua/select.lua b/player/lua/select.lua index 3ac2f00180291..1cac4690e2f28 100644 --- a/player/lua/select.lua +++ b/player/lua/select.lua @@ -427,3 +427,33 @@ mp.add_key_binding(nil, "show-properties", function () end, }) end) + +mp.add_key_binding(nil, "menu", function () + local menu = { + {"Subtitles", "script-binding select/select-sid"}, + {"Secondary subtitles", "script-binding select/select-secondary-sid"}, + {"Subtitle lines", "script-binding select/select-subtitle-line"}, + {"Audio tracks", "script-binding select/select-aid"}, + {"Video tracks", "script-binding select/select-vid"}, + {"Playlist", "script-binding select/select-playlist"}, + {"Chapters", "script-binding select/select-chapter"}, + {"Editions/Titles", "script-binding select/select-edition"}, + {"Audio devices", "script-binding select/select-audio-device"}, + {"Key bindings", "script-binding select/select-binding"}, + } + + local labels = {} + local commands = {} + + for i, pair in ipairs(menu) do + labels[i], commands[i] = unpack(pair) + end + + input.select({ + prompt = "", + items = labels, + submit = function (i) + mp.command(commands[i]) + end, + }) +end)