Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 25 Feb 2018 04:11:08 +0000 (UTC)
From:      Kyle Evans <kevans@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r329946 - head/stand/lua
Message-ID:  <201802250411.w1P4B83s018456@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kevans
Date: Sun Feb 25 04:11:08 2018
New Revision: 329946
URL: https://svnweb.freebsd.org/changeset/base/329946

Log:
  lualoader: Clean up menu handling a little bit
  
  This is driven by an urge to separate out the bits that really only need to
  happen when the menu system starts up. Key points:
  
  - menu.process now does the bulk of menu handling. It retains autoboot
    handling for dubious reasons, and it no longer accepts a 'nil' menu to
    process as 'the default'. Its return value is insignificant.
  - The MENU_SUBMENU handler now returns nothing. If menu.process has exited,
    then we continue processing menu items on the parent menu as expected.
  - menu.run is now the entry point of the menu system. It checks whether the
    menu should be skipped, processes the default menu, then returns.

Modified:
  head/stand/lua/menu.lua

Modified: head/stand/lua/menu.lua
==============================================================================
--- head/stand/lua/menu.lua	Sun Feb 25 03:33:25 2018	(r329945)
+++ head/stand/lua/menu.lua	Sun Feb 25 04:11:08 2018	(r329946)
@@ -81,7 +81,7 @@ menu.handlers = {
 	end,
 	[core.MENU_SUBMENU] = function(_, entry)
 		-- recurse
-		return menu.run(entry.submenu)
+		menu.process(entry.submenu)
 	end,
 	[core.MENU_RETURN] = function(_, entry)
 		-- allow entry to have a function/side effect
@@ -342,29 +342,24 @@ menu.welcome = {
 
 menu.default = menu.welcome
 
-function menu.run(m)
-
-	if menu.skip() then
-		core.autoboot()
-		return false
-	end
-
-	if m == nil then
-		m = menu.default
-	end
-
+function menu.process(m)
+	assert(m ~= nil)
 	-- redraw screen
 	screen.clear()
 	screen.defcursor()
 	local alias_table = drawer.drawscreen(m)
 
-	-- Might return nil, that's ok
+	-- autoboot processing likely belongs better in menu.run, but we want
+	-- to draw the menu once before we do any autoboot prompting.  We also
+	-- collect the alias table from the drawer, which generates the table
+	-- based on all of the 'alias' entries along with effective line numbers
+	-- that each entry is drawn at.  This makes it cleaner to handle here,
+	-- for the time being.
 	local autoboot_key;
 	if m == menu.default then
 		autoboot_key = menu.autoboot()
 	end
-	local cont = true
-	while cont do
+	while true do
 		local key = autoboot_key or io.getchar()
 		autoboot_key = nil
 
@@ -391,12 +386,11 @@ function menu.run(m)
 			-- Get menu handler
 			local handler = menu.handlers[sel_entry.entry_type]
 			if handler ~= nil then
-				-- The handler's return value indicates whether
-				-- we need to exit this menu. An omitted return
-				-- value means "continue" by default.
-				cont = handler(m, sel_entry)
-				if cont == nil then
-					cont = true
+				-- The handler's return value indicates if we
+				-- need to exit this menu. An omitted or true
+				-- return value means to continue.
+				if handler(m, sel_entry) == false then
+					return
 				end
 			end
 			-- if we got an alias key the screen is out of date:
@@ -405,14 +399,18 @@ function menu.run(m)
 			alias_table = drawer.drawscreen(m)
 		end
 	end
+end
 
-	if m == menu.default then
-		screen.defcursor()
-		print("Exiting menu!")
-		return false
+function menu.run()
+	if menu.skip() then
+		core.autoboot()
+		return
 	end
 
-	return true
+	menu.process(menu.default)
+
+	screen.defcursor()
+	print("Exiting menu!")
 end
 
 function menu.skip()



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201802250411.w1P4B83s018456>