diff options
| -rw-r--r-- | config.lua | 8 | ||||
| -rw-r--r-- | util.lua | 30 |
2 files changed, 38 insertions, 0 deletions
@@ -1,5 +1,8 @@ -- Copyright 2025 David Vazgenovich Shakaryan +local util = require('util') + +local mp_options = require('mp.options') local mp_utils = require('mp.utils') local config = {} @@ -68,4 +71,9 @@ config.cache_dir = mp_utils.join_path(script_dir, 'cache') config.img_dir = mp_utils.join_path(script_dir, 'img') config.favourites_file = mp_utils.join_path(script_dir, 'favourites.json') +-- flatten keys into `foo.bar.baz' form for script-opt overrides +local opts = util.flatten_table(config) +mp_options.read_options(opts) +util.unflatten_table(opts, config) + return config @@ -125,6 +125,36 @@ function util.stable_kmerge(t, u, k) return res end +function util.flatten_table(src, dst, prefix) + local dst = dst or {} + for k, v in pairs(src) do + local k = prefix and prefix .. '.' .. k or k + if type(v) == 'table' then + util.flatten_table(v, dst, k) + else + dst[k] = v + end + end + return dst +end + +function util.unflatten_table(src, dst) + local dst = dst or {} + for k, v in pairs(src) do + local t = dst + local prev + for curr in (k .. '.'):gmatch('(.-)%.') do + if prev then + t[prev] = t[prev] or {} + t = t[prev] + end + prev = curr + end + t[prev] = v + end + return dst +end + function util.str_seek_prev_char(str, pos) return util.utf8_seek(str, pos, -1) end |
