#!/bin/bash pkglist=/tmp/mpm.list.txt function mt_updatedb() { ( echo "Updating the MiKTeX database..."; $mpm --update-db --verbose; echo "You can now press the close button"; ) | $zenity --text-info --width 500 --height 500 } function mt_menu() { action=$($zenity --list --radiolist --text "Welcome. Choose an action from the list." --column "" --column "Action" install "Install new packages" remove "List installed packages" update "Update the MiKTeX database" updateall "Update all packages") [ $? -ne 0 ] && exit 0 case "$action" in Install*) mt_listinstall ;; List*) mt_listremove ;; *database) mt_updatedb ;; "Update all"*) mt_updateall ;; esac } function mt_makelist() { [ -f $pkglist ] || ( $mpm --list | awk '{print $1 "\t" $4 "\t" $2 "\t" $3}' > $pkglist ) } function mt_listinstall() { string=$($zenity --text "Search packages" --entry) [ $? -ne 0 ] && exit 0 mt_showlist "$string" # Install wanted packages for pkg in $packages; do if echo "$installed" | grep -qs $pkg; then true # already installed, do nothing else mt_install $pkg fi done } function mt_showlist() { mt_makelist [ -n "$1" ] && pattern=$1 || pattern=. grepstr="grep" for pkg in $1; do grepstr="$grepstr -e $pkg" done grepstr="$grepstr $pkglist" if [ $(eval $grepstr | wc -l) == 0 ]; then $zenity --info --text "Package $string not found." packages="" return 0 fi packages=$(eval $grepstr | sed -e 's/^i/true/g' | tr "\t" "\n" | $zenity --list --text "Packages list" --checklist --separator " " --column "Install" --column "Name" --column "Nb of files" --column "Size") [ $? -ne 0 ] && packages="" } function mt_install() { [ -n "$1" ] && pkg="$1" || return 0 ( echo "Installing the $pkg package..."; $mpm --verbose --install $pkg; echo "You can now press the close button"; ) | $zenity --text-info --width 500 --height 500 rm -f $pkglist } function mt_uninstall() { [ -n "$1" ] && pkg="$1" || return 0 ( echo "Uninstalling the $pkg package..."; $mpm --verbose --uninstall $pkg; echo "You can now press the close button"; ) | $zenity --text-info --width 500 --height 500 rm -f $pkglist } function mt_listremove() { mt_makelist installed=$(grep ^i $pkglist | awk '{print $2}') if [ -z "$installed" ]; then $zenity --info --text "No installed package yet." return 0 fi packages=$(grep ^i $pkglist | awk '{print "-\t" $2 "\t" $3 "\t" $4}' | tr "\t" "\n" | $zenity --list --text "Installed packages (check to uninstall)" --checklist --separator " " --column "Remove" --column "Name" --column "Nb of files" --column "Size") # Remove unwanted package for pkg in $packages; do if echo "$installed" | grep -qs $pkg; then mt_uninstall $pkg else true # already uinstalled, do nothing fi done } function mt_updateall() { ( echo "Updating all your packages..."; $mpm --verbose --update; echo "You can now press the close button"; ) | $zenity --text-info --width 500 --height 500 rm -f $pkglist } # # MAIN # # Dependencies zenity=$(which zenity 2>/dev/null) [ -z "$zenity" ] && { echo "Can't find zenity"; exit 1; } zenity="$zenity --title MiKTeX_Package_Manager" mpm=$(which mpm 2>/dev/null) [ -z "$mpm" ] && { $zenity --error "Can't find miktex package manager (mpm)"; exit 1; } rm -f $pkglist #export MIKTEX_REPOSITORY=${HOME}/texmf # Local directory texmfhome=$(kpsewhich --expand-var='$TEXMFHOME') if [ -z "$texmfhome" ]; then TEXMFHOME=${HOME}/texmf else TEXMFHOME=$texmfhome fi export TEXMFHOME [ -d $TEXMFHOME/tex/latex ] || mkdir -p $TEXMFHOME/tex/latex mpm="$mpm --install-root $TEXMFHOME" # First start if [ ! -d ~/.miktex ]; then #initexmf -u --verbose | $zenity --progress --pulsate --auto-close --text "Setting up MiKTeX..." mt_updatedb fi # Main loop while true; do mt_menu done