From 54dbf2012b0915ae43ef40b89c3ea2bb03818c2a Mon Sep 17 00:00:00 2001 From: dakkar Date: Sat, 11 May 2013 18:18:54 +0200 Subject: use XDG apps descriptions for launcher --- recipes/TopLine-single | 15 +-------------- scripts/menu.pl | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 14 deletions(-) create mode 100755 scripts/menu.pl diff --git a/recipes/TopLine-single b/recipes/TopLine-single index 5c572dc..f7b5e7a 100644 --- a/recipes/TopLine-single +++ b/recipes/TopLine-single @@ -127,20 +127,7 @@ DestroyModuleConfig ApplicationPanel: * *ApplicationPanel: Padding 1 1 *ApplicationPanel: Frame 0 -# fvwm-crystal.apps {{{2 - -# This creates the distribution-based panel button - defaut distribution -# icon, only menu is opened (no default app on the panel) -PipeRead 'fvwm-crystal.apps --database=$[FVWM_DISTROMENUDIR]/Applications --database=$[FVWM_SYSTEMDIR]/Applications --database=$[FVWM_USERDIR]/Applications --with=/Applications/$[FVWM_DISTROMENUNAME] --search-icons-in=$[FVWM_USERDIR]/icons/$[Icon_Theme]/22x22/categories:$[FVWM_USERDIR]/icons/$[Icon_Theme]/22x22/apps:$[FVWM_SYSTEMDIR]/icons/$[Icon_Theme]/22x22/categories:$[FVWM_SYSTEMDIR]/icons/$[Icon_Theme]/22x22/apps:$[FVWM_DISTROMENUDIR]/icons/$[Icon_Theme]/22x22/categories:$[FVWM_DISTROMENUDIR]/icons/$[Icon_Theme]/22x22/apps --default-file-icon=22x22/apps/default.png --default-dir-icon=22x22/categories/directory.png --min-submenu-length=5 --sort=prio --panel-icons=standard --panel-action1=menu --panel-action2=none --panel-action3=menu --menu-pos=S --menuname-suffix="Panel" --check-execs' - -# This creates the main panel with applications - default app icon is -# shown on the panel, and can be launched using RMB; LMB opens the app -# category menu -PipeRead 'fvwm-crystal.apps --database=$[FVWM_DISTROMENUDIR]/Applications --database=$[FVWM_SYSTEMDIR]/Applications --database=$[FVWM_USERDIR]/Applications --without=/Applications/$[FVWM_DISTROMENUNAME] --search-icons-in=$[FVWM_USERDIR]/icons/$[Icon_Theme]/22x22/categories:$[FVWM_USERDIR]/icons/$[Icon_Theme]/22x22/apps:$[FVWM_SYSTEMDIR]/icons/$[Icon_Theme]/22x22/categories:$[FVWM_SYSTEMDIR]/icons/$[Icon_Theme]/22x22/apps:$[FVWM_DISTROMENUDIR]/icons/$[Icon_Theme]/22x22/categories:$[FVWM_DISTROMENUDIR]/icons/$[Icon_Theme]/22x22/apps --default-file-icon=22x22/apps/default.png --default-dir-icon=22x22/categories/directory.png --min-submenu-length=3 --sort=prio --panel-icons=topapp --panel-action3=menu --panel-action2=none --panel-action1=topapp --menu-pos=S --menuname-suffix="Panel" --check-execs' - -# This creates the menu with applications available under Alt+Win_R -PipeRead 'fvwm-crystal.apps --database=$[FVWM_DISTROMENUDIR]/Applications --database=$[FVWM_SYSTEMDIR]/Applications --database=$[FVWM_USERDIR]/Applications --search-icons-in=$[FVWM_USERDIR]/icons/$[Icon_Theme]/22x22/categories:$[FVWM_USERDIR]/icons/$[Icon_Theme]/22x22/apps:$[FVWM_SYSTEMDIR]/icons/$[Icon_Theme]/22x22/categories:$[FVWM_SYSTEMDIR]/icons/$[Icon_Theme]/22x22/apps:$[FVWM_DISTROMENUDIR]/icons/$[Icon_Theme]/22x22/categories:$[FVWM_DISTROMENUDIR]/icons/$[Icon_Theme]/22x22/apps --default-file-icon=22x22/apps/default.png --default-dir-icon=22x22/categories/directory.png --min-submenu-length=3 --sort=prio --panel-icons=topapp --panel-action3=menu --panel-action2=none --panel-action1=topapp --menu-pos=S --no-panel --check-execs' -# }}}2 +PipeRead $[FVWM_USERDIR]/scripts/menu.pl Module FvwmButtons ApplicationPanel diff --git a/scripts/menu.pl b/scripts/menu.pl new file mode 100755 index 0000000..d9eeaeb --- /dev/null +++ b/scripts/menu.pl @@ -0,0 +1,44 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use 5.016; +use Linux::DesktopFiles; +use List::Util 'first'; +use Data::Printer; + +my $d = Linux::DesktopFiles->new( + with_icons => 1, + full_icon_paths => 1, + skip_svg_icons => 1, + icon_dirs_last => ['/usr/share/icons/gnome'], +); + +my $f = $d->parse_desktop_files(); + +for my $cat (keys %$f) { + my @apps=@{$f->{$cat}}; + my $menu_name='/Applications/'.ucfirst(lc($cat)).'Panel'; + say "DestroyMenu $menu_name"; + say "AddToMenu $menu_name"; + for my $app (@apps) { + next unless $app->{Icon}; + printf qq{+ "%%%s%%\$[gt.%s]" Exec exec "%s"\n}, + $app->{Icon},$app->{Name},$app->{Exec}; + } + say ''; +} + +my $buttons=0; +for my $cat (keys %$f) { + my @apps=@{$f->{$cat}}; + my $app=first { $_->{Icon} } @apps; + next unless $app; + ++$buttons; + + my $menu_name='/Applications/'.ucfirst(lc($cat)).'Panel'; + printf qq{*ApplicationPanel: (1x1, Size 22 22, Icon "%s", \\\n},$app->{Icon}; + printf qq{Action (Mouse 1) Exec exec "%s", \\\n},$app->{Exec}; + printf qq{Action (Mouse 3) Menu %s \$[MenuPosition_S] )\n},$menu_name; +} + +say "SetEnv ApplicationPanelLength $buttons"; -- cgit v1.2.3