Files
dotfiles/config/fish/functions/__macos_app_icon.fish
Ismo Vuorinen 961efec364 feat: switch to biome, apply formatting, shellcheck (#227)
* feat: switch to biome, apply formatting, shellcheck
* chore: apply cr comments
* chore: few config tweaks, shellcheck hook now py-based
* chore: lint fixes and pr comments
* chore(lint): megalinter, and other fixes

Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-12-17 16:03:29 +02:00

94 lines
2.8 KiB
Fish

# @halostatue/fish-macos/functions/__macos_app_icon.fish:v7.0.1
function __macos_app_icon
argparse --name 'app quit' x/exact h/help 'o/output=' 'w/width=' -- $argv
or return 1
if set --query _flag_help
echo 'Usage: app icon [options] pattern...
Extracts macOS app icons as PNG (see `app find` for how applications
are found).
Options:
-x, --exact Perform exact matches only
-oOUTPUT Output to the file or directory specified
--output OUTPUT Output to the file or directory specified
-wWIDTH Outputs to a maximum of WIDTH pixels
--width WIDTH Outputs to a maximum of WIDTH pixels
-h, --help Show this help'
return 0
end
if test (count $argv) -eq 0
echo >&2 'app icon: Not enough arguments.'
__macos_app_icon --help >&2
return 1
end
if set --query _flag_exact
set --function apps (__macos_app_find --exact $argv)
or return 1
else
set --function apps (__macos_app_find --all $argv)
or return 1
end
set --function app_count (count $apps)
set --function output_path $PWD
if not test -z $_flag_output
if test -e $_flag_output
if test -f $_flag_output
if test $app_count -gt 1
echo >&2 'app icon: More than one application found, but only one output file specified.'
return 1
end
set output_path (dirname $_flag_output)
set output_file (basename $_flag_output)
else if test -d $_flag_output
set output_path $_flag_output
else
echo >&2 'app icon: Output to a non-file or directory specified.'
return 1
end
else
set output_path $_flag_output
mkdir -p $output_path
end
end
for app in $apps
set --local icon $app/Contents/Resources/(
defaults read $app/Contents/Info CFBundleIconFile |
string replace --regex '\.icns$' ''
).icns
set --local name (basename $app .app)_icon.png
set --local tmp $TMPDIR/$name
set --local max_width (sips -g pixelWidth $icon | tail -1 | awk '{ print $2; }')
set --local outfile
set --local width
if test -z $output_file
set outfile $output_path/$name
else
set outfile $output_path/$output_file
end
if test -z $_flag_width
set width $max_width
else if test $_flag_width -gt $max_width
set width $max_width
else
set width $_flag_width
end
sips -s format png --resampleHeightWidthMax $width $icon --out $outfile >/dev/null 2>&1
echo Wrote $app icon to $outfile.
end
end