Changeset View
Changeset View
Standalone View
Standalone View
stand/lua/menu.lua.8
Show First 20 Lines • Show All 191 Lines • ▼ Show 20 Lines | entries = { | ||||
end, | end, | ||||
func = function(_, _, _) | func = function(_, _, _) | ||||
loader.setenv("some_envvar", "some_value") | loader.setenv("some_envvar", "some_value") | ||||
end, | end, | ||||
}, | }, | ||||
}, | }, | ||||
} | } | ||||
.Ed | .Ed | ||||
.\"The following example doesn't work. Retained for the | |||||
.\"moment... | |||||
.\".Pp | |||||
.\"To add another option to the welcome menu: | |||||
imp: Kyle pointed out in email something that makes me want to retract this entire paragraph.
It's… | |||||
.\".Pp | |||||
.\".Bd -literal -offset indent -compact | |||||
.\"local core = require("core") | |||||
.\"local menu = require("menu") | |||||
.\" | |||||
.\"local welcome_entries = menu.welcome.all_entries | |||||
.\"welcome_entries[#welcome_entries + 1] = { | |||||
.\" entry_type = core.MENU_CAROUSEL_ENTRY, | |||||
.\" carousel_id = "unique_boot_entry_name", | |||||
.\" items = {"NO", "YES"}, | |||||
.\" name = function(_, choice, _) | |||||
.\" return "Option: " .. choice | |||||
.\" end, | |||||
.\" func = function(_, _, _) | |||||
.\" loader.setenv("some_envvar", "some_value") | |||||
.\" end, | |||||
.\"} | |||||
.\".Ed | |||||
.\".Pp | |||||
To create a vendor submenu or other vendor menu option, | |||||
override | |||||
.Ic menu.welcome.all_entires.vendor | |||||
like so: | |||||
.Pp | .Pp | ||||
To add another option to the welcome menu: | |||||
.Pp | |||||
.Bd -literal -offset indent -compact | .Bd -literal -offset indent -compact | ||||
local core = require("core") | local core = require("core") | ||||
local menu = require("menu") | local menu = require("menu") | ||||
-- Fill in with vendor specific entries | |||||
local vendor_options = { | |||||
entries = { | |||||
... | |||||
}, | |||||
} | |||||
local welcome_entries = menu.welcome.all_entries | local welcome_entries = menu.welcome.all_entries | ||||
welcome_entries[#welcome_entries + 1] = { | welcome_entries.vendor = { | ||||
entry_type = core.MENU_CAROUSEL_ENTRY, | entry_type = core.MENU_SUBMENU, | ||||
carousel_id = "unique_boot_entry_name", | name = color.highlight("V") .. "endor Options", | ||||
items = {"NO", "YES"}, | submenu = vendor_options, | ||||
name = function(_, choice, _) | alias = {"v", "V"}, | ||||
return "Option: " .. choice | } | ||||
.Ed | |||||
In the above example, | |||||
.Ic vendor_options | |||||
is a local variable that defines the vendor submenu. | |||||
.Pp | |||||
To add an additional option, change the | |||||
.Ic menu.boot_options.entries | |||||
array. | |||||
The following illustrates this concept: | |||||
.Pp | |||||
.Bd -literal -offset indent -compact | |||||
-- This is a silly example that rotates local_option through the values | |||||
-- 0 to 4. local_option would still need to be used elsewhere. | |||||
local local_option = 0 | |||||
-- The `entries` of a menu may either be a table or a function. In this | |||||
-- example we're augmenting a menu that just has a static table, but if we | |||||
-- wanted to be more robust then we would need to instead check the type | |||||
-- of `stock_options` here to determine our next move. | |||||
-- | |||||
-- If `entries` is a table, then the stock menu system won't be changing it | |||||
-- so we can just add our menu option as we do below. | |||||
-- | |||||
-- If `entries` is a function, then we would need to provide a new function to | |||||
-- replace `entries` that does a core.deepCopyTable() of the result and adds | |||||
-- the below item to it. The deep copy is necessary to avoid duplicating our | |||||
-- new menu item and allowing the menu to alter its behavior however it pleases. | |||||
local stock_options = menu.boot_options.entries | |||||
stock_options[#stock_options + 1] = { | |||||
entry_type = core.MENU_ENTRY, | |||||
name = function() | |||||
return color.highlight('L') .. | |||||
"ocal Option : " .. local_option | |||||
end, | end, | ||||
func = function(_, _, _) | func = function() | ||||
loader.setenv("some_envvar", "some_value") | local_option = (local_option + 1) % 5 | ||||
end, | end, | ||||
alias= {"l", "L"} | |||||
} | } | ||||
.Ed | |||||
.Sh SEE ALSO | .Sh SEE ALSO | ||||
.Xr loader.conf 5 , | .Xr loader.conf 5 , | ||||
.Xr core.lua 8 , | .Xr core.lua 8 , | ||||
.Xr loader 8 | .Xr loader 8 | ||||
.Sh HISTORY | .Sh HISTORY | ||||
The | The | ||||
.Nm | .Nm | ||||
file first appeared in | file first appeared in | ||||
.Fx 12.0 . | .Fx 12.0 . | ||||
.Sh AUTHORS | .Sh AUTHORS | ||||
The | The | ||||
.Nm | .Nm | ||||
file was originally written by | file was originally written by | ||||
.An Pedro Souza Aq Mt pedrosouza@FreeBSD.org . | .An Pedro Souza Aq Mt pedrosouza@FreeBSD.org . | ||||
Later work and this manual page was done by | Later work and this manual page was done by | ||||
.An Kyle Evans Aq Mt kevans@FreeBSD.org . | .An Kyle Evans Aq Mt kevans@FreeBSD.org . |
Kyle pointed out in email something that makes me want to retract this entire paragraph.
It's possible, and we should document it.