On 05/21/2012 01:24 AM, hasufell wrote:
> I want support for installing icons into the appropriate directories
> which are under /usr/share/icons/... and not just pixmaps.
>
> proposal attached + diff
>
> This should not break existing ebuilds. Tested a bit and open for review
> now.
next version
# @FUNCTION: _iconins
# @DESCRIPTION:
# function for use in doicon and newicon
_iconins() {
(
# wrap the env here so that the 'insinto' call
# doesn't corrupt the env of the caller
local size dir
local context=apps
local theme=hicolor
while [[ $# -gt 0 ]] ; do
case $1 in
-s|--size)
if [[ ${2%%x*}x${2%%x*} == "$2" ]] ; then
size=${2%%x*}
else
size=${2}
fi
case ${size} in
16|22|24|32|36|48|64|72|96|128|192|256)
size=${size}x${size};;
scalable)
;;
*)
eerror "${size} is an unsupported icon size!"
exit 1;;
esac
shift 2;;
-t|--theme)
theme=${2}
shift 2;;
-c|--context)
context=${2}
shift 2;;
*)
if [[ -z $size ]] ; then
insinto /usr/share/pixmaps
else
insinto
/usr/share/icons/${theme}/${size}/${context}
fi
if [[ $function == doicon ]] ; then
if [[ -f $1 ]] ; then
doins "${1}"
elif [[ -d $1 ]] ; then
shopt -s nullglob
doins "${1}"/*.{png,svg}
shopt -u nullglob
else
eerror "${1} is not a valid
file/directory!"
exit 1
fi
else
break
fi
shift 1;;
esac
done
if [[ $function == newicon ]] ; then
newins "$@"
fi
) || die
}
# @FUNCTION: doicon
# @USAGE: doicon [options] <icons>
# @DESCRIPTION:
# Install icon into the icon directory /usr/share/icons or into
# /usr/share/pixmaps if "--size" is not set.
# This is useful in conjunction with creating desktop/menu files.
#
# @CODE
# options:
# -s, --size
# !!! must specify to install into /usr/share/icons/... !!!
# size of the icon, like 48 or 48x48
# supported icon sizes are:
# 16 22 24 32 36 48 64 72 96 128 192 256 scalable
# -c, --context
# defaults to "apps"
# -t, --theme
# defaults to "hicolor"
#
# icons: list of icons
# @CODE
#
# example 1:
# doicon foobar.png fuqbar.svg
# results in: insinto /usr/share/pixmaps ; doins foobar.png fuqbar.svg
#
# example 2:
# doicon -s 48 foobar.png fuqbar.png
# results in: insinto /usr/share/icons/hicolor/48x48/apps ; doins foobar.png
fuqbar.svg
#
doicon() {
local function=$FUNCNAME
_iconins "$@"
}
# @FUNCTION: newicon
# @USAGE: newicon [options] <icon> <newname>
# @DESCRIPTION:
# Like doicon, install the specified icon as newname.
#
# example 1:
# newicon foobar.png NEWNAME.png
# results in: insinto /usr/share/pixmaps ; newins foobar.png NEWNAME.png
#
# example 2:
# newicon -s 48 foobar.png NEWNAME.png
# results in: insinto /usr/share/icons/hicolor/48x48/apps ; newins
foobar.png NEWNAME.png
#
newicon() {
local function=$FUNCNAME
_iconins "$@"
}