The branch main has been updated by imp:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=e7ccd5b4187d15cd91697f1f4e12cf40e3ce86c3

commit e7ccd5b4187d15cd91697f1f4e12cf40e3ce86c3
Author:     Warner Losh <[email protected]>
AuthorDate: 2021-03-31 00:35:29 +0000
Commit:     Warner Losh <[email protected]>
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 ,
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to