summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristoph Heinrich <christoph.heinrich@student.tugraz.at>2023-08-31 22:51:15 +0200
committerKacper Michajłow <kasper93@gmail.com>2024-03-21 03:08:52 +0100
commit0c8f3bc73ca3edf1970dd68aa5e085064968bdfd (patch)
treef2584e2750a2c97ae95c0054e8f6878be44c3836
parent0230a0c25a767f7d285efc2e26d068d4110a0eb3 (diff)
downloadmpv-0c8f3bc73ca3edf1970dd68aa5e085064968bdfd.tar.bz2
mpv-0c8f3bc73ca3edf1970dd68aa5e085064968bdfd.tar.xz
player/command: add term-size/[w,h] property
There was no way for scripts to know the current size of the terminal, which is essintial if they want to provide a good user experience even without a window.
-rw-r--r--DOCS/interface-changes/term-size.txt1
-rw-r--r--DOCS/man/input.rst13
-rw-r--r--player/command.c19
3 files changed, 33 insertions, 0 deletions
diff --git a/DOCS/interface-changes/term-size.txt b/DOCS/interface-changes/term-size.txt
new file mode 100644
index 0000000000..dd65a66256
--- /dev/null
+++ b/DOCS/interface-changes/term-size.txt
@@ -0,0 +1 @@
+add `term-size` property
diff --git a/DOCS/man/input.rst b/DOCS/man/input.rst
index 3d3163eb1c..cf4a43636b 100644
--- a/DOCS/man/input.rst
+++ b/DOCS/man/input.rst
@@ -2804,6 +2804,19 @@ Property list
Any of these properties may be unavailable or set to dummy values if the
VO window is not created or visible.
+``term-size``
+ The current terminal size.
+
+ This has two sub-properties.
+
+ ``term-size/w``
+ width of the terminal in cells
+ ``term-size/h``
+ height of the terminal in cells
+
+ This property is not observable. Reacting to size changes requires
+ polling.
+
``window-id``
Read-only - mpv's window id. May not always be available, i.e due to window
not being opened yet or not being supported by the VO.
diff --git a/player/command.c b/player/command.c
index 82801131a8..27fadf91b1 100644
--- a/player/command.c
+++ b/player/command.c
@@ -74,6 +74,7 @@
#include "osdep/io.h"
#include "osdep/subprocess.h"
+#include "osdep/terminal.h"
#include "core.h"
@@ -2886,6 +2887,23 @@ static int mp_property_osd_ass(void *ctx, struct m_property *prop,
return m_property_read_sub(props, action, arg);
}
+static int mp_property_term_size(void *ctx, struct m_property *prop,
+ int action, void *arg)
+{
+ int w = -1, h = -1;
+ terminal_get_size(&w, &h);
+ if (w == -1 || h == -1)
+ return M_PROPERTY_UNAVAILABLE;
+
+ struct m_sub_property props[] = {
+ {"w", SUB_PROP_INT(w)},
+ {"h", SUB_PROP_INT(h)},
+ {0}
+ };
+
+ return m_property_read_sub(props, action, arg);
+}
+
static int mp_property_mouse_pos(void *ctx, struct m_property *prop,
int action, void *arg)
{
@@ -4092,6 +4110,7 @@ static const struct m_property mp_properties_base[] = {
{"input-bindings", mp_property_bindings},
{"user-data", mp_property_udata},
+ {"term-size", mp_property_term_size},
M_PROPERTY_ALIAS("video", "vid"),
M_PROPERTY_ALIAS("audio", "aid"),