Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F167955749
D29505.id.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
D29505.id.diff
View Options
diff --git a/stand/lua/menu.lua b/stand/lua/menu.lua
--- a/stand/lua/menu.lua
+++ b/stand/lua/menu.lua
@@ -257,6 +257,7 @@
menu_entries.zpool_checkpoints,
menu_entries.boot_envs,
menu_entries.chainload,
+ menu_entries.vendor,
}
end,
all_entries = {
@@ -400,6 +401,10 @@
end,
alias = {"l", "L"},
},
+ vendor = {
+ entry_type = core.MENU_ENTRY,
+ visible = false,
+ },
},
}
diff --git a/stand/lua/menu.lua.8 b/stand/lua/menu.lua.8
--- a/stand/lua/menu.lua.8
+++ b/stand/lua/menu.lua.8
@@ -26,7 +26,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd February 23, 2018
+.Dd March 31, 2021
.Dt MENU.LUA 8
.Os
.Sh NAME
@@ -204,19 +204,82 @@
local core = require("core")
local menu = require("menu")
+local my_entry = {
+ entry_type = core.MENU_ENTRY,
+ name = "Fancy Boot",
+ func = core.boot,
+},
+
+local stock_entries = menu.welcome.entries
+function menu.welcome.entries()
+ local ents = stock_entries()
+ ents[#ents + 1] = my_entry
+ return ents
+end
+.Ed
+.Pp
+To create a vendor submenu or other vendor menu option,
+override
+.Ic menu.welcome.all_entires.vendor
+like so:
+.Pp
+.Bd -literal -offset indent -compact
+local core = require("core")
+local menu = require("menu")
+
+-- Fill in with vendor specific entries
+local vendor_options = {
+ entries = {
+ ...
+ },
+}
+
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
+welcome_entries.vendor = {
+ entry_type = core.MENU_SUBMENU,
+ name = color.highlight("V") .. "endor Options",
+ submenu = vendor_options,
+ alias = {"v", "V"},
+}
+.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,
- func = function(_, _, _)
- loader.setenv("some_envvar", "some_value")
+ func = function()
+ local_option = (local_option + 1) % 5
end,
+ alias= {"l", "L"}
}
-.Ed
.Sh SEE ALSO
.Xr loader.conf 5 ,
.Xr core.lua 8 ,
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Aug 26, 3:04 PM (19 h, 35 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
37305568
Default Alt Text
D29505.id.diff (3 KB)
Attached To
Mode
D29505: loader: create a generic vendor sub-menu place holder
Attached
Detach File
Event Timeline
Log In to Comment