Date: Thu, 1 Apr 2021 04:04:56 GMT From: Warner Losh <imp@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: git: e7ccd5b4187d - main - loader: create a generic vendor sub-menu place holder Message-ID: <202104010404.13144ubt007065@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch main has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=e7ccd5b4187d15cd91697f1f4e12cf40e3ce86c3 commit e7ccd5b4187d15cd91697f1f4e12cf40e3ce86c3 Author: Warner Losh <imp@FreeBSD.org> AuthorDate: 2021-03-31 00:35:29 +0000 Commit: Warner Losh <imp@FreeBSD.org> CommitDate: 2021-04-01 04:02:02 +0000 loader: create a generic vendor sub-menu place holder Add a dummy vendor menu entry on the main welcome menu. Vendors can override this in their local.lua file to create whatever sub-menu they need for their products. Also fix the adding a 'welcome' entry as well based on a suggestion from Kyle. Silly option menu code also from Kyle. They seem to work for me, but any transcription error is likely mine. Reviewed by: kevans@ (the vendor stuff) --- stand/lua/menu.lua | 5 ++++ stand/lua/menu.lua.8 | 83 +++++++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 78 insertions(+), 10 deletions(-) diff --git a/stand/lua/menu.lua b/stand/lua/menu.lua index f7ca0a486ee4..8bc614378d5b 100644 --- a/stand/lua/menu.lua +++ b/stand/lua/menu.lua @@ -257,6 +257,7 @@ menu.welcome = { menu_entries.zpool_checkpoints, menu_entries.boot_envs, menu_entries.chainload, + menu_entries.vendor, } end, all_entries = { @@ -400,6 +401,10 @@ menu.welcome = { 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 index 4358981d4755..82863791903d 100644 --- 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 @@ To add another option to the welcome menu: 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 ,
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202104010404.13144ubt007065>