#!/bin/sh
# $NetBSD: ctwm_app_menu,v 1.6 2022/07/24 07:38:15 nia Exp $
#
# Copyright (c) 2020-2022 The NetBSD Foundation, Inc.
# All rights reserved.
#
# This code is derived from software contributed to The NetBSD Foundation
# by Nia Alarie.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
LOCALBASE=$(pkg_info -Q LOCALBASE pkg_install 2>/dev/null || echo /usr/pkg)
DESKTOPFILES=$(find $LOCALBASE/share/applications -name '*.desktop')
OFS=$IFS
IFS='
'
do_category()
{
printf 'menu "%s"\n' "$1"
printf '{\n'
printf '\t"%s"\tf.title\n' "$1"
for app in $DESKTOPFILES;
do
name=""
exec=""
terminal=""
nodisplay=""
category=$(grep -m 1 '^Categories=' "$app")
case "$category" in
*Audio*)
if [ "$1" != "Multimedia" ]; then
continue
fi
;;
*Development*)
if [ "$1" != "Programming" ]; then
continue
fi
;;
*Graphics*)
if [ "$1" != "Graphics" ]; then
continue
fi
;;
*Game*)
if [ "$1" != "Games" ]; then
continue
fi
;;
*Office*)
if [ "$1" != "Office" ]; then
continue
fi
;;
*Network*)
if [ "$1" != "Internet" ]; then
continue
fi
;;
*System*)
if [ "$1" != "System" ]; then
continue
fi
;;
*Utility*)
if [ "$1" != "Accessories" ]; then
continue
fi
;;
*)
if [ "$1" != "Misc" ]; then
continue
fi
;;
esac
while read line;
do
case $line in
Name=*)
if [ -z "$name" ];
then
name=$(printf '%s' "${line#Name=}" | tr -d '\r"')
fi
;;
Exec=*)
if [ -z "$exec" ];
then
exec=$(printf '%s' "${line#Exec=}" | sed -e 's/ %.*//g' | tr -d '\r')
# results in malformed config file, better way
# to handle this...?
if printf '%s' "$exec" | grep -q '"'; then
nodisplay="true"
fi
fi
;;
Terminal=true)
terminal=true
;;
OnlyShowIn=*|NoDisplay=true)
nodisplay=true
;;
esac
done < "$app"
if [ -n "$nodisplay" ];
then
continue
fi
if [ -n "$name" -a -n "$exec" ];
then
if [ -n "$terminal" ];
then
printf '\t" %s" !"xterm -class UXTerm -e %s &" \n' "$name" "$exec"
else
printf '\t" %s" !"%s &" \n' "$name" "$exec"
fi
fi
done | sort
printf '}\n'
}
do_category Accessories
do_category Games
do_category Graphics
do_category Internet
do_category Multimedia
do_category Office
do_category Programming
do_category System
do_category Misc
IFS=$OIFS