App-nup
view release on metacpan or search on metacpan
}
# Check bash version (4.3+ required for getoptlong.sh)
if ((BASH_VERSINFO[0] < 4 || (BASH_VERSINFO[0] == 4 && BASH_VERSINFO[1] < 3))); then
die "bash 4.3+ required (found $BASH_VERSION)"
fi
##############################################################################
# Option definitions
##############################################################################
define USAGE <<END
nup - n-up, multi-column paged output for commands and files
Usage: $myname [ options ] file ...
$myname -e [ options ] command ...
END
declare -a up_opts=(--filename) # up.pm options
# Default command aliases (command and options)
declare -A alias=(
[bat]="bat --style=plain --color=always"
[batcat]="batcat --style=plain --color=always"
[rg]="rg --color=always"
[tree]="tree -C"
)
declare -A OPTS=(
[&REQUIRE]=0.7 [&USAGE]="$USAGE" [&PERMUTE]= [&DELIM]=
[ help | h ! # show help ]=
[ version | ! # show version ]=
[ debug | d # debug mode ]=
[ dryrun | n # dry-run mode ]=
[ exec | e # execute command ]=
[ alias | % # command aliases ]=
[ textconv | : # textconv ]=pdf,docx,docm,pptx,pptm,xlsx,xlsm,jpg,jpeg
[ pager | :! # pager command ]=
[ parallel | V >up_opts # parallel view ]=
[ document | D >up_opts # document mode ]=
[ paginate | # paginate mode ]=1
[ fold | F ! # no paginate ]=
[auto-paginate | A >up_opts # auto paginate ]=
[ filename | H >up_opts # show file headers ]=
[ grid | G :>up_opts # grid layout ]=
[ pane | C :>up_opts # number of columns ]=
[ row | R :>up_opts # number of rows ]=
[ page | P :>up_opts # page height ]=
[ pane-width | S :>up_opts # pane width ]=
[ border-style | bs :>up_opts # border style ]=
[ line-style | ls :>up_opts # line style ]=
[ colormap | cm :>up_opts # color mapping ]=
[ page-number | # page number ]=1
[ white-board | >up_opts # black on white ]=
[ black-board | >up_opts # white on black ]=
[ green-board | >up_opts # white on green ]=
[ slate-board | >up_opts # white on slate ]=
)
##############################################################################
# Option callbacks
##############################################################################
# -h callback: show help from POD
help() {
sed -E \
-e '/^$/N' \
-e 's/^(\n*)=head[0-9]* */\1/' \
-e '/^\n*[#=]/d' \
-e '/Version/q' \
<<< "$pod"
exit 0
}
# --version callback: show version
version() {
echo "$my_version"
exit 0
}
# --fold/-F callback: disable paginate; --no-fold re-enables
fold() {
[[ ${fold:-} ]] && paginate= || paginate=1
}
# --pager callback: handle pager option
pager() {
if [[ -z $2 ]]; then
up_opts+=("--no-pager")
else
up_opts+=("--pager=$2")
fi
}
##############################################################################
# Parse options
##############################################################################
. getoptlong.sh OPTS "$@"
##############################################################################
# Main
##############################################################################
# --no-paginate or --fold/-F: disable page mode
[[ -z ${paginate:-} ]] && up_opts+=(--no-paginate)
# --page-number: show page number on border
[[ ${page_number:-} ]] && up_opts+=(--label S=" %n ")
# Set defaults for less environment
export LESS="${LESS:--R}"
export LESSANSIENDCHARS="${LESSANSIENDCHARS:-mK}"
# Show help if no arguments and stdin is a terminal
if (( $# == 0 )) && [[ -t 0 ]]; then
help
fi
# Determine mode: command or file view
# Command mode if: -e specified, OR ($1 is not a file AND $1 is a command)
( run in 2.941 seconds using v1.01-cache-2.11-cpan-140bd7fdf52 )