diff --git a/DOCS/interface-changes/show-playlist-titles.txt b/DOCS/interface-changes/show-playlist-titles.txt new file mode 100644 index 0000000000..dd9f32e864 --- /dev/null +++ b/DOCS/interface-changes/show-playlist-titles.txt @@ -0,0 +1,2 @@ +add `--osd-playlist-entry` option +remove `osc-playlist_media_title` script-opt diff --git a/DOCS/man/options.rst b/DOCS/man/options.rst index 55c2f45530..929136e8e6 100644 --- a/DOCS/man/options.rst +++ b/DOCS/man/options.rst @@ -4392,6 +4392,12 @@ OSD Set the duration of ``osd-playing-msg`` in ms. If this is unset, ``osd-playing-msg`` stays on screen for the duration of ``osd-duration``. +``--osd-playlist-entry=`` + Whether to display the media title, filename, or both. If the + ``media-title`` is not available, it will display only the ``filename``. + + Default: ``title``. + ``--osd-bar-align-x=<-1-1>`` Position of the OSD bar. -1 is far left, 0 is centered, 1 is far right. Fractional values (like 0.5) are allowed. diff --git a/DOCS/man/osc.rst b/DOCS/man/osc.rst index dc8dad7c2f..978dc4647d 100644 --- a/DOCS/man/osc.rst +++ b/DOCS/man/osc.rst @@ -408,13 +408,6 @@ Configurable Options Whether to display the chapters/playlist at the OSD when left-clicking the next/previous OSC buttons, respectively. -``playlist_media_title`` - Default: yes - - Whether to display playlist entries in media titles. If set to ``no``, file - names are used instead. Note that media title of a file is only available - once it has been loaded. - ``chapter_fmt`` Default: ``Chapter: %s`` diff --git a/options/options.c b/options/options.c index bb21813920..55ecab8f52 100644 --- a/options/options.c +++ b/options/options.c @@ -862,6 +862,9 @@ static const m_option_t mp_opts[] = { {"osd-msg2", OPT_STRING(osd_msg[1]), .flags = UPDATE_OSD}, {"osd-msg3", OPT_STRING(osd_msg[2]), .flags = UPDATE_OSD}, + {"osd-playlist-entry", OPT_CHOICE(playlist_entry_name, + {"title", 0}, {"filename", 1}, {"both", 2})}, + {"video-osd", OPT_BOOL(video_osd), .flags = UPDATE_OSD}, {"idle", OPT_CHOICE(player_idle_mode, diff --git a/options/options.h b/options/options.h index 49aacbd21a..6ab17c2a93 100644 --- a/options/options.h +++ b/options/options.h @@ -259,6 +259,7 @@ typedef struct MPOpts { char *status_msg; char *osd_status_msg; char *osd_msg[3]; + int playlist_entry_name; int player_idle_mode; char **input_commands; bool consolecontrols; diff --git a/player/command.c b/player/command.c index ddf5c7dd4a..278f669fb2 100644 --- a/player/command.c +++ b/player/command.c @@ -3262,8 +3262,10 @@ static int mp_property_playlist(void *ctx, struct m_property *prop, for (int n = 0; n < pl->num_entries; n++) { struct playlist_entry *e = pl->entries[n]; + res = talloc_strdup_append(res, pl->current == e ? list_current + : list_normal); char *p = e->title; - if (!p) { + if (!p || mpctx->opts->playlist_entry_name > 0) { p = e->filename; if (!mp_is_url(bstr0(p))) { char *s = mp_basename(e->filename); @@ -3271,8 +3273,11 @@ static int mp_property_playlist(void *ctx, struct m_property *prop, p = s; } } - const char *m = pl->current == e ? list_current : list_normal; - res = talloc_asprintf_append(res, "%s%s\n", m, p); + if (!e->title || p == e->title || mpctx->opts->playlist_entry_name == 1) { + res = talloc_asprintf_append(res, "%s\n", p); + } else { + res = talloc_asprintf_append(res, "%s (%s)\n", e->title, p); + } } *(char **)arg = diff --git a/player/lua/osc.lua b/player/lua/osc.lua index 745cb71c6b..0cf86694e7 100644 --- a/player/lua/osc.lua +++ b/player/lua/osc.lua @@ -56,7 +56,6 @@ local user_opts = { livemarkers = true, -- update seekbar chapter markers on duration change chapters_osd = true, -- whether to show chapters OSD on next/prev playlist_osd = true, -- whether to show playlist OSD on next/prev - playlist_media_title = true, -- whether to use media titles as playlist entry names chapter_fmt = "Chapter: %s", -- chapter print format for seekbar-hover. "no" to disable unicodeminus = false, -- whether to use the Unicode minus sign character @@ -525,14 +524,20 @@ local function get_playlist() end local message = string.format('Playlist [%d/%d]:\n', pos, count) + local show = mp.get_property_native('osd-playlist-entry') for _, v in ipairs(limlist) do - local title = v.title - local _, filename = utils.split_path(v.filename) - if not user_opts.playlist_media_title or title == nil then - title = filename + local entry = v.title + if not entry or show ~= 'title' then + entry = v.filename + if not entry:find("://") then + entry = select(2, utils.split_path(entry)) + end + end + if v.title and show == 'both' then + entry = string.format('%s (%s)', v.title, entry) end message = string.format('%s %s %s\n', message, - (v.current and '●' or '○'), title) + (v.current and '●' or '○'), entry) end return message end diff --git a/player/lua/select.lua b/player/lua/select.lua index 3136e80766..504f578f47 100644 --- a/player/lua/select.lua +++ b/player/lua/select.lua @@ -28,9 +28,19 @@ end mp.add_forced_key_binding(nil, "select-playlist", function () local playlist = {} local default_item + local show = mp.get_property_native("osd-playlist-entry") for i, entry in ipairs(mp.get_property_native("playlist")) do - playlist[i] = select(2, utils.split_path(entry.filename)) + playlist[i] = entry.title + if not playlist[i] or show ~= "title" then + playlist[i] = entry.filename + if not playlist[i]:find("://") then + playlist[i] = select(2, utils.split_path(playlist[i])) + end + end + if entry.title and show == "both" then + playlist[i] = string.format("%s (%s)", entry.title, playlist[i]) + end if entry.playing then default_item = i