Цитирую свой конфиг:
AddToMenu Basic foo title
+ DynamicPopupAction Function MakeBasicMenu
AddToFunc MakeBasicMenu
+ I DestroyMenu recreate Basic
+ I PipeRead 'echo "AddToMenu Basic \'$(date +%d.%m) - $(date +%H:%M)\' Popup Calendar"'
+ I AddToMenu Basic "" Nop
+ I AddToMenu Basic "Gedit" Exec exec gedit
+ I AddToMenu Basic "Qtcreator" Exec exec qtcreator
+ I AddToMenu Basic "Firefox" Exec exec firefox
+ I AddToMenu Basic "Terminal" Exec exec gnome-terminal
+ I AddToMenu Basic "Nautilus" Exec exec nautilus --no-desktop --browser
+ I AddToMenu Basic "Gtkpod" Exec exec gtkpod
+ I AddToMenu Basic "Pidgin" Exec exec pidgin
+ I AddToMenu Basic "" Nop
+ I AddToMenu Basic "Applications" Popup Apps
+ I AddToMenu Basic "Places" Popup Places
+ I AddToMenu Basic "Preferences" Popup Preferences
+ I AddToMenu Basic "" Nop
+ I AddToMenu Basic "Restart" Restart
+ I AddToMenu Basic "Exit" Popup Exit
....
#!/bin/bash
function calRow() {
cal | gawk -v row=$1 '{ if (NR==row) { print $0 } }'
}
cat << EOFMENU
+ '`date +%A,\ \ %B\ %d`'
+ "" Nop
+ '`calRow 2`'
+ '`calRow 3`'
+ '`calRow 4`'
+ '`calRow 5`'
+ '`calRow 6`'
+ '`calRow 7`'
+ '`calRow 8`'
"" Nop
EOFMENU
Не могу сейчас детально объяснить, но вторая строка - пример PipeRead, а само меню - пример динамически воссоздаваемого меню, для корректной работы скриптов с актуальной информацией нужно именно такое, чтобы не получать, например, вывод date на момент первого запуска меню вместо текущего.
После многоточия - скрипт calendar.sh, а кусок меню с календарём будет примерно такой:
DestroyMenu Calendar
AddToMenu Calendar
+ I PipeRead 'sh /path/to/calendar.sh'
Hope this helps.