mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-24 11:29:10 +00:00
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
This commit is contained in:
parent
08c29873bf
commit
7d3a5a3b09
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=253117
@ -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=
|
||||
@ -2057,6 +2087,22 @@ f_dialog_init()
|
||||
f_die 1 "$msg_no_such_file_or_directory" "$pgm" "$failed_dialog"
|
||||
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
|
||||
|
Loading…
Reference in New Issue
Block a user