mirror of https://github.com/mpv-player/mpv
stats.lua: don't use io.write from builtin script
Scripts and especially internal scripts shouln't bypass msg.c logging code for various resons, ranging from processing the input, filtering the log levels, truncating the output and so on. io.write() is lazy way of outputing to stdout without respecting mpv's logging module. Uses osd message, because this has no prefixes. Added internal flush-status-line command to flush current output without clearing before exiting. This commit will allow us to remove duplicated terminal handling code from stats.lua, mpv core already handles all that and does it in better way, without taking shortcuts.
This commit is contained in:
parent
2df582b839
commit
08e2acbae1
|
@ -6749,6 +6749,17 @@ static void cmd_context_menu(void *p)
|
||||||
vo_control(vo, VOCTRL_SHOW_MENU, NULL);
|
vo_control(vo, VOCTRL_SHOW_MENU, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void cmd_flush_status_line(void *p)
|
||||||
|
{
|
||||||
|
struct mp_cmd_ctx *cmd = p;
|
||||||
|
struct MPContext *mpctx = cmd->mpctx;
|
||||||
|
|
||||||
|
if (!mpctx->log)
|
||||||
|
return;
|
||||||
|
|
||||||
|
mp_msg_flush_status_line(mpctx->log, cmd->args[0].v.b);
|
||||||
|
}
|
||||||
|
|
||||||
/* This array defines all known commands.
|
/* This array defines all known commands.
|
||||||
* The first field the command name used in libmpv and input.conf.
|
* The first field the command name used in libmpv and input.conf.
|
||||||
* The second field is the handler function (see mp_cmd_def.handler and
|
* The second field is the handler function (see mp_cmd_def.handler and
|
||||||
|
@ -7224,6 +7235,8 @@ const struct mp_cmd_def mp_cmds[] = {
|
||||||
|
|
||||||
{ "context-menu", cmd_context_menu },
|
{ "context-menu", cmd_context_menu },
|
||||||
|
|
||||||
|
{ "flush-status-line", cmd_flush_status_line, { {"clear", OPT_BOOL(v.b)} } },
|
||||||
|
|
||||||
{0}
|
{0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1795,20 +1795,30 @@ mp.register_event("video-reconfig",
|
||||||
|
|
||||||
-- --script-opts=stats-bindlist=[-]{yes|<TERM-WIDTH>}
|
-- --script-opts=stats-bindlist=[-]{yes|<TERM-WIDTH>}
|
||||||
if o.bindlist ~= "no" then
|
if o.bindlist ~= "no" then
|
||||||
mp.command("no-osd set really-quiet yes")
|
-- This is a special mode to print key bindings to the terminal,
|
||||||
|
-- Adjust the print format and level to make it print only the key bindings.
|
||||||
|
mp.set_property("msg-level", "all=no,statusline=status")
|
||||||
|
mp.set_property("term-osd", "force")
|
||||||
|
mp.set_property_bool("msg-module", false)
|
||||||
|
mp.set_property_bool("msg-time", false)
|
||||||
|
-- wait for all other scripts to finish init
|
||||||
|
mp.add_timeout(0, function()
|
||||||
if o.bindlist:sub(1, 1) == "-" then
|
if o.bindlist:sub(1, 1) == "-" then
|
||||||
o.bindlist = o.bindlist:sub(2)
|
o.bindlist = o.bindlist:sub(2)
|
||||||
o.no_ass_b0 = ""
|
o.no_ass_b0 = ""
|
||||||
o.no_ass_b1 = ""
|
o.no_ass_b1 = ""
|
||||||
end
|
end
|
||||||
local width = max(40, math.floor(tonumber(o.bindlist) or 79))
|
local width = max(40, math.floor(tonumber(o.bindlist) or 79))
|
||||||
mp.add_timeout(0, function() -- wait for all other scripts to finish init
|
|
||||||
o.ass_formatting = false
|
o.ass_formatting = false
|
||||||
o.no_ass_indent = " "
|
o.no_ass_indent = " "
|
||||||
o.term_size = { w = width , h = 0}
|
o.term_size = { w = width , h = 0}
|
||||||
io.write(keybinding_info(false, true) .. "\n")
|
mp.osd_message(keybinding_info(false, true))
|
||||||
|
-- wait for next tick to print status line and flush it without clearing
|
||||||
|
mp.add_timeout(0, function()
|
||||||
|
mp.command("flush-status-line no")
|
||||||
mp.command("quit")
|
mp.command("quit")
|
||||||
end)
|
end)
|
||||||
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
mp.observe_property('osd-height', 'native', handle_osd_height_update)
|
mp.observe_property('osd-height', 'native', handle_osd_height_update)
|
||||||
|
|
Loading…
Reference in New Issue