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