xref: /netbsd-src/external/mit/ctwm/libexec/ctwm_app_menu (revision 469d372e5b024fc3d5e1247e573ebfdbdcca39e7)
1499e9f43Snia#!/bin/sh
2*469d372eSnia#	$NetBSD: ctwm_app_menu,v 1.6 2022/07/24 07:38:15 nia Exp $
3ad94c898Snia#
4e4c090d7Snia# Copyright (c) 2020-2022 The NetBSD Foundation, Inc.
5ad94c898Snia# All rights reserved.
6ad94c898Snia#
7ad94c898Snia# This code is derived from software contributed to The NetBSD Foundation
8ad94c898Snia# by Nia Alarie.
9ad94c898Snia#
10ad94c898Snia# Redistribution and use in source and binary forms, with or without
11ad94c898Snia# modification, are permitted provided that the following conditions
12ad94c898Snia# are met:
13ad94c898Snia# 1. Redistributions of source code must retain the above copyright
14ad94c898Snia#    notice, this list of conditions and the following disclaimer.
15ad94c898Snia# 2. Redistributions in binary form must reproduce the above copyright
16ad94c898Snia#    notice, this list of conditions and the following disclaimer in the
17ad94c898Snia#    documentation and/or other materials provided with the distribution.
18ad94c898Snia#
19ad94c898Snia# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20ad94c898Snia# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21ad94c898Snia# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22ad94c898Snia# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23ad94c898Snia# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24ad94c898Snia# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25ad94c898Snia# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26ad94c898Snia# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27ad94c898Snia# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28ad94c898Snia# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29ad94c898Snia# POSSIBILITY OF SUCH DAMAGE.
30ad94c898Snia#
31b68ad6c3SniaLOCALBASE=$(pkg_info -Q LOCALBASE pkg_install 2>/dev/null || echo /usr/pkg)
32e4c090d7SniaDESKTOPFILES=$(find $LOCALBASE/share/applications -name '*.desktop')
33499e9f43SniaOFS=$IFS
34499e9f43SniaIFS='
35499e9f43Snia'
36e4c090d7Sniado_category()
37e4c090d7Snia{
38e4c090d7Snia	printf 'menu "%s"\n' "$1"
39499e9f43Snia	printf '{\n'
40e4c090d7Snia	printf '\t"%s"\tf.title\n' "$1"
41e4c090d7Snia	for app in $DESKTOPFILES;
42499e9f43Snia	do
43499e9f43Snia		name=""
44499e9f43Snia		exec=""
45499e9f43Snia		terminal=""
46499e9f43Snia		nodisplay=""
47e4c090d7Snia		category=$(grep -m 1 '^Categories=' "$app")
48e4c090d7Snia		case "$category" in
49e4c090d7Snia			*Audio*)
50e4c090d7Snia				if [ "$1" != "Multimedia" ]; then
51e4c090d7Snia					continue
52e4c090d7Snia				fi
53e4c090d7Snia			;;
54e4c090d7Snia			*Development*)
55e4c090d7Snia				if [ "$1" != "Programming" ]; then
56e4c090d7Snia					continue
57e4c090d7Snia				fi
58e4c090d7Snia			;;
59e4c090d7Snia			*Graphics*)
60e4c090d7Snia				if [ "$1" != "Graphics" ]; then
61e4c090d7Snia					continue
62e4c090d7Snia				fi
63e4c090d7Snia			;;
64e4c090d7Snia			*Game*)
65e4c090d7Snia				if [ "$1" != "Games" ]; then
66e4c090d7Snia					continue
67e4c090d7Snia				fi
68e4c090d7Snia			;;
69e4c090d7Snia			*Office*)
70e4c090d7Snia				if [ "$1" != "Office" ]; then
71e4c090d7Snia					continue
72e4c090d7Snia				fi
73e4c090d7Snia			;;
74e4c090d7Snia			*Network*)
75e4c090d7Snia				if [ "$1" != "Internet" ]; then
76e4c090d7Snia					continue
77e4c090d7Snia				fi
78e4c090d7Snia			;;
79e4c090d7Snia			*System*)
80e4c090d7Snia				if [ "$1" != "System" ]; then
81e4c090d7Snia					continue
82e4c090d7Snia				fi
83e4c090d7Snia			;;
84e4c090d7Snia			*Utility*)
85e4c090d7Snia				if [ "$1" != "Accessories" ]; then
86e4c090d7Snia					continue
87e4c090d7Snia				fi
88e4c090d7Snia			;;
89e4c090d7Snia			*)
90e4c090d7Snia				if [ "$1" != "Misc" ]; then
91e4c090d7Snia					continue
92e4c090d7Snia				fi
93e4c090d7Snia			;;
94e4c090d7Snia		esac
95499e9f43Snia		while read line;
96499e9f43Snia		do
97499e9f43Snia			case $line in
98499e9f43Snia				Name=*)
99*469d372eSnia					if [ -z "$name" ];
100499e9f43Snia					then
101*469d372eSnia						name=$(printf '%s' "${line#Name=}" | tr -d '\r"')
102499e9f43Snia					fi
103499e9f43Snia				;;
104499e9f43Snia				Exec=*)
105*469d372eSnia					if [ -z "$exec" ];
106499e9f43Snia					then
107*469d372eSnia						exec=$(printf '%s' "${line#Exec=}" | sed -e 's/ %.*//g' | tr -d '\r')
108fdf6cf63Snia						# results in malformed config file, better way
109fdf6cf63Snia						# to handle this...?
110*469d372eSnia						if printf '%s' "$exec" | grep -q '"'; then
111fdf6cf63Snia							nodisplay="true"
112fdf6cf63Snia						fi
113499e9f43Snia					fi
114499e9f43Snia				;;
115499e9f43Snia				Terminal=true)
116*469d372eSnia					terminal=true
117499e9f43Snia				;;
118499e9f43Snia				OnlyShowIn=*|NoDisplay=true)
119*469d372eSnia					nodisplay=true
120499e9f43Snia				;;
121499e9f43Snia			esac
122499e9f43Snia		done < "$app"
123499e9f43Snia		if [ -n "$nodisplay" ];
124499e9f43Snia		then
125499e9f43Snia			continue
126499e9f43Snia		fi
127499e9f43Snia		if [ -n "$name" -a -n "$exec" ];
128499e9f43Snia		then
129499e9f43Snia			if [ -n "$terminal" ];
130499e9f43Snia			then
131e4c090d7Snia				printf '\t" %s" !"xterm -class UXTerm -e %s &" \n' "$name" "$exec"
132499e9f43Snia			else
133499e9f43Snia				printf '\t" %s" !"%s &" \n' "$name" "$exec"
134499e9f43Snia			fi
135499e9f43Snia		fi
136499e9f43Snia	done | sort
137499e9f43Snia	printf '}\n'
138e4c090d7Snia}
139e4c090d7Snia
140e4c090d7Sniado_category Accessories
141e4c090d7Sniado_category Games
142e4c090d7Sniado_category Graphics
143e4c090d7Sniado_category Internet
144e4c090d7Sniado_category Multimedia
145e4c090d7Sniado_category Office
146e4c090d7Sniado_category Programming
147e4c090d7Sniado_category System
148e4c090d7Sniado_category Misc
149e4c090d7Snia
150499e9f43SniaIFS=$OIFS
151