原文在此:http://joolix.com/2009/01/fvwm-menu-auto-creator/
自动创建缩略图需要convert(安装imagemagick包即可)
看看效果图,还不错哦,会自动根据你的图标主题生成小图标(不过category的图标得自己准备就是了):
代码:
代码: 全选
#!/bin/bash
#Name: Fvwm menu auto creator (FMAC)
#Author: xiooli <xioooli[at]yahoo.com.cn,http://joolix.com>
#Licence: GPLv3
#Version: 09.01.20
Menufile=~/.fvwm/configs/menu_content
Categories=(Network AudioVideo Graphics Office Games Utility Settings System Development Unknow)
Categorieszh=(网络 影音 图像 办公 游戏 附件 设置 系统 开发 未知)
Lang="$(locale|awk -F"." '/LANG=/{gsub("LANG=","",$1);print $1}')"
Fvwmiconspath="`echo ~/.fvwm/icons`"
[ -d "$Fvwmiconspath" ] || mkdir -p "$Fvwmiconspath"
Iconspath=""`echo ~/.icons`" "/usr/share/icons""
#Iconthemedir="Gnome" #在此可以定义使用的图标主题(路径/名称均可,不填就从 ~/.gtkrc-2.0去找)
Iconthemedir="${Iconthemedir:-$(awk -F"=" '/gtk-icon-theme-name=/{gsub("\"","",$2);print $2}' "`echo ~/.gtkrc-2.0`")}"
[ -d "$Iconthemedir" ] || for i in $Iconspath;do
[ -d "$i/$Iconthemedir" ] && Iconthemedir="$i/$Iconthemedir" && break
done
RESIZE () {
convert -resize 24x24 "$1" "$2"
}
ADD_TO_MENU () {
#$1 catnum; $2 iconpath; $3 name; $4 execmd
local menutip cataicon
[ -f $Menufile ] ||cat << EOF >$Menufile
#此文件里面是菜单的具体内容,菜单的样式在./menu_style中定义。
DestroyMenu recreate MenuFvwmRoot
AddToMenu MenuFvwmRoot "FVWM 菜单" Title Top
#MenuCate
EOF
if [ "`grep -w "Menu${Categories[$1]}" "$Menufile"`" ];then
menutip="+ \\\"%$2%$3\\\" Exec exec $4\n#Menu${Categories[$1]}"
[ "`grep -w "$4" "$Menufile"`" ] || \
eval "sed -i \"s/^#Menu${Categories[$1]}/${menutip//\//\\/}/\" \"$Menufile\""
else
menutip="+ \\\"%$Fvwmiconspath/categrories/${Categories[$1]}.png%${Categorieszh[$1]}\\\" Popup Menu${Categories[$1]}\n#MenuCate"
eval "sed -i \"s/^#MenuCate/${menutip//\//\\/}/\" \"$Menufile\""
echo -e "\nDestroyMenu Menu${Categories[$1]}\nAddToMenu Menu${Categories[$1]}\n#Menu${Categories[$1]}" >> "$Menufile"
menutip="+ \\\"%$2%$3\\\" Exec exec $4\n#Menu${Categories[$1]}"
eval "sed -i \"s/^#Menu${Categories[$1]}/${menutip//\//\\/}/\" \"$Menufile\""
fi
}
GET_INFO () { # $1 gives the desktop file name
local j name type execmd icon iconpath cattmp catnum
name="`grep -i "^name\[$Lang\]" $1|sed "s/^.*=//"`"
[ "$name" ] || name="`grep -i "^name=" $1|sed "s/^.*=//"`"
execmd="`grep -i "^exec=" $1|sed "s/^.*=//;s/%.//g"`"
cattmp="`grep -i "Categories=" $1|sed "s/^.*=//"`"
for j in `seq 0 "$((${#Categories[@]}-1))"`;do
[ "${cattmp//${Categories[$j]}/}" != "$cattmp" ] && catnum="$j" && break
done
catnum="${catnum:-$((${#Categories[@]}-1))}"
icon="`grep -i "^icon=" $1|sed "s/^.*=//"`"
if [ -f "$icon" ];then
iconpath="$icon"
[ ! -f "$Fvwmiconspath/$icon" -a "$iconpath" ] && RESIZE "$iconpath" "$Fvwmiconspath/"`basename "$icon"`""
else
[ "${icon/%.png/}" = "$icon" ] && icon="${icon}.png"
iconpath="`find "$Iconthemedir" -type f -name "$icon" -print|sort|tail -n1`"
[ "$iconpath" ] || iconpath="`find "$Iconthemedir" -type f -name "*$icon" -print|sort|tail -n1`"
[ ! -f "$Fvwmiconspath/$icon" -a "$iconpath" ] && RESIZE "$iconpath" "$Fvwmiconspath/$icon"
iconpath="${iconpath:-"$Fvwmiconspath/noicon.png"}"
fi
ADD_TO_MENU "$catnum" "$Fvwmiconspath/`basename "$icon"`" "$name" "$execmd"
}
for k in /usr/share/applications/*.desktop;do
GET_INFO "$k"
done