svn commit: r253117 - head/usr.sbin/bsdconfig/share

Devin Teske dteske at FreeBSD.org
Tue Jul 9 21:53:58 UTC 2013


Author: dteske
Date: Tue Jul  9 21:53:57 2013
New Revision: 253117
URL: http://svnweb.freebsd.org/changeset/base/253117

Log:
  Do two things: First, don't obscure the backtitle. Second, read ~/.dialogrc
  if it exists to determine if use_shadow is true (ON) or false (OFF).
  
  The purpose of determining the value of use_shadow is to know how many lines
  to subtract from the maximum height value in assuring that the backtitle is
  not obscured.
  
  The detriment of obscuring the backtitle is that it provides information
  that is not easily obtained elsewhere. That is the command-line shortcut
  used to access the current menu. As you navigate from one dialog to the
  next, invariably transparently corssing module boundaries, the backtitle
  represents the command-line argument used to get there. Obscuring this
  information with a widget that is too-tall and/or too-wide would see that
  data go unnoticed (leaving few other ways to get that information in the
  same helpful context).
  
  So despite the fact that this change reduces the standard maximum height for
  all widgets, there is a trap-door to prevent this calculation. If you want
  to utilize the full screen height on the terminal (remember, this adjustment
  is not made for Xdialog(1)) you can set $NO_BACKTITLE to 1 (or any non-NULL
  value for that matter) and this calculation will be skipped. You will be
  able to draw a widget that partially obscures the backtitle if-necessary.
  
  MFC after:	1 day

Modified:
  head/usr.sbin/bsdconfig/share/dialog.subr

Modified: head/usr.sbin/bsdconfig/share/dialog.subr
==============================================================================
--- head/usr.sbin/bsdconfig/share/dialog.subr	Tue Jul  9 21:33:12 2013	(r253116)
+++ head/usr.sbin/bsdconfig/share/dialog.subr	Tue Jul  9 21:53:57 2013	(r253117)
@@ -292,7 +292,31 @@ f_dialog_max_size()
 		__max_size=$( stty size 2> /dev/null ) # usually "24 80"
 		: ${__max_size:=$DEFAULT_TERMINAL_SIZE}
 	fi
-	[ "$__var_height" ] && setvar "$__var_height" "${__max_size%%[$IFS]*}"
+	if [ "$__var_height" ]; then
+		local __height="${__max_size%%[$IFS]*}"
+		#
+		# If we're not using Xdialog(1), we should assume that $DIALOG
+		# will render --backtitle behind the widget. In such a case, we
+		# should prevent the widget from obscuring the backtitle (unless
+		# $NO_BACKTITLE is set and non-NULL, allowing a trap-door).
+		#
+		if [ ! "$USE_XDIALOG" ] && [ ! "$NO_BACKTITLE" ]; then
+			#
+			# If use_shadow (in ~/.dialogrc) is OFF, we need to
+			# subtract 4, otherwise 5. However, don't check this
+			# every time, rely on an initialization variable set
+			# by f_dialog_init().
+			#
+			local __adjust=5
+			[ "$NO_SHADOW" ] && __adjust=4
+
+			# Don't adjust the height if already too small (allowing
+			# obscured backtitle for small values of __height).
+			[ ${__height:-0} -gt 11 ] &&
+				__height=$(( $__height - $__adjust ))
+		fi
+		setvar "$__var_height" "$__height"
+	fi
 	[ "$__var_width" ] && setvar "$__var_width" "${__max_size##*[$IFS]}"
 }
 
@@ -1999,6 +2023,12 @@ f_dialog_menutag2index_with_help()
 # 	              that (while running as root) sudo(8) authentication is
 # 	              required to proceed.
 #
+# Also reads ~/.dialogrc for the following information:
+#
+# 	NO_SHADOW     Either NULL or Non-NULL. If use_shadow is OFF (case-
+# 	              insensitive) in ~/.dialogrc this is set to "1" (otherwise
+# 	              unset).
+#
 f_dialog_init()
 {
 	DIALOG_SELF_INITIALIZE=
@@ -2058,6 +2088,22 @@ f_dialog_init()
 	fi
 
 	#
+	# Read ~/.dialogrc (unless using Xdialog(1)) for properties
+	#
+	if [ -f ~/.dialogrc ]; then
+		eval "$(
+			awk -v param=use_shadow -v expect=OFF \
+			    -v set="NO_SHADOW=1" '
+			!/^[[:space:]]*(#|$)/ && \
+			tolower($1) ~ "^"param"(=|$)" && \
+			/[^#]*=/ {
+				sub(/^[^=]*=[[:space:]]*/, "")
+				if ( toupper($1) == expect ) print set";"
+			}' ~/.dialogrc
+		)"
+	fi
+
+	#
 	# If we're already running as root but we got there by way of sudo(8)
 	# and we have X11, we should merge the xauth(1) credentials from our
 	# original user.


More information about the svn-src-all mailing list