Skip to content

Commit

Permalink
feat(settings): Bring Lua settings.set to parity with \set
Browse files Browse the repository at this point in the history
We previously added a way to set a setting and make it stick as the
default via the TeXlike command \set:

    \set[parameter=foo,value=bar,makedefault=true]

This is the complement of that for Lua so you don't have to directly
hack the settings array:

   SILE.settings.set("foo", "bar", true)
  • Loading branch information
alerque committed Jul 29, 2020
1 parent b957055 commit d73b08c
Showing 1 changed file with 10 additions and 11 deletions.
21 changes: 10 additions & 11 deletions core/settings.lua
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,14 @@ SILE.settings = {
return SILE.settings.defaults[parameter]
end
end,
set = function(parameter, value)
set = function(parameter, value, makedefault)
if not SILE.settings.declarations[parameter] then
SU.error("Undefined setting '"..parameter.."'")
end
if type(value) == "nil" then
SILE.settings.state[parameter] = nil
else
SILE.settings.state[parameter] = SU.cast(SILE.settings.declarations[parameter].type, value)
value = SU.cast(SILE.settings.declarations[parameter].type, value)
SILE.settings.state[parameter] = value
if makedefault then
SILE.settings.defaults[parameter] = value
end
end,
temporarily = function(func)
Expand Down Expand Up @@ -115,15 +115,14 @@ SILE.registerCommand("set", function(options, content)
local makedefault = SU.boolean(options.makedefault, false)
local value = options.value
if content and (type(content) == "function" or content[1]) then
if makedefault then
SU.warn("Are you sure meant to set default settings *and* pass content to ostensibly apply them to temporarily?")
end
SILE.settings.temporarily(function()
SILE.settings.set(parameter, value)
SILE.settings.set(parameter, value, makedefault)
SILE.process(content)
end)
else
SILE.settings.set(parameter, value)
end
if makedefault then
SILE.settings.declarations[parameter].default = value
SILE.settings.defaults[parameter] = value
SILE.settings.set(parameter, value, makedefault)
end
end, "Set a SILE parameter <parameter> to value <value> (restoring the value afterwards if <content> is provided)")

0 comments on commit d73b08c

Please sign in to comment.