ctwmrc: Split the automatically generated pkgsrc applications menu

into categories similarly to MATE and Xfce.
This commit is contained in:
nia 2022-05-09 15:05:18 +00:00
parent 1d9f387037
commit e4c090d717
2 changed files with 121 additions and 45 deletions

View File

@ -1,5 +1,5 @@
#
# $NetBSD: system.ctwmrc,v 1.16 2022/05/09 07:15:25 nia Exp $
# $NetBSD: system.ctwmrc,v 1.17 2022/05/09 15:05:18 nia Exp $
#
# ctwmrc by nia
#
@ -260,16 +260,32 @@ Monochrome
MapWindowBackground "white"
}
syscmd(/usr/X11R7/libexec/ctwm_app_menu)
menu "appmenu"
{
"pkgsrc Applications" f.title
" Accessories" f.menu "Accessories"
" Games" f.menu "Games"
" Graphics" f.menu "Graphics"
" Internet" f.menu "Internet"
" Multimedia" f.menu "Multimedia"
" Office" f.menu "Office"
" Programming" f.menu "Programming"
" System" f.menu "System"
" Misc" f.menu "Misc"
}
menu "deskutils"
{
"Desktop utilities" f.title
" Calculator" !"xcalc &"
" Clipboard" !"xclipboard &"
" Text editor" !"xedit &"
" Manual pages" !"LC_ALL=en_US.ISO8859-1 xman -notopbox &"
"" f.separator
" XEyes" !"xeyes &"
" OpenGL Gears" !"glxgears &"
" Icosahedron" !"ico -sleep 0.016 &"
" Spinning cube" !"ico -sleep 0.016 -obj cube -colors darkorange &"
"" f.separator
" Compositor (shadows)" !"pkill xcompmgr; xcompmgr -c &"
" Compositor (simple)" !"pkill xcompmgr; xcompmgr -n &"
@ -299,7 +315,6 @@ menu "NetBSD"
"NetBSD" f.title
"" f.separator
" Terminal" !"uxterm &"
" Manual pages" !"LC_ALL=en_US.ISO8859-1 xman -notopbox &"
"" f.separator
" Applications" f.menu "appmenu"
" Desktop utilities" f.menu "deskutils"
@ -309,8 +324,6 @@ menu "NetBSD"
" Quit" f.quit
}
syscmd(/usr/X11R7/libexec/ctwm_app_menu)
menu "titleops"
{
"Window" f.title

View File

@ -1,7 +1,7 @@
#!/bin/sh
# $NetBSD: ctwm_app_menu,v 1.3 2021/03/01 15:40:40 nia Exp $
# $NetBSD: ctwm_app_menu,v 1.4 2022/05/09 15:05:18 nia Exp $
#
# Copyright (c) 2020 The NetBSD Foundation, Inc.
# Copyright (c) 2020-2022 The NetBSD Foundation, Inc.
# All rights reserved.
#
# This code is derived from software contributed to The NetBSD Foundation
@ -29,54 +29,117 @@
# 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='
'
printf 'menu "appmenu"\n'
printf '{\n'
printf '\t"Applications"\tf.title\n'
for app in $(find $LOCALBASE/share/applications -name '*.desktop');
do
name=""
exec=""
terminal=""
nodisplay=""
while read line;
do_category()
{
printf 'menu "%s"\n' "$1"
printf '{\n'
printf '\t"%s"\tf.title\n' "$1"
for app in $DESKTOPFILES;
do
case $line in
Name=*)
if ! [ -n "$name" ];
then
name=$(printf '%s' "$line" | cut -c6- | tr -d '\r')
name=""
exec=""
terminal=""
nodisplay=""
category=$(grep -m 1 '^Categories=' "$app")
case "$category" in
*Audio*)
if [ "$1" != "Multimedia" ]; then
continue
fi
;;
Exec=*)
if ! [ -n "$exec" ];
then
exec=$(printf '%s' "$line" | cut -c6- | sed -e 's/ %.*//g' | tr -d '\r')
*Development*)
if [ "$1" != "Programming" ]; then
continue
fi
;;
Terminal=true)
terminal="true"
*Graphics*)
if [ "$1" != "Graphics" ]; then
continue
fi
;;
OnlyShowIn=*|NoDisplay=true)
nodisplay="true"
*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
done < "$app"
if [ -n "$nodisplay" ];
then
continue
fi
if [ -n "$name" -a -n "$exec" ];
then
if [ -n "$terminal" ];
while read line;
do
case $line in
Name=*)
if ! [ -n "$name" ];
then
name=$(printf '%s' "$line" | cut -c6- | tr -d '\r')
fi
;;
Exec=*)
if ! [ -n "$exec" ];
then
exec=$(printf '%s' "$line" | cut -c6- | sed -e 's/ %.*//g' | tr -d '\r')
fi
;;
Terminal=true)
terminal="true"
;;
OnlyShowIn=*|NoDisplay=true)
nodisplay="true"
;;
esac
done < "$app"
if [ -n "$nodisplay" ];
then
printf '\t" %s" !"uxterm %s &" \n' "$name" "$exec"
else
printf '\t" %s" !"%s &" \n' "$name" "$exec"
continue
fi
fi
done | sort
printf '}\n'
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