summaryrefslogtreecommitdiffstats
path: root/usr.sbin
diff options
context:
space:
mode:
Diffstat (limited to 'usr.sbin')
-rw-r--r--usr.sbin/bsdconfig/share/dialog.subr48
1 files changed, 47 insertions, 1 deletions
diff --git a/usr.sbin/bsdconfig/share/dialog.subr b/usr.sbin/bsdconfig/share/dialog.subr
index cbf80fc..b2150d1 100644
--- a/usr.sbin/bsdconfig/share/dialog.subr
+++ b/usr.sbin/bsdconfig/share/dialog.subr
@@ -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.
OpenPOWER on IntegriCloud