Skip to content

Instantly share code, notes, and snippets.

@pmlandwehr
Created June 19, 2020 17:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pmlandwehr/a8a7425a2bb6ed646381076d8b230aed to your computer and use it in GitHub Desktop.
Save pmlandwehr/a8a7425a2bb6ed646381076d8b230aed to your computer and use it in GitHub Desktop.
Pad strings in fish
function string-pad --description 'Pad strings to a particular length using a character'
set -l options
set -a options "h/help"
set -a options "l/left"
set -a options "r/right"
set -a options "m/max=!_validate_int"
set -a options "n/count=!_validate_int"
set -a options "c/char="
argparse --name="string-pad" $options -- $argv
or return
if set -q _flag_h
echo "string-pad [-l/--left] [-r/--right] [-n/--count|-m/max <int>] [-c/--char <char>] [<str> [<str>...]]"
return
end
if test \( -z "$_flag_n" -a -z "$_flag_m" \)
set _flag_n 0
else if test \( -n "$_flag_n" -a -n "$_flag_m" \)
set_color red; echo "Must provide either -n/--count or -m/--max."; set_color normal
return
end
if ! set -q _flag_c; set _flag_c " "; end
if test (string length $_flag_c) -gt 1
set_color red; echo "-c/--char must be a single character: $_flag_c"; set_color normal
return
end
if test \( -z "$_flag_l" -a -z "$_flag_r" \)
set _flag_l "-l"
end
if set -q _flag_n
if set -q _flag_l
set prefix (string repeat -n $_flag_n $_flag_c)
end
if set -q _flag_r
set suffix (string repeat -n $_flag_n $_flag_c)
end
for arg in $argv
printf "%s%s%s\n" $prefix $arg $suffix
end
else
for arg in $argv
set -l delta (math $_flag_m - (string length $arg))
if test $delta -le 0
set _left_len 0
set _right_len 0
else if test \( -n "$_flag_l" -a -n "$_flag_r" \)
set _left_len (math -s 0 $delta / 2)
set _right_len (math $delta - $_left_len)
else if set -q _flag_r
set _left_len 0
set _right_len $delta
else
set _left_len $delta
set _right_len 0
end
set -l prefix (string repeat -n $_left_len $_flag_c)
set -l suffix (string repeat -n $_right_len $_flag_c)
printf "%s%s%s\n" $prefix $arg $suffix
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment