80 lines
1.3 KiB
Bash
Executable file
80 lines
1.3 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
fname="$(basename "$0")"
|
|
usage()
|
|
{
|
|
echo "$fname <operation>
|
|
Operations:
|
|
gen [bin_file...] Generate a desktop file
|
|
add <desktop_file...> Add desktop file to applications"
|
|
}
|
|
|
|
gen_file()
|
|
{
|
|
unset name
|
|
if [ -n "$1" ]
|
|
then
|
|
file="$1"
|
|
name="$(echo "$1" | sed 's|.[^.]*$||g')"
|
|
[ -z "$name" ] && name="$1"
|
|
else
|
|
name="$(basename "$(pwd)")"
|
|
file=""
|
|
fi
|
|
|
|
desktop_file=$(echo "$name.desktop" | tr '[:upper:]' '[:lower:]')
|
|
[ -f "$desktop_file" ] && { mv "$desktop_file" "$desktop_file.bak" || return $?; }
|
|
|
|
cat > "$desktop_file" << EOF
|
|
[Desktop Entry]
|
|
Name=$name
|
|
Comment=$name
|
|
Type=Application
|
|
Exec=$(pwd)/$file
|
|
Icon=$(pwd)/icon.png
|
|
Categories=Game
|
|
Keywords=keyword;keyword
|
|
EOF
|
|
}
|
|
|
|
add_file()
|
|
{
|
|
if [ -f "$1" ]
|
|
then
|
|
ln -sf "$(pwd)/$1" "$HOME/.local/share/applications"
|
|
else
|
|
echo "'$1' is not a file" > /dev/stderr
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
[ $# -le 0 ] && { usage && exit 1; }
|
|
|
|
case $1 in
|
|
gen)
|
|
if [ $# -gt 1 ]
|
|
then
|
|
shift $((OPTIND))
|
|
for N
|
|
do
|
|
gen_file "$N" || exit $?
|
|
done
|
|
else
|
|
gen_file || exit $?
|
|
fi
|
|
;;
|
|
add)
|
|
if [ $# -gt 1 ]
|
|
then
|
|
shift $((OPTIND))
|
|
for N
|
|
do
|
|
add_file "$N" || exit $?
|
|
done
|
|
else
|
|
echo "$fname add <desktop_file...>" > /dev/stderr
|
|
exit 1
|
|
fi
|
|
;;
|
|
*) usage && exit 1;;
|
|
esac
|