summaryrefslogtreecommitdiff
path: root/mpv/scripts/file-browser/modules/globals.lua
diff options
context:
space:
mode:
authorryukamish <[email protected]>2026-04-11 16:06:45 +0530
committerryukamish <[email protected]>2026-04-11 16:06:45 +0530
commit607891801fbf2051a0c9062d15a445dd238c1e1b (patch)
tree33b8cfba2355b498addea05e385b06d46cced30f /mpv/scripts/file-browser/modules/globals.lua
parent6fbde2906e3bb2d4d1df23f6374d8a6a0aef870f (diff)
add: mako and mpv configs
Diffstat (limited to 'mpv/scripts/file-browser/modules/globals.lua')
-rw-r--r--mpv/scripts/file-browser/modules/globals.lua181
1 files changed, 181 insertions, 0 deletions
diff --git a/mpv/scripts/file-browser/modules/globals.lua b/mpv/scripts/file-browser/modules/globals.lua
new file mode 100644
index 0000000..f4aa1b6
--- /dev/null
+++ b/mpv/scripts/file-browser/modules/globals.lua
@@ -0,0 +1,181 @@
+--------------------------------------------------------------------------------------------------------
+------------------------------------------Variable Setup------------------------------------------------
+--------------------------------------------------------------------------------------------------------
+--------------------------------------------------------------------------------------------------------
+
+local mp = require 'mp'
+local o = require 'modules.options'
+
+---@class globals
+local globals = {}
+
+--sets the version for the file-browser API
+globals.API_VERSION = "1.9.0"
+
+---gets the current platform (in mpv v0.36+)
+---in earlier versions it is set to `windows`, `darwin` or `other`
+---@type 'windows'|'darwin'|'linux'|'android'|'freebsd'|'other'|string|nil
+globals.PLATFORM = mp.get_property_native('platform')
+if not globals.PLATFORM then
+ local _ = {}
+ if mp.get_property_native('options/vo-mmcss-profile', _) ~= _ then
+ globals.PLATFORM = 'windows'
+ elseif mp.get_property_native('options/macos-force-dedicated-gpu', _) ~= _ then
+ globals.PLATFORM = 'darwin'
+ end
+ return 'other'
+end
+
+--the osd_overlay API was not added until v0.31. The expand-path command was not added until 0.30
+assert(mp.create_osd_overlay, "Script requires minimum mpv version 0.33")
+
+globals.ass = mp.create_osd_overlay("ass-events")
+globals.ass.res_y = 720 / o.scaling_factor_base
+
+local BASE_FONT_SIZE = 25
+
+--force file-browser to use a specific text alignment (default: top-left)
+--uses ass tag alignment numbers: https://aegi.vmoe.info/docs/3.0/ASS_Tags/#index23h3
+globals.ASS_ALIGNMENT_MATRIX = {
+ top = {left = 7, center = 8, right = 9},
+ center = {left = 4, center = 5, right = 6},
+ bottom = {left = 1, center = 2, right = 3},
+}
+
+globals.ALIGN_X = o.align_x == 'auto' and mp.get_property('osd-align-x', 'left') or o.align_x
+globals.ALIGN_Y = o.align_y == 'auto' and mp.get_property('osd-align-y', 'top') or o.align_y
+
+globals.style = {
+ global = ([[{\an%d}]]):format(globals.ASS_ALIGNMENT_MATRIX[globals.ALIGN_Y][globals.ALIGN_X]),
+
+ -- full line styles
+ header = ([[{\r\q2\b%s\fs%d\fn%s\c&H%s&}]]):format((o.font_bold_header and "1" or "0"), o.scaling_factor_header*BASE_FONT_SIZE, o.font_name_header, o.font_colour_header),
+ body = ([[{\r\q2\fs%d\fn%s\c&H%s&}]]):format(BASE_FONT_SIZE, o.font_name_body, o.font_colour_body),
+ footer_header = ([[{\r\q2\fs%d\fn%s\c&H%s&}]]):format(o.scaling_factor_wrappers*BASE_FONT_SIZE, o.font_name_wrappers, o.font_colour_wrappers),
+
+ --small section styles (for colours)
+ multiselect = ([[{\c&H%s&}]]):format(o.font_colour_multiselect),
+ selected = ([[{\c&H%s&}]]):format(o.font_colour_selected),
+ playing = ([[{\c&H%s&}]]):format(o.font_colour_playing),
+ playing_selected = ([[{\c&H%s&}]]):format(o.font_colour_playing_multiselected),
+ warning = ([[{\c&H%s&}]]):format(o.font_colour_escape_chars),
+
+ --icon styles
+ indent = ([[{\alpha&H%s}]]):format('ff'),
+ cursor = ([[{\fn%s\c&H%s&}]]):format(o.font_name_cursor, o.font_colour_cursor),
+ cursor_select = ([[{\fn%s\c&H%s&}]]):format(o.font_name_cursor, o.font_colour_multiselect),
+ cursor_deselect = ([[{\fn%s\c&H%s&}]]):format(o.font_name_cursor, o.font_colour_selected),
+ folder = ([[{\fn%s}]]):format(o.font_name_folder),
+ selection_marker = ([[{\alpha&H%s}]]):format(o.font_opacity_selection_marker),
+}
+
+---@type State
+globals.state = {
+ list = {},
+ selected = 1,
+ hidden = true,
+ flag_update = false,
+ keybinds = nil,
+
+ parser = nil,
+ directory = nil,
+ directory_label = nil,
+ prev_directory = '',
+ empty_text = 'Empty Directory',
+ co = nil,
+
+ multiselect_start = nil,
+ initial_selection = nil,
+ selection = {}
+}
+
+---@class ParserRef
+---@field id string
+---@field index number?
+
+---@type table<number,Parser>|table<string,Parser>|table<Parser,ParserRef>>
+--the parser table actually contains 3 entries for each parser
+--a numeric entry which represents the priority of the parsers and has the parser object as the value
+--a string entry representing the id of each parser and with the parser object as the value
+--and a table entry with the parser itself as the key and a table value in the form { id = %s, index = %d }
+globals.parsers = {}
+
+--this table contains the parse_state tables for every parse operation indexed with the coroutine used for the parse
+--this table has weakly referenced keys, meaning that once the coroutine for a parse is no-longer used by anything that
+--field in the table will be removed by the garbage collector
+---@type table<thread,ParseState>
+globals.parse_states = setmetatable({}, { __mode = "k"})
+
+---@type Set<string>
+globals.extensions = {}
+
+---@type Set<string>
+globals.sub_extensions = {}
+
+---@type Set<string>
+globals.audio_extensions = {}
+
+---@type Set<string>
+globals.parseable_extensions = {}
+
+---This table contains mappings to convert external directories to cannonical
+--locations within the file-browser file tree. The keys of the table are Lua
+--patterns used to evaluate external directory paths. The value is the path
+--that should replace the part of the path than matched the pattern.
+--These mappings should only applied at the edges where external paths are
+--ingested by file-browser.
+---@type table<string,string>
+globals.directory_mappings = {}
+
+---@class CurrentFile
+---@field directory string?
+---@field name string?
+---@field path string?
+---@field original_path string?
+globals.current_file = {
+ directory = nil,
+ name = nil,
+ path = nil,
+ original_path = nil,
+}
+
+---@type List
+globals.root = {}
+
+---@class (strict) History
+---@field list string[]
+---@field size number
+---@field position number
+globals.history = {
+ list = {},
+ size = 0,
+ position = 0,
+}
+
+---@class (strict) DirectoryStack
+---@field stack string[]
+---@field position number
+globals.directory_stack = {
+ stack = {},
+ position = 0,
+}
+
+
+--default list of compatible file extensions
+--adding an item to this list is a valid request on github
+globals.compatible_file_extensions = {
+ "264","265","3g2","3ga","3ga2","3gp","3gp2","3gpp","3iv","a52","aac","adt","adts","ahn","aif","aifc","aiff","amr","ape","asf","au","avc","avi","awb","ay",
+ "bmp","cue","divx","dts","dtshd","dts-hd","dv","dvr","dvr-ms","eac3","evo","evob","f4a","flac","flc","fli","flic","flv","gbs","gif","gxf","gym",
+ "h264","h265","hdmov","hdv","hes","hevc","jpeg","jpg","kss","lpcm","m1a","m1v","m2a","m2t","m2ts","m2v","m3u","m3u8","m4a","m4v","mk3d","mka","mkv",
+ "mlp","mod","mov","mp1","mp2","mp2v","mp3","mp4","mp4v","mp4v","mpa","mpe","mpeg","mpeg2","mpeg4","mpg","mpg4","mpv","mpv2","mts","mtv","mxf","nsf",
+ "nsfe","nsv","nut","oga","ogg","ogm","ogv","ogx","opus","pcm","pls","png","qt","ra","ram","rm","rmvb","sap","snd","spc","spx","svg","thd","thd+ac3",
+ "tif","tiff","tod","trp","truehd","true-hd","ts","tsa","tsv","tta","tts","vfw","vgm","vgz","vob","vro","wav","weba","webm","webp","wm","wma","wmv","wtv",
+ "wv","x264","x265","xvid","y4m","yuv"
+}
+
+---@class BrowserAbortError
+globals.ABORT_ERROR = {
+ msg = "browser is no longer waiting for list - aborting parse"
+}
+
+return globals