Site perso : Emmanuel Branlard

Subsections

18. Shell scripts

18.1 exaileplaylist2rhythmox

#!/usr/bin/python

import os, string

h = open( 'playlists.xml', 'w' )

h.write('<?xml version="1.0"?>\n')
h.write('<rhythmdb-playlists>\n')
h.write('  <playlist name="Play Queue" type="queue"/>\n')
h.write('  <playlist name="My Top Rated" type="automatic" sort-key="Rating" sort-direction="1">\n')
h.write('    <conjunction>\n')
h.write('      <equals prop="type">song</equals>\n')
h.write('      <subquery>\n')
h.write('        <conjunction>\n')
h.write('          <greater prop="rating">4.000000</greater>\n')
h.write('        </conjunction>\n')
h.write('      </subquery>\n')
h.write('    </conjunction>\n')
h.write('  </playlist>\n')
h.write('  <playlist name="Recently Added" type="automatic" sort-key="Artist" sort-direction="0">\n')
h.write('    <conjunction>\n')
h.write('      <equals prop="type">song</equals>\n')
h.write('      <subquery>\n')
h.write('        <conjunction>\n')
h.write('          <current-time-within prop="first-seen">604800</current-time-within>\n')
h.write('        </conjunction>\n')
h.write('      </subquery>\n')
h.write('    </conjunction>\n')
h.write('  </playlist>\n')
h.write('  <playlist name="Recently Played" type="automatic" sort-key="Artist" sort-direction="1">\n')
h.write('    <conjunction>\n')
h.write('      <equals prop="type">song</equals>\n')
h.write('      <subquery>\n')
h.write('        <conjunction>\n')
h.write('          <current-time-within prop="last-played">604800</current-time-within>\n')
h.write('        </conjunction>\n')
h.write('      </subquery>\n')
h.write('    </conjunction>\n')
h.write('  </playlist>\n')

if not os.path.exists('playlists'):
    os.makedirs('playlists')
os.chdir('playlists')
a = open( 'order_file', 'r' )
for b in a.xreadlines():
    if b[-1:] == '\n':
        b = b[:-1]
    if b[-1:] == '\r':
        b = b[:-1]
    if b == 'EOF':
        break
    c = open( b+'.playlist', 'r' )
    b = string.replace( b, '&', '&amp;' )
    h.write('  <playlist name="'+b+'" type="static">\n')
    for line in c.xreadlines():
        if line[-1:] == '\n':
            line = line[:-1]
        if line[-1:] == '\r':
            line = line[:-1]
        if line != 'EOF':
            if line.find('\t') != -1:
                line = line[:line.find('\t')]
            line = string.replace( line, '&', '&amp;' )
            h.write('    <location>'+line+'</location>\n')
        else:
            break
    c.close()
    h.write('  </playlist>\n')
a.close()
h.write('</rhythmdb-playlists>\n')
h.close()

18.2 cnx-vjk.expect

#! /usr/bin/expect -f
set force_conservative 1;

set timeout 2
spawn ssh -T -l LOGIN HOST
expect "password: $"
send "MOTDEPASSE\n"
interact

18.3 backupSyst

#!/bin/sh


#initialization
HOME=/home/manu
folder=backup_data/
mydate=$(date +%Y-%m-%d-%H%M)
folder=$HOME"/Config/"$folder$mydate
mkdir -p $folder
cd $folder
echo $folder

#creating arborescence
mkdir -p home/config
mkdir -p home/local/share/rhythmbox
mkdir -p home/mozilla/firefox/
mkdir -p etc/network
mkdir -p log
mkdir etc/event.d
mkdir etc/grub.d/
mkdir etc/cron.daily/
mkdir etc/cron.weekly/
mkdir etc/X11
mkdir etc/apt
mkdir etc/texmf
mkdir etc/samba
mkdir etc/default
mkdir etc/ssh
mkdir etc/apache2
mkdir etc/logrotate.d
mkdir -p lib/lsb/
mkdir etc/proftpd
mkdir etc/fail2ban
#mkdir -p etc/gdm/Init/


# liste des paquets
dpkg --get-selections > liste-paquets.dpkg



#home folder
cp $HOME/Config/profiles/bash* home/
cp $HOME/.vimrc home/vimrc
cp -r $HOME/.vim/ home/vim
cp $HOME/.xinitrc home/xinitrc
cp $HOME/.Xdefaults home/Xdefaults
cp $HOME/.conkyrc home/conkyrc
cp $HOME/.asoundrc home/asoundrc
cp -r $HOME/.config/* home/config/
cp $HOME/.local/share/rhythmbox/*.xml home/local/share/rhythmbox/
#cp -r $HOME/.mozilla/firefox home/mozilla/firefox



#system
cp /etc/fstab etc/fstab
cp /etc/modules etc/modules
#cp /etc/event.d/tty1 etc/event.d/tty1
cp /etc/issue etc/issue
cp /etc/inittab etc/
cp /etc/sudoers etc
cp /etc/group etc/
cp /etc/passwd etc/passwd
cp /etc/cron.daily/* etc/cron.daily/
cp /etc/cron.weekly/* etc/cron.weekly/
cp /etc/logrotate.conf etc/logrotate.conf
cp /etc/logrotate.d/rsyslog etc/logrotate.d/rsyslog
cp /etc/network/interfaces etc/network/interfaces
cp /etc/X11/xorg.conf  etc/X11/xorg.conf
cp /etc/apt/sources.list etc/apt/sources.list
cp /etc/apt/preferences etc/apt/preferences
#cp /boot/grub/menu.lst  menu.lst
cp /boot/grub/grub.cfg grub.cfg
cp /etc/grub.d/* etc/grub.d/
cp /etc/sysctl.conf etc/
cp /etc/default/rcS etc/default/rcS
cp /lib/lsb/init-functions lib/lsb/


#programs
cp /etc/latex2html.conf etc/
cp /etc/texmf/texmf.cnf  etc/texmf/texmf.cnf
cp /etc/samba/smb.conf etc/samba/
cp -R /etc/apache2/* etc/apache2/
cp /etc/ssh/sshd_config etc/ssh/
#cp /etc/gdm/Init/Default etc/gdm/Init/Default
cp /etc/proftpd/proftpd.conf etc/proftpd/
cp /etc/proftpd/msg/* etc/proftpd
cp /etc/fail2ban/jail.local etc/fail2ban



#processus init
cp -R /etc/init.d etc/init.d
cp -R /etc/rc0.d etc/rc0.d
cp -R /etc/rc1.d etc/rc1.d
cp -R /etc/rc2.d etc/rc2.d
cp -R /etc/rc3.d etc/rc3.d
cp -R /etc/rc4.d etc/rc4.d
cp -R /etc/rc5.d etc/rc5.d
cp -R /etc/rc6.d etc/rc6.d
cp -R /etc/rcS.d etc/rcS.d

#logs
cp /var/log/dmesg log/dmesg
cp /var/log/daemon.log log/daemon.log
cp /var/log/messages log/messages
cp /var/log/syslog log/syslog
cp /var/log/kern.log log/kern.log
cp /var/log/aptitude log/


#Giving rights to all files
cd ../../
chown -R manu:manu $folder

18.4 RisoUnMount

#!/bin/bash
#############################################################
# Default script:
#############################################################
umount /mnt/R-home/
umount /mnt/S-group/
umount /mnt/T-apps/
umount /mnt/U-garb/

18.5 showTag

#!/usr/bin/python

#############################################################
# Show Tag
#############################################################
# Description: notify audio tags
# Written by : Emmanuel Branlard
# Date : March 2011
# Dependencies : 
# License : Feel free to modify and adapt it
# Note : 
#############################################################
import mutagen 
import optparse
import subprocess
parser = optparse.OptionParser()
(options, args) = parser.parse_args()

def getKey(audio,key):
        try:
                f=audio[key].pop().encode('utf-8')
        except KeyError:
                print "caught"
                f=""
        return(f)

audio=mutagen.File(args[0], easy=True)
artist=getKey(audio,'artist')
album=getKey(audio,'album')
songtitle=getKey(audio,'title')
genre=getKey(audio,'genre')
year=getKey(audio,'date')


print artist
print songtitle
print album
print genre
print year 
subprocess.call(["notify-send",artist+"\n"+songtitle+"\n"+album+"\n"+genre+"\n"+year])

18.6 syncStorage

#!/bin/sh
# Sould be run as user

#variables
OPTS="-av"
DEST=/media/Storage

##############
# DATAWIN
##############
SRC=/media/DataWin

#without deletion
rsync $OPTS $SRC/Etudes/ $DEST/Etudes/
rsync $OPTS $SRC/Images/ $DEST/Images/

#with delete propagation
rsync $OPTS --delete $SRC/Config/ $DEST/Config/
rsync $OPTS --delete $SRC/Data/ $DEST/Data/
rsync $OPTS --delete $SRC/Informatique/ $DEST/Informatique/
rsync $OPTS --delete $SRC/Musique/ $DEST/Musique/
rsync $OPTS --delete "$SRC/Musique - Data/" "$DEST/Musique - Data/"
rsync $OPTS --delete "$SRC/Musique Classique/" "$DEST/Musique Classique/"
rsync $OPTS --delete $SRC/Projets/ $DEST/Projets/
rsync $OPTS --delete $SRC/Work/ $DEST/Work/





##############
# Linux
##############
SRC=/home/manu

#without deletion
rsync $OPTS $SRC/Sites/ $DEST/Sites/

#with delete propagation
rsync $OPTS --delete $SRC/Config/ "$DEST/Config - Linux/"

18.7 audioInfo

#!/bin/bash
#############################################################
# audioInfo: prints audio info, metadata, bit rate
#############################################################
# Description :
# Written by : Emmanuel Branlard
# Date : March 2011
# Dependencies : 
# License : Feel free to modify and adapt it
# Note :
#############################################################
Duration=`ffmpeg -i "$@" 2>&1 |grep Duration | awk -F":|," '{print $3":"int($4)}'` 
MetaData=`ffmpeg -i "$@" 2>&1 |grep -E " artist |title |album |genre|TYER"|awk -F: '{print "   "$2}'`       
 
Stream=`ffmpeg -i "$@" 2>&1 |grep Stream | awk -F, '{print $1"\n    "$2 $3 $4"\n    "$5}'`

Bitrate=`ffmpeg -i "$@" 2>&1|awk '/bitrate:/ {print $6" "$7}'`



#xargs -0
echo $Duration
echo $Stream
echo $MetaData
Out="MetaData:
$MetaData
-----------------------------------------
Length: $Duration
Bitrate:  $Bitrate
-----------------------------------------
Audio:
$Stream"
notify-send -t 3000 -i gnome-volume-control "$Out"

18.8 shrinkFig2

#!/bin/sh
#############################################################
# Shrink Fig
#############################################################
# Description : Shrink Figure to 60%
# Written by : Emmanuel Branlard
# Date : March 2011
# Dependencies : image magick
# License : Feel free to modify and adapt it
#############################################################
for i 
do
        mogrify -resize 60% $i
done

18.9 ifort-setup

#!/bin/bash

source /opt/intel/Compiler/11.1/069/bin/ifortvars.sh  ia32

18.10 texclean

#! /bin/bash
rm *.aux
rm *.toc
rm *.log
rm *.bbl
rm *.out
rm *.cb
rm *.blg
rm *.lot
rm *.lof
rm *.tps
rm *.maf
rm *.ilg
rm *.glo
rm *.mtc*
rm *.ptc*
rm *.bmt
rm *.idx
rm *.ind
rm *.snm
rm *.nav
rm *.cb2

18.11 sendit

#!/bin/sh
#############################################################
# Send It
#############################################################
# Description : Send file by email
# Written by : Emmanuel Branlard
# Date : October 2011
# Dependencies : mutt
# License : Feel free to modify and adapt it
#############################################################
#notify-send "Email to:$a $1"

export mydate=$(date +%Y-%m-%d-%H%M-%S);
xterm -geometry 30x2+550+400 +sb -e 'echo "email address";read a;echo $a>/tmp/sendit$mydate.tmp';
#xterm -geometry 30x2+550+400 +sb -e 'a=EMAIL@gmail.com;mydate=$(date +%Y-%m-%d-%H%M-%S); echo $a>/tmp/sendit$mydate.tmp;a';

to=`cat /tmp/sendit$mydate.tmp`;

notify-send "$to

$@" -i mail-attachment -t 3000;
echo "Hi
I attached $# File(s) to this email. 
Best,
Emmanuel




Sent with my geeky shell script " | mutt -a "$@" -s "Sent file(s) ($1)" -- $to ;

rm /tmp/sendit$mydate.tmp
notify-send "File sent!
$@" -t 3000 -i mail-forward

18.12 topdf

#! /bin/bash

if [ $# -eq 0 ]
then 
	Files=*.png
        Files="$Files"
else
	l=$@
        Buff=""
        First=''
        for i in $l
        do
            if [ ! `echo $i |grep -E "[.][a-zA-Z]{3,4}$"` = "" ] 
            then
                    File="$Buff $i"
                    Buff=""
                    First=""
                    File2=`echo $File|tr ' ' '_'`
                    #
                    if [ $File != $File2 ]
                    then
                            mv "$File" $File2
                    fi
                    #
                    Files="$Files $File2"
           else
                if [ -z ${First} ] 
                then
                        Buff="$i"
                        First="no"
                else
                        Buff="$Buff $i"
                fi
           fi
           
        done
#        echo $Files
fi
FileOut=`echo $Files|grep -Eo "^[a-Z0-9\_ -]*[.]"|tr '_' ' '`"pdf"

echo $FileOut

#convert $Files "$FileOut"
convert -page A4 -units PixelsPerInch -normalize -density 100 $Files "$FileOut"

18.13 pdfFind

#! /bin/bash
echo "Looking for "$1

SAVEIFS=$IFS
IFS=$(echo -en "\n\b")


for i in `find -name "*.pdf" -printf '%h/%f\n'  2> /dev/null`
do
	echo "----------------------------"
	echo "$i";
	echo "----------------------------" 
	pdftotext $i - |grep --color=always $1
#	 strings "$i"  |grep $1
done; 
IFS=$SAVEIFS

18.14 GETAPTKEY

#!/bin/sh
# @(#) TITLE MESSAGE: Recuperation des cles GPG et exportation vers apt
# @(#) Feilong version 05/01/2009
# @(#) Syntaxe: GETKEY KEY
# @(#) MACHINE VM DEBIAN lenny
if [ $(id -u) != "0" ]; then
echo “Seul root peut executer ce shell” >&2
exit 1
fi
if [ $# -ne 1 ]; then
echo “syntaxe : GETKEY <votre cle>”
exit 1
fi
gpg –keyserver hkp://wwwkeys.eu.pgp.net –recv-keys $1
if [ $? -ne 0 ]; then
echo ” Une erreur est survenu pendant le téléchargement de la clé”
exit 1
fi
gpg –armor –export $1 | apt-key add -
if [ $? -ne 0 ]; then
echo ” Une erreur est survenu pendant l’export de la clé vers apt”
exit 1
fi
apt-get update

18.15 shrinkFig

#!/bin/sh
#############################################################
# Shrink Fig
#############################################################
# Description : Shrink Figure to 40%
# Written by : Emmanuel Branlard
# Date : March 2011
# Dependencies : image magick
# License : Feel free to modify and adapt it
#############################################################
for i 
do
        mogrify -resize 40% $i
done

18.16 svg2latex.py

#!/usr/bin/python
'''
Copyright (C) 2008,2009,2010 Richard Henwood, rjhenwood@yahoo.co.uk

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA



------------------------------------------
'''

# We will use inex module with predefined effect base class.
import string

from optparse import OptionParser
from xml.dom.minidom import parse, parseString, Node
from string import Template

import pprint
import re
import sys
import os.path
import math
import subprocess
import tempfile
import shutil
import platform

class svg2latex():
    """ Constructor.
    Defines "--what" option of a script."""

    myHorizontalFudgePX = -8  # we have to knudge text over a bit to get it to align horizontally.
    #flow_x_offset = -3.47433
    #flow_y_offset = 9.4698369
    flow_x_offset = 0.0
    flow_y_offset = 0.0

#####################################################################
    def svgfile_handler(option, opt, value, parser):
        print ("option = %s" % option)
        print ("opt = %s" % opt)
        print ("value = %s" % value)
        print ("parser = %s" % parser)

    def __init__(self):
        # Call base class construtor.
        
        usage = """Convert svg to latex picture format and use 
Inkscape to generate a pdf for all the bits 
which are not text. 

-f [--svgfile]          <filename> svgfilename.
-l [--latexoutfile]     <filename> name for latex output file.
-o                      overwrite the output files automatically.
-e   			create an eps file instead of pdf.

A pdf file is also created. This is given the same name as the 
latex outfile with the extension 'pdf'. This file is generated by 
Inkscape, which must be on the path for this script to work.

"""

        parser = OptionParser(usage)
        parser.add_option("-f", "--svgfile", dest="svgfilename",
                help="svg input file")
        parser.add_option("-l", "--latexoutfile", dest="latexfilename",
                help="latex file to output to")
        parser.add_option("-o", "--overwrite", dest="overwrite",
                action="store_true",
                help="automatically overwrite output")
        parser.add_option("-e", "--epsoutput", dest="epsoutput",
                action="store_true",
                help="make eps instead of pdf")

        (options, args) = parser.parse_args()
    
        if options.latexfilename is None:
            print ("--latexoutfile not specified")
            sys.exit(usage)

        self.latexfilename = options.latexfilename
        latexhead, latextail = os.path.split(self.latexfilename)
        if (latexhead is not None and latexhead is not ""):
            latexhead += os.sep
        latexroot, latexext = os.path.splitext(latextail)

        self.epsfileoutput = None
        if options.epsoutput is None:
            self.lateximagefile = latexhead + latexroot + '.pdf' 
        else:
            self.lateximagefile = latexhead + latexroot + '.eps' 
            self.epsfileoutput = 1

        self.latexsvgtmp = tempfile.NamedTemporaryFile(delete=False)  

        if options.svgfilename is None:
            print ("--svgfile not specified")
            sys.exit(usage)
        if options.overwrite is None:
            self.autooverwrite = 0 
        else:
            self.autooverwrite = options.overwrite
        
        self.svgfilename = options.svgfilename

        print (" svg filename = %s" % self.svgfilename)
        print (" latex image file = " + self.lateximagefile)
        print (" latex input file = " + self.latexfilename)

        self.origsvg = parse(self.svgfilename) 
        self.notextsvg = parse(self.svgfilename) 

        # these namespaces are useful.
        #  xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
        #  xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
        #  xmlns="http://www.w3.org/2000/svg"

#####################################################################

    def tidyup(self):
        os.unlink(self.latexsvgtmp.name)

#####################################################################

    def makePDF(self):

        # first, make a copy of the svg with all the text removed.
        for element in self.notextsvg.getElementsByTagName("flowRoot"):
            element.parentNode.removeChild(element)

        for element in self.notextsvg.getElementsByTagName("text"):
            element.parentNode.removeChild(element)

        # and save it in a temp file
        self.notextsvg.writexml(self.latexsvgtmp)
        self.latexsvgtmp.close()	

        # now call inkscape with this file to produce a
        # pdf version.
        # TODO: this is a hard dependency on inkscape which might 
        # be nice to replace with cairo at some later
        # date...

        temppdffile = tempfile.NamedTemporaryFile(delete=False)  
        temppdffile.close()
        
        exportcmd = "--export-eps"
        if self.epsfileoutput is None:
            exportcmd = " --export-pdf "
            
        inkscapecmd = "inkscape"
        if platform.system() == 'Windows':
            inkscapecmd = "C:\\Program Files\\Inkscape\\inkscape.exe"
        sys.stderr.write(inkscapecmd+exportcmd+temppdffile.name+"--file"+self.latexsvgtmp.name+"\n")
        subprocess.call([inkscapecmd,exportcmd, temppdffile.name, " --file ", self.latexsvgtmp.name])
        #print "copying file to: " + self.lateximagefile
        shutil.copy(temppdffile.name, self.lateximagefile)
        
        os.unlink(temppdffile.name)
        

#####################################################################

    def toLatex(self):
        filename = self.latexfilename
        if os.path.isfile(filename) and not self.autooverwrite:
            sys.stderr.write("File '" + filename + "' already exists. Quitting.\n")
            sys.exit()

        FILE = open(filename,"w")

        # we need to extract the global translation of the whole 
        # page.
        dom1 = parse(self.svgfilename)
        #pprint.pprint(dom1)
        ele_g = dom1.getElementsByTagName("g")[0]

        ele_svg = dom1.getElementsByTagName("svg")[0]
        pgheight = ele_svg.attributes["height"].value
        if pgheight.endswith("mm"):
            pgheight = pgheight.rstrip("mm")
            pgheight = float(pgheight) * 3.5433
        pgwidth = ele_svg.attributes["width"].value
        if pgwidth.endswith("mm"):
            pgwidth = pgwidth.rstrip("mm")
            pgwidth = float(pgwidth) * 3.5433


        latexstr = self.page_info(pgwidth, pgheight)

        # TODO, remove the g_trans var from global scope.
        for node in dom1.getElementsByTagName("flowRoot"):
            g_trans_x, g_trans_y = self.get_g_trans(node)
            latexstr += "\n"
            latexstr += self.process_flow(node, pgwidth, pgheight, g_trans_x, g_trans_y)
            latexstr += "\n"
        for node in dom1.getElementsByTagName("text"):
            g_trans_x, g_trans_y = self.get_g_trans(node)
            latexstr += "\n"
            latexstr += self.process_text(node, pgwidth, pgheight, g_trans_x, g_trans_y)
            latexstr += "\n"
        latexstr += " \\end{picture}\n"
        latexstr += "\\endgroup\n"
        
        FILE.writelines(str(latexstr.encode("utf-8")))
        FILE.close()

#####################################################################
    def get_g_trans(self, node):
        #pprint.pprint(node.toxml())
        x_trans, y_trans = (0, 0)
        while not node.nodeType == Node.DOCUMENT_NODE:
            if node.hasAttribute("transform") == True:
                #print "found transform..."
                trans_str = node.attributes["transform"].value;
                tmp_x, tmp_y = self.get_trans(trans_str)
                x_trans += tmp_x
                y_trans += tmp_y
            node = node.parentNode
        return x_trans, y_trans

    def get_trans(self, trans_str):
        trans_str = trans_str.rstrip(")")
        x_trans = 1.0
        y_trans = 1.0
        if "translate" in trans_str:
            #print "translate! str = ", trans_str
            trans_str = trans_str.lstrip("translate(")
            values = trans_str.split(",")
        else:
            #print "not translate! str = ", trans_str
            trans_str = trans_str.lstrip("matrix(")
            values = trans_str.split(",")
            # fix the x,y if there is a scale value included in the matrix
            #print "values = ", values[0], values[3]
            #values[-2] = float(values[0]) * float(values[-2])
            #values[-1] = float(values[3]) * float(values[-1])

        return float(values[-2]), float(values[-1])
    
    def get_global_trans(self, trans_str):
        tmp_str = trans_str.lstrip("translate(")
        tmp_str = tmp_str.rstrip(")")
        return map(lambda x: float(x), tmp_str.split(","))

#####################################################################

    def page_info(self, pgwidth, pgheight):

        pagestr = ''
        pagestr += "\\begingroup\n"
        pagestr += " \setlength{\unitlength}{0.8pt}\n" # this is standard SVG units, as PT.
        pagestr += " \\begin{picture}("
        pagestr += str(pgwidth)
        pagestr += ","
        pagestr += str(pgheight)
        pagestr += ")\n"
        pagestr += " \put(0,0){\includegraphics"
        pagestr += "{"
        pagestr += re.sub(r'\\', r'/', self.lateximagefile)
        pagestr += "}}\n"
        return pagestr

#####################################################################

    def process_style(self, stylenode):
        color = "{black}"
        fontSize = ""
        customColors = ""
        colorNum = 1
        mboxcode = ''
        fontSizeInt = 1;
        fontSizeFloat = 10;
        if stylenode is not None:
            for styleElement in string.split(stylenode, ';'):
                directive, value = string.split(styleElement, ':')
                if directive == "text-align":
                    #print "directive found:", directive, value
                    if value == 'center':
                        mboxcode = 'c'
                    elif value == 'end':
                        mboxcode = 'r'
                    else:
                        mboxcode = 'l'
                if directive == "fill":
                    if re.match(r'^#', value) is not None:
                        color = "{inkcol" + `colorNum` + "}"
                        red = '0x' + value[1:3]
                        green = '0x' + value[3:5]
                        blue = '0x' + value[5:7]
                        customColors += "\\definecolor{inkcol" + `colorNum` + "}{rgb}{"
                        customColors += `eval(red)/255.0` + ','
                        customColors += `eval(green)/255.0` + ','
                        customColors += `eval(blue)/255.0` + '}\n'
                        colorNum += 1
                    else:
                        color = "{" + value + "}"
                if directive == "font-size":
                    fontSize,fontSizeFloat = self.fontSizeLookup(value)
        #print "fontsize: " + fontSize
        #print "fontsizefloat: " + fontSizeFloat
        return color, fontSize, customColors, colorNum, mboxcode, fontSizeFloat

#####################################################################
    def process_tspan_transform(self, transform, tmpx, tmpy):
        rotate = 0
        transX = 0
        transY = 0
        if transform is not None:
            transArrTmp = re.split(r"[,\(\)]", transform)
            transArr = []
            for element in transArrTmp:
                if re.search('^[-+]?\d+\.?\d*', element):
                    transArr.append(element)
            transX = tmpx #float(transArr[-2])
            transY = tmpy #float(transArr[-1])
            if re.match(r'^matrix', transform) is not None:
                rotate = self.get_angle(transArr[0], transArr[1], transArr[2], transArr[3])
        #        print "determinant= ", self.get_determinant(transArr[0], transArr[1], transArr[2], transArr[3])
                transX, transY = self.do_transform(transArr[0], transArr[2], transArr[1], transArr[3], tmpx, tmpy)
        return rotate, transX, transY

#####################################################################
# this processes <text> dom elements.
# it is as ugly as it looks.
# TODO: add code to deal with 'align-centre' style.

    def process_text(self, flowNode, imgWidth, imgHeight, g_x_trans, g_y_trans):
        #tmpstr = ''
       
        style = flowNode.attributes["style"]
        color, fontSize, customColors, colorNum, mboxcode, fontSizeInt = self.process_style(style.value)
        put = Template('   \put($x,$y)')

        rotate, transX, transY = (0.0, 0.0, 0.0)

        tmpx = float(flowNode.attributes["x"].value)
        tmpy = float(flowNode.attributes["y"].value)

        if flowNode.hasAttribute("transform"):
            transform = flowNode.attributes["transform"].value
            # this is a hack for the cases where inkscape optimises
            # a 180o rotation into a scale(-1,-1)
            if transform.startswith("scale("):
                transform = "matrix(-1,0,0,-1)"

            rotate, transX, transY = self.process_tspan_transform(transform, 0.0, 0.0)


        alltext = '' 
        (x2, y2) = (None, None)
        for element in flowNode.getElementsByTagName("tspan"):
            #x1 = (float(element.attributes["x"].value))
            #y1 = (float(element.attributes["y"].value))
            x1 = tmpx
            y1 = tmpy
            x2 = transX + x1*math.cos(rotate) - y1*math.sin(rotate)
            y2 = transY + x1*math.sin(rotate) + y1*math.cos(rotate)
            x2 += g_x_trans 
            y2 += g_y_trans

            y2 = float(imgHeight) - y2
            myWidth = float(imgWidth)

            if mboxcode == 'c':
                # this block adjusts x coord for 
                # cases where we wish to centre the text.
                x2 -= myWidth/2.0

            if element.hasAttribute("style"):
                fontSize = self.get_fontsize(element.attributes["style"].value, fontSize)
            if element.firstChild is not None:
                alltext += "\\textcolor" + color + "{" + fontSize + "{" + element.firstChild.data + "}}\\\\\n"

# vskip -1cm
        #print "text: " + alltext + " g_pos ", g_x_trans, g_y_trans
        #print "\n"
        txt = Template('{\\rotatebox{' + `self.toDEG(rotate)` + '}{\makebox(0,0)[tl]{\strut{}{$text}}}}%\n')
        miniPg = '\n   \\begin{minipage}[h]{' + str(myWidth * 0.8) + 'pt}\\vspace{-2ex}\n'
        if mboxcode == 'c':
            miniPg += '\\begin{center}\n'
            miniPg += alltext
            miniPg += '\\end{center}\n'
        elif mboxcode == 'r':
            miniPg += '\\begin{flushright}\n'
            miniPg += alltext
            miniPg += '\\end{flushright}\n'
        else:
            miniPg += alltext

        miniPg += '\end{minipage}'
        return customColors + put.substitute(x=x2, y=y2) + txt.substitute(text=miniPg)

#####################################################################

    def process_flow(self, flowNode, imgWidth, imgHeight, g_x_trans, g_y_trans):
        tmpstr = ''
        style = flowNode.attributes["style"]
        color, fontSize, customColors, colorNum, mboxcode, fontSizeInt = self.process_style(style.value)
        put = Template('   \put($x,$y)')
        #print "flow processing"

        rotate, transX, transY = (0.0, 0.0, 0.0)
        if flowNode.hasAttribute("transform"):
            transform = flowNode.attributes["transform"]
            rotate, transX, transY = self.process_tspan_transform(transform.value, 0.0, 0.0)

        for element in flowNode.getElementsByTagName("rect"):
            x1 =  (float(element.attributes["x"].value))# + g_x_trans + self.flow_x_offset 
            y1 =  (float(element.attributes["y"].value))# + g_y_trans + self.flow_y_offset 
            x2 = transX + x1*math.cos(rotate) - y1*math.sin(rotate)
            y2 = transY + x1*math.sin(rotate) + y1*math.cos(rotate)
            x2 = x2 + g_x_trans
            y2 = y2 + g_y_trans
            #print "x2: ", (float(element.attributes["x"].value)), g_x_trans, transX, x1, x2
            #print "y2: ", (float(element.attributes["y"].value)), g_y_trans, transY, y1, y2
            y2 = float(imgHeight) - y2


            tmpstr += put.substitute(x=x2, y=y2)
            myWidth = float(element.attributes["width"].value)

        alltext = '' 
        for element in flowNode.getElementsByTagName("flowPara"):
            if element.hasAttribute("style"):
                fontSize = self.get_fontsize(element.attributes["style"].value, fontSize)
            if element.firstChild is not None:
                alltext += "\\textcolor" + color + "{" + fontSize + "{" + element.firstChild.data + "}}\\\\\n"

        #print alltext
        txt = Template('{\\rotatebox{' + `self.toDEG(rotate)` + '}{\makebox(0,0)[tl]{\strut{}{$text}}}}%\n')
        miniPg = '\n    \\begin{minipage}[h]{' + str(myWidth * 0.8) + 'pt}\n'
        if mboxcode == 'c':
            miniPg += '\\begin{center}\n'
            miniPg += alltext
            miniPg += '\\end{center}\n'
        elif mboxcode == 'r':
            miniPg += '\\begin{flushright}\n'
            miniPg += alltext
            miniPg += '\\end{flushright}\n'
        else:
            miniPg += alltext

        miniPg += '\end{minipage}'
        tmpstr += txt.substitute(text=miniPg)
        return customColors + tmpstr
#####################################################################

    def get_fontsize (self, att, fontSize):
        size = att.partition("font-size:")[2]
        size = size.partition(";")[0]
        if size is None:
            return fontSize
        return self.fontSizeLookup(size)[0]

    def do_transform(self, a,b,c,d,x,y):
        x2 = float(a)*float(x) + float(b)*float(y)
        y2 = float(c)*float(x) - float(d)*float(y)
        return (x2, y2)

    def undo_transform(self, a,b,c,d,x,y):
        x2 = float(a)*float(x) + float(b)*float(y)
        y2 = -float(c)*float(x) + float(d)*float(y)
        return (x2, y2)

    def get_determinant(self, a,b,c,d):
        return float(a)*float(d) - float(b)*float(c)

    def get_angle(self, x1, x2, y1, y2):
        #sys.stderr.write("angle  '" + x1 + "'." + x2 + "'." + y1 + "'." + y2 + "'.")
        acosA = math.acos(float(x1))
        if (math.asin(float(x2)) >= 0):
            return float(acosA)
        else:
            return 2*math.pi - float(acosA)


    def toDEG(self, rad):
        return 360-180.0*rad/math.pi


    def fontSizeLookup (self, pxSize):
        sizeStr = "\\normalsize"
        if not re.search('px$', pxSize):
            try: 
                float(pxSize)
            except ValueError:
                sys.stderr.write("found unusual font size: " + pxSize + " assuming '\\normalsize' missing.\n")
                return "\\normalsize", 10
                
            sys.stderr.write("found unusual font size: " + pxSize + " assuming 'px' missing.\n")
            pxSize += "px"

        #print "Pxsize = " + pxSize
        size = re.split(r"px$", pxSize)
        #print "size = " + size
        size[0] = float(size[0])
        if size[0] < 7:
            return "\\tiny", size[0]
        if size[0] < 8:
            return "\\scriptsize", size[0]
        if size[0] < 9:
            return "\\footnotesize", size[0]
        if size[0] < 10:
            return "\\small", size[0]
        if size[0] < 12:
            return "\\normalsize", size[0]
        if size[0] < 14:
            return "\\large", size[0]
        if size[0] < 18:
            return "\\Large", size[0]
        if size[0] < 20:
            return "\\LARGE", size[0]
        if size[0] < 24: 
            return "\\huge", size[0]
        if size[0] >= 24:
            return "\\Huge", size[0]

        sys.stderr.write("found unusual font size: " + pxSize + " assuming normalsize.")
        return "\\normalsize", 10
        #\tiny	5	5
        #\scriptsize	7	7
        #\footnotesize	8	8
        #\small	9	9
        #\normalsize	10	10
        #\large	12	12
        #\Large	14	14.40
        #\LARGE	18	17.28
        #\huge	20	20.74
        #\Huge	24	24.88
        #else: 
        #    sys.stderr.write("found unusual font size: " + pxSize + " assuming normalsize.")
        #    return "\\normalsize", 10




svgfile = svg2latex()
svgfile.toLatex()
svgfile.makePDF()
svgfile.tidyup()
print ("completed")

18.17 RisoMount

#!/bin/bash
#############################################################
# Default script:
#############################################################
mount /mnt/R-home/
mount /mnt/S-group/
mount /mnt/T-apps/
mount /mnt/U-garb/

18.18 xfce4ToggleDesktop

#!/bin/sh
if xprop -root  _NET_SHOWING_DESKTOP|egrep '= 1' ; then 
  wmctrl -k off ; 
else 
  wmctrl -k on ;
fi

18.19 pdfocr

#!/bin/bash
echo "Usage: pdf2ocr.sh FILE.pdf lang"
if [ -e tmp ] ;
then
	echo "Folder tmp/ exists - Continue anyway ?" ;
	echo "	YES : Press Enter  ";
	echo "	NO :  Press Ctrl+C ";
	read reply
else
	mkdir tmp
fi

echo " "
echo "- Entering folder tmp"
cd tmp
ERRORS=0

echo " "
echo "- Bursting with pdftk..."
pdftk "../$1" burst dont_ask

echo " "
for f in pg_*.pdf
do
	echo "- Pre-processing $f ...";
	convert -quiet -monochrome -normalize -density 300 "$f" "$f.png";
done

echo " "
for f in pg_*.png
do
	echo "- Processing $f ..."
	convert "$f" "$f.bmp"
	echo "Merging BMP and hOCR into PDF file..."
	cuneiform -l $2 -f hocr -o "$f.php" "$f.bmp"
	convert -blur 0.4 "$f" "$f.bmp"
	OUT=$?
	hocr2pdf -i "$f" -s -o "$f.pdf" < "$f.php"
	OUT=`expr $? + $OUT`
	if [ $OUT -gt 127 ] ;
	 then
		 echo "$f" >> ../errors.log ;
		 ERRORS=`expr $ERRORS + 1` ;
		 cp "${f%%.png}" "$f.pdf"
	 fi	
	rm -f "$f.bmp"
done


echo " "
echo "- Binding with pdftk..."
pdftk pg_*.png.pdf output "../$1-OCR.pdf"


echo " "
if [ $ERRORS -gt 0 ] ;
then
	echo "- Number of errors $ERRORS"
	cat ../errors.log
fi
echo "Done, should I delete all the temporary files?"

echo "	YES : Press Enter  ";
echo "	NO :  Press Ctrl+C ";
read reply

rm -r pg_*

18.20 pdfocr-tess

#!/bin/bash
echo "usage: pdfocr.sh document.pdf \"author\" \"title\""
# Adapted from http://blog.konradvoelkel.de/2010/01/linux-ocr-and-pdf-problem-solved/ 
# NOTE: This script has been substantially modified/simplified from the original. 
# This version does not allow rotation, language selection or cropping.
# Those parameters were all required in the original, but I don't really need them.
# If you can think of a way to make them optional, please share. 
# This version also uses Tesseract, which I find to be substantially more
# accurate than Cuneiform for English text. 
# usage examples:
#echo "InfoKey: Author" > in.info
#echo "InfoValue: $2" >> in.info
#echo "InfoKey: Title" >> in.info
#echo "InfoValue: $3" >> in.info
#echo "InfoKey: Creator" >> in.info
#echo "InfoValue: PDF OCR scan script" >> in.info
#pdfjoin --fitpaper --tidy --outfile "$1.ocr1.pdf" "pg_*-ocr.pdf"
#rm -f pg_*
#pdftk "$1.ocr1.pdf" update_info doc_data.txt output "$1.ocr2.pdf"
#pdftk "$1.ocr2.pdf" update_info in.info output "$1-ocr.pdf"
#rm -f "$1.ocr1.pdf" "$1.ocr2.pdf" doc_datax.txt in.info
#!/bin/bash
echo "Usage: pdf2ocr.sh FILE.pdf lang"
if [ -e tmp ] ;
then
	echo "Folder tmp/ exists - Continue anyway ?" ;
	echo "	YES : Press Enter  ";
	echo "	NO :  Press Ctrl+C ";
	read reply
else
	mkdir tmp
fi

echo " "
echo "- Entering folder tmp"
cd tmp
ERRORS=0

echo " "
echo "- Bursting with pdftk..."
pdftk "../$1" burst dont_ask

echo " "
for f in pg_*.pdf
do
	echo "- Pre-processing $f ...";
#	convert -quiet -monochrome -normalize -density 300 "$f" "$f.png";
        convert -quiet -density 300 -depth 8 "$f" "$f.tif"
done

echo " "
for f in pg_*.tif
do
	echo "- Processing $f ..."
	tesseract "$f" "$f" hocr
	echo "Merging BMP and hOCR into PDF file..."
	hocr2pdf -i "$f" -o "$f-ocr.pdf" <"$f.php"
	OUT=$?
	if [ $OUT -gt 127 ] ;
	 then
		 echo "$f" >> ../errors.log ;
		 ERRORS=`expr $ERRORS + 1` ;
		 cp "${f%%.png}" "$f.pdf"
	 fi	
done


echo " "
echo "- Binding with pdftk..."
pdftk pg_*.png.pdf output "../$1-OCR.pdf"


echo " "
if [ $ERRORS -gt 0 ] ;
then
	echo "- Number of errors $ERRORS"
	cat ../errors.log
fi
echo "Done, should I delete all the temporary files?"

echo "	YES : Press Enter  ";
echo "	NO :  Press Ctrl+C ";
read reply

rm -r pg_*

18.21 PulseMediaKeys.sh

#!/bin/bash
#### Create ~/.pulse/mute if not exists
ls ~/.pulse/mute &> /dev/null
if [[ $? != 0 ]]
then
    echo "false" > ~/.pulse/mute
fi

####Create ~/.pulse/volume if not exists
ls ~/.pulse/volume &> /dev/null
if [[ $? != 0 ]]
then
    echo "65536" > ~/.pulse/volume
fi

CURVOL=`cat ~/.pulse/volume`     #Reads in the current volume
MUTE=`cat ~/.pulse/mute`          #Reads mute state

if [[ $1 == "increase" ]]
then
    CURVOL=$(($CURVOL + 1311)) #3277 is 5% of the total volume, you can change this to suit your needs.
    if [[ $CURVOL -ge 95536 ]]
    then
        CURVOL=95536        
    fi
elif [[ $1 == "decrease" ]]
then
    CURVOL=$(($CURVOL - 1311))
    if [[ $CURVOL -le 0 ]]
    then
        CURVOL=0        
    fi
elif [[ $1 == "mute" ]]
then
    if [[ $MUTE == "false" ]]
    then
        pactl set-sink-mute 1 1
        echo "true" > ~/.pulse/mute
        icon="audio-volume-muted"
        notify-send -t 500 -i $icon "Mute: on"
        exit
     else
        pactl set-sink-mute 1 0
        echo "false" > ~/.pulse/mute    
#         icon="audio-volume-low"
#         if [[ $CURVOL -ge 50000 ]] 
#         then
#             icon="audio-volume-high"
#         elif [[ $CURVOL -ge 30000 ]]
#         then
#             icon="audio-volume-medium"
#         fi
#         a=00
#         p=`expr $CURVOL$a / 65536`
        icon="audio-volume-medium"
        notify-send -t 1000 -i $icon "Mute: off"
        exit
    fi
fi
# a=00
# p=`expr $CURVOL$a / 65536`
# icon="audio-volume-low"
# if [[ $CURVOL -ge 50000 ]] 
# then
#     icon="audio-volume-high"
# elif [[ $CURVOL -ge 30000 ]]
# then
#     icon="audio-volume-medium"
# fi
#echo $CURVOL

pactl set-sink-volume 1 $CURVOL
echo $CURVOL > ~/.pulse/volume # Write the new volume to disk to be read the next time the script is run.
# notify-send -t 500 -i $icon "$p%"

18.22 alarmaniac

#!/bin/sh
cd /home/manu/Config/bin/Alarmaniac/
java -jar alarmaniac.jar

18.23 keyboardSetup

#! /bin/bash



echo "----------------------- BEGIN KEYBOARD SETUP ---------------------------"
setxkbmap -option compose:ralt

echo "----------------------- END KEYBOARD SETUP ---------------------------"

18.24 pdfAutoRename

#! /bin/sh
for i in *.pdf ; do
	echo ""
	echo "-------------------------------------------------------------------------";
	filebase=${i%.*};
	
	INFO=`pdfinfo "$"i 2>/dev/null`;
 	FIRSTPAGE=`pdftotext -f 1 -l 1 "$i" -|head -c 1000|tr -d '[*]'`;

	Title=`echo $INFO| awk -F ":" '/Title/ {print $2}'`
	Author=`echo $INFO| awk -F ":" '/Author/ {print $2}'`
	Subject=`echo $INFO| awk -F ":" '/Subject/ {print $2}'`
	Date=`echo $FIRSTPAGE|grep -E -o --color=none "(18|19|20)[0-9]{2}"|xargs|cut -c 1-4`

	### Display information
	echo File is : ${i%.*};
	echo Title: $Title
	echo Author: $Author
	echo Subject: $Subject
	echo Date: $Date
	
	### Predifined scheme
	title=" - $Date - "`pdftotext -f 1 -l 1 "$i" - | tr -d '[*]'| awk '!/[0-9.]/'|awk '/. / '|tr '\n' ' '|head -c 100`
	titleRis1=" - $Date - "`pdftotext -f 1 -l 1 "$i" - |tr -d '[*]'|awk '!/Ris/'|awk '/. /'|awk '!/[,]/' |tr '\n' ' '|head -c 100`
	titleRis2=" - $Date - "`pdftotext -f 1 -l 1 "$i" - |tr -d '[*]'| awk '!/Ris/' |awk '/[A-Za-z0-9.]/'| awk '/. /'|awk '!/[,]/' |tr '\n' ' '|head -c 100`
	titlesandia=" - $Date - "`pdftotext -f 1 -l 1 "$i" - |tr -d '[*]'| awk '!/[0-9.]/'|awk '!/SANDIA REPORT/' |awk '!/Unlimited Release/' |awk '/. / '|tr -d '\n' |head -c 100`
	titlebegin=" - $Date - "`echo $FIRSTPAGE|cut -c 100`	
	titleupper=" - $Date - "`echo $FIRSTPAGE|grep -E -o --color=none "[A-Z]{2}[A-Z]*" |xargs |cut -c 1-100`
	titleECN=`pdftotext -f 1 -l 1 "$i" - | awk '!/[0-9.]/'|awk '/. / '|tr '\n' ' '|head -c 64|tr ' ' '_'`

	### Making a choice
	nchosen=1;
	if test "`echo $FIRSTPAGE|cut -c -11`" = "WIND ENERGY" 
		then 
		echo "Wind Energy Publication"
		Date=`pdftotext -f 1 -l 1 "$i" - |awk -F "Published" 'NR < 2 {print $2}'|grep -E -o --color=none "(18|19|20)[0-9]{2}"`
		Title=`pdftotext -f 1 -l 1 "$i" -|awk 'NR==5 {print $0}'`
		Author=`pdftotext -f 1 -l 1 "$i" -|awk 'NR==6 {print $0}'|tr -d '[:punct:]'|cut -c 1-30`
		titlechosen="$Author - $Date - $Title"
		nchosen=5
	elif test "`echo $FIRSTPAGE|cut -c -11`" = "ECN" 
		then 
                titlechosen=titleECN
                nchosen=8
	elif [ -n "`echo $Subject|grep "Journal"`" ]
                then
                echo "JOURNAL OF FLUID MEACHANICS"
                Year=`echo $INFO| awk -F ":| " '/CreationDate/ {print $NF}'`
                titlechosen=$Author" - "$Year" - "$Title
                nchosen=5b
	elif [ -n "`echo $FIRSTPAGE|grep "Ris"`" ]  
		then
		echo "RISO INSIDE"
		if [ `expr length "$titleRis1"` -gt 12 ]
		then
			titlechosen=$titleRis1
			nchosen=2;
		else
			titlechosen=$title	
			nchosen=1;
		fi
	elif [ -n "`echo $FIRSTPAGE|grep "SANDIA"`" ]  
		then
		echo "SANDIA INSIDE"
		titlechosen=$titlesandia
		nchosen=4
	elif [ -n "`echo $Subject|grep "Journal"`" ]  
		then
		echo "JOURNAL OF FLUID MEACHANICS"
		Year=`echo $INFO| awk -F ":| " '/CreationDate/ {print $NF}'`
		titlechosen=$Author" - "$Year" - "$Title
		nchosen=5b
	elif [ -n "$Title" ]	
		then
		titlechosen=$Title;
		nchosen=5;
	else
		titlechosen=$title;
		nchosen=1;
	fi
	if [ `expr length "$title"` -lt 7 ]
	then
		nchosen=0;
		titlechosen="$filebase"
	fi

	titlepdfinfo=$Author" - $Date - "$Title
	
### User interact
	echo "- Choices :"
	echo 1 - $title
	echo 2 - $titleRis1
	echo 3 - $titleRis2
	echo 4 - $titlesandia
	echo 5 - $titlepdfinfo
	echo 6 - $titlebegin
	echo 7 - $titleupper 
        echo 8 - $titleECN
	echo ""
	echo "$nchosen)->"$titlechosen
	echo "" 
	echo "-Type enter for default, number for choice, 0 for nothing"	
	read choice
	if [ -n "$choice" ]
		then 
		echo "Using choice $choice"
		case $choice in
			0) dest="$filebase";;
			1) dest="$title" ;;
			2) dest="$titleRis1" ;;
			3) dest="$titleRis2"	;;
			4) dest="$titlesandia" ;;
			5) dest="$titlepdfinfo" ;;
	   		6) dest="$titlebegin";;
	   		7) dest="$titleupper"	;;
                        8) dest="$titleECN" ;;
		esac
	else
		echo "Using default:"
		dest=$titlechosen
	fi
#	echo "mv $i $dest"
	mv "$i" "$dest.pdf"
done

18.25 unix2win

#!/bin/bash
#############################################################
# unix2win:
#############################################################
# Description : mv input files from unix format to windows compatible format
# Written by : Emmanuel Branlard
# Date : May 2011
# Dependencies : 
# License : Feel free to modify and adapt it
# Example : 
#       find ./* -type f -execdir unix2win {} \;
#############################################################
#############################################################
for file ; 
do 
    newfile=`echo $file | sed -e 's/[^a-Z_0-9\. /-]//g' ;`
    if [[ "$file" != "$newfile" ]]
    then
        echo $file ;
        echo $newfile ;  
        mv "$file" "$newfile" ;
    fi
done

18.26 formatWebVersion

#!/bin/sh
#~ 
#~ cd Debianuel
#~ cp -r debianuel debianuel-bkp
#~ 
#~ cd debianuel
#~ 
#~ 
#~ rename "s/html/php/g" *.php
#~ sed -i "s/[.]html/.php/g" *.php
#~ sed -i "s:</HEAD>::g" *.php
#~ 
#~ 
#~ old_value="<BODY >";
#~ new_value="<? include('../_includes/haut.php');?>";
#~ sed -i "s:$old_value:$new_value:g" *.php
#~ 
#~ old_value="<ADDRESS>";
#~ new_value="<? include('../_includes/bas.php'); ?>";
#~ 
#~ sed -i "s:$old_value:$new_value:g" *.php
#~ 
#~ 
#~ old_value="</ADDRESS>";
#~ new_value="";
#~ sed -i "s:$old_value:$new_value:g" *.php
#~ 
#~ 
#~

18.27 DoBootchart

#!/bin/sh


#initialization
HOME=/home/manu
folder=/home/manu/Config/scripts/Bootchart
mydate=$(date +%Y-%m-%d-%H%M)

cd $HOME
bootchart

cp bootchart.png $folder/bootchart$mydate.png

18.28 Terminator.sh

#!/bin/bash 
# echo "----------------------- BEGIN TERMINATOR ---------------------------"
# #x=`xrandr --query |grep 2720 |wc -l`; #home
# # sleep 5
# echo "----------------------- BEGIN TERMINATOR ---------------------------"
# x=`xrandr --query |grep 3360 |wc -l`;  #riso
# if [[ $x > 0 ]] 
# then
#     terminator --geometry +2000 -m  -l 4terms
     /home/manu/Config/builds/terminator/terminator-0.95/terminator --geometry +2000 -m  -l 4terms
# else
#     terminator -m -l 4terms    
# fi
# Screen 0: minimum 2720 x 1024, current 2720 x 1024, maximum 2720 x 1024
# default connected 2720x1024+0+0 0mm x 0mm
#    2720x1024      50.0*

18.29 svg2png

#!/bin/bash 
#################################################
#	WHAT is svg2png ?
# Script to convert svg files to png
# svg2png does not modify the file which you select, it creates a new file.
# It cannot convert a directory but you can select several files.

#################################################
#		INFO
# Author : yeKcim - yeknan@yahoo.fr - http://yeknan.free.fr
# Licence : GNU GPL
# Dependency
#		zenity
#		inkscape
# Based on
#		WOM_audioconverter
# History
#		15.01.2006 : v0.1 : First public version
# Install
# 		Put on ~/.gnome2/nautilus-scripts/
#		In a console : chmod u+x ~/.gnome2/nautilus-scripts/svg2png

version="0.1"
#################################################
#	TRADUCTIONS
		###### Default = English #####
		title="svg2png "$version""
		pleasesel="Please select at least one file."
		noselec=""$title" converts svg to png. "$pleasesel""
		nobin="Program inkscape is not installed, please install !"
		warning="Warning"
		choix="Export type ?"
		drawing="Drawing"
		canvas="Canvas"
		exportof="Picture to convert :"
	case $LANG in
		######## Français ########
		fr* )
		title="svg2png "$version""
		pleasesel="Merci de sélectionner au moins un fichier."
		noselec=""$title" permet de convertir des svg en png. "$pleasesel""
		warning="Attention"
		nobin="Le programme inkscape n'est pas installé, veuillez l'installer !"
		choix="Type d'export ?"
		drawing="Dessin"
		canvas="Page"
		exportof="Image à convertir :" ;;
	esac

#################################################
#	PROGRAMME
######## Test dépendance ########
which inkscape 2>/dev/null
if [ $? != 0 ]
then
	zenity --error --title="$title" --text="$nobin"
	exit 0
fi

#### Pas de fichiers sélectionné ###
if [ $# -eq 0 ]; then
	zenity --error --title="$warning" --text="$noselec"
	exit 1
fi

######## Page/image ? ########
while [ ! "$choixutilisateur" ] # Réafficher la fenêtre tant que l'utilisateur n'a pas fait de choix
do
	choixutilisateur=`zenity --title "$title" --list --column="$exportof" $canvas $drawing --text "$choix"`
	###### Choix -> Sortie boucle ######
	if  [ $? != 0 ]; then
		exit 1
	fi
	[ $? -ne 0 ] && exit 2 # Annulation
done

if  [ $choixutilisateur == $drawing ]; then
	type="--export-area-drawing";
fi

######## Résolution ? ########
while [ ! "$resolution" ] # Réafficher la fenêtre tant que l'utilisateur n'a pas fait de choix
do
	resolution=`zenity --entry --title "$title" --text "Résolution :" --entry-text "90"`
	###### Choix -> Sortie boucle ######
	if  [ $? != 0 ]; then
		exit 1
	fi
	[ $? -ne 0 ] && exit 2 # Annulation
done

######## Export png ########
while [ $# -gt 0 ]; do
	picture=$1
	png_file=`echo "$picture" | sed 's/\.\w*$/.png/'`
	inkscape $type --export-dpi="$resolution" --export-png="$png_file" "$picture"
	shift
done

18.30 m3u2xspf.py

#! /usr/bin/env python
#
# Convert an M3U playlist to XSPF.
#
# Usage: m3u2xspf < input.m3u > output.xspf
#
# Copyright (c) 2006, Matthias Friedrich <matt@mafr.de>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
__revision__ = '$Id: m3u2xspf,v 1.4 2007/03/30 16:31:03 matthias Exp matthias $'
__version__ = '0.2'

import sys
import urllib
import urlparse
import os.path
import optparse
import xml.sax.saxutils as saxutils 


class XmlWriter(object):
	def __init__(self, outStream, indentAmount='  '):
		self._out = outStream
		self._indentAmount = indentAmount
		self._stack = [ ]

	def prolog(self, encoding='UTF-8', version='1.0'):
		pi = '<?xml version="%s" encoding="%s"?>' % (version, encoding)
		self._out.write(pi + '\n')

	def start(self, name, attrs={ }):
		indent = self._getIndention()
		self._stack.append(name)
		self._out.write(indent + self._makeTag(name, attrs) + '\n')

	def end(self):
		name = self._stack.pop()
		indent = self._getIndention()
		self._out.write('%s</%s>\n' % (indent, name))

	def elem(self, name, value, attrs={ }):
		# delete attributes with an unset value
		for (k, v) in attrs.items():
			if v is None or v == '':
				del attrs[k]

		if value is None or value == '':
			if len(attrs) == 0:
				return
			self._out.write(self._getIndention())
			self._out.write(self._makeTag(name, attrs, True) + '\n')
		else:
			escValue = saxutils.escape(value or '')
			self._out.write(self._getIndention())
			self._out.write(self._makeTag(name, attrs))
			self._out.write(escValue)
			self._out.write('</%s>\n' % name)

	def _getIndention(self):
		return self._indentAmount * len(self._stack)

	def _makeTag(self, name, attrs={ }, close=False):
		ret = '<' + name

		for (k, v) in attrs.iteritems():
			if v is not None:
				v = saxutils.quoteattr(str(v))
				ret += ' %s=%s' % (k, v)

		if close:
			return ret + '/>'
		else:
			return ret + '>'


def createAnnotation(url):
	"""Get file name part, split off extension, rewrite underscores."""
	path = urllib.unquote(urlparse.urlsplit(url)[2])
	filename = os.path.splitext(os.path.basename(path))[0]
	return filename.replace('_', ' ')

#
# MAIN
#

optParser = optparse.OptionParser(
	usage='%prog [-ah] [file]',
	version='%prog ' + __version__
)

optParser.add_option('-a', '--annotation',
	action='store_true', dest='add_annotation',
	default=False, help='create annotation elements based on the file name')

(options, args) = optParser.parse_args()


#
# Write the playlist in XSPF format.
#
xml = XmlWriter(sys.stdout, indentAmount='  ')

xml.prolog()
xml.start('playlist', { 'xmlns': 'http://xspf.org/ns/0/', 'version': '1' })
xml.start('trackList')

for line in sys.stdin:
	line = line.rstrip('\n')

	if line.startswith('#') or len(line.strip()) == 0:
		continue

	if line.startswith('http://'):
		url = line
	else:
		url = 'file://' + urllib.pathname2url(line)

	xml.start('track')
	xml.elem('location', url)

	if options.add_annotation:
		xml.elem('annotation', createAnnotation(url))

	xml.end() # track

xml.end() # trackList
xml.end() # playlist

# EOF

18.31 tomp3

#!/bin/bash
#############################################################
# To MP3 
#############################################################
# Description : au2mp3 m4a2mp3 wma2mp3 mp32mp3 flv2mp3 anything2mp3
# Written by : Emmanuel Branlard
# Date : Feb 2011
# Dependencies : ffpmeg, lame, sox, faad ,mplayer
# License : Feel free to modify and adapt it
#############################################################
for i 
do
        # Out File
        j=`echo "$i"|tr '_' ' '`
        j=${j%.*}.mp3
        echo "File $j"

        if [ -f "$j" ] 
        then
                echo "File exists $j -> skipping"
        else
                echo "File does not exists"
                if [[ "$i" == *.au ]]
                then
                    sox "$i" "$i".wav
                    ffmpeg -i "$i".wav -vn -acodec libmp3lame -y "$j"
                    rm "$i".wav
                elif [[ "$i" == *.m4a ]]
                then
                    faad -o - "$i" | lame -h -b 192 - "$j"
                elif [[ "$i" == *.wav ]]
                then
                        lame "$i" "$j"
                elif [[ "$i"  == *.wma ]]
                then
                        #wma > mp3 Rip with Mplayer / encode with LAME
                        mplayer -vo null -vc dummy -af resample=44100 -ao pcm:waveheader "$i" ;
                        lame "audiodump.wav" "$j";
                        rm "audiodump.wav"
                elif [[ "$i"  == *.mid* ]]
                then
                       #
                       echo To be done
                elif [[ "$i" == *.mp3 ]]
                then
                        #mp3 > mp3
                        lame "$i" "audiodump.mp3"
                        mv "audiodump.mp3" "$j"
                else
                        echo "Format unknown" ;
                        ffmpeg -i "$i" -vn -ab 128k -ac 2 -ar 44100 -y "$j">/dev/null ;
                fi
        fi
done

18.32 ECN-RenameByTitle.sh

#! /bin/bash
for i in *.pdf ; do
	echo ""
	echo "-------------------------------------------------------------";
	echo ${i%.*};
	title=`pdftotext -f 1 -l 1 $i - | awk '!/[0-9.]/'|awk '/. / '|tr '\n' ' '|head -c 64|tr ' ' '_'`
	mv "$i" "${i%.*}_$title.pdf"

done

18.33 rhythmboxplaylist2exaile

#!/usr/bin/python

import os, string

marker = 0
marker2 = 0
orderlist = []
a = open( 'playlists.xml', 'r' )
if not os.path.exists("playlists"):
    os.makedirs("playlists")
os.chdir("playlists")
z = open( 'order_file', 'w' )
for line in a.xreadlines():
    if marker == 1:
        if line.find('<location>') != -1 and line.rfind('</location>') != -1:
            line = line[line.find('<location>')+10:]
            line = line[:line.find('</location>')]
            line = string.replace( line, '&amp;', '&' )
            if marker2 == 0:
                m = open( name+'.playlist', 'w' )
                z.write(name+'\n')
                marker2 = 1
            m.write(line+'\n')
        elif line.find('</playlist>') != -1:
            if marker2 == 0:
                continue
            m.write('EOF\n')
            m.write('random_enabled=B: False\n')
            m.write('random_mode=S: track\n')
            m.write('repeat_enabled=B: False\n')
            m.write('repeat_mode=S: playlist\n')
            m.write('dynamic_enabled=B: False\n')
            m.write('current_pos=I: -1\n')
            m.write('name=U: '+name+'\n')
            m.write('_is_custom=B: True\n')
            m.write('_needs_save=B: False\n')
            m.close()
            marker = 0
            marker2 = 0
    elif line.find('<playlist name="') != -1:
        if line.rfind('/>') == -1:
            line = line[line.find('<playlist name="')+16:]
            line = line[:line.find('"')]
            line = string.replace( line, '&amp;', '&' )
            name = line
            marker = 1
a.close()
z.write('EOF\n')
z.close()

18.34 rhythmboxstart

#! /bin/sh
#launching 
rhythmbox&
#after a while using the client to play
sleep 2;rhythmbox-client --play --hide&

18.35 keywordsSetUp

#! /bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")

echo "Converting pdfs "
for i in `find -name "*.php" -printf '%h/%f\n'  2> /dev/null`
do
	echo "----------------------------"
	echo "Keywords $i";
	echo "----------------------------"
	cp $i "$i.tmp"
	cat "$i.tmp" | awk '$0 !~ NAME="keywords" {print $0}; $0 ~ NAME="keywords" {print "<META NAME=\"keywords\" CONTENT=\"KEYWORDSSHOULDGOHERE\">"}' >$i
	rm "$i.tmp"
done; 
IFS=$SAVEIFS

18.36 pm-inhibit.py

#!/usr/bin/python

import dbus
import time
#import os
import signal, sys

if len(sys.argv) != 3 :
  sys.stderr.write('Usage: pm-inhibit.py <appname> <reason>\n')
  sys.exit(1)

def sighandler(signum, frame) :
        dev.UnInhibit(cookie)
        exit()

bus = dbus.Bus(dbus.Bus.TYPE_SESSION)
devobj = bus.get_object('org.freedesktop.PowerManagement', '/org/freedesktop/PowerManagement/Inhibit')
dev = dbus.Interface (devobj, "org.freedesktop.PowerManagement.Inhibit")
cookie = dev.Inhibit(sys.argv[1], sys.argv[2])

# going away from dbus when dieing should be enough, but be sure 
signal.signal(signal.SIGTERM, sighandler)
print cookie

while 1 == 1 :
        time.sleep(30)

18.37 pdfBind

#! /bin/bash

if [ $# -eq 0 ]
then 
	Files=*.pdf
        Files="$Files"
else
	l=$@
        Buff=""
        First=''
        for i in $l
        do
            if [ ! `echo $i |grep -E "[.][a-zA-Z]{3,4}$"` = "" ] 
            then
                    File="$Buff $i"
                    Buff=""
                    First=""
                    File2=`echo $File|tr ' ' '_'`
                    #
                    if [ $File != $File2 ]
                    then
                            mv "$File" $File2
                    fi
                    #
                    Files="$Files $File2"
           else
                if [ -z ${First} ] 
                then
                        Buff="$i"
                        First="no"
                else
                        Buff="$Buff $i"
                fi
           fi
           
        done
#        echo $Files
fi

FileOut=`echo $Files|grep -Eo "^[a-Z0-9\_ -]*[.]"|tr '_' ' '`"Bind.pdf"

echo $FileOut

pdftk $Files cat output "$FileOut"

18.38 compilWebVersion

#!/bin/bash
unalias grep
########################################################################
# Preliminary tests
########################################################################
if [ $# == 0 ]
then
	echo "No arguments !";
	exit;
fi
cpt=`ls /usr/bin 2>/dev/null |grep gawk|wc -l`
if [ $cpt == 0 ]
then
	echo "Install gawk !";
	exit;
fi

cpt=`ls /usr/bin 2>/dev/null |grep latex2html|wc -l`
if [ $cpt == 0 ]
then
	echo "Install latex2html !";
	exit;
fi


#
echo "Entering folder $1"
cd $1
#
echo "Trying *report*.tex"
cpt=`ls *eport*.tex 2>/dev/null|wc -l`
echo $cpt
if [ $cpt -ne 1 ]
then
	if [ $cpt -gt 0 ]
	then
		ls *eport*.tex
		echo "Ambiguity on the main file name !"
		exit;
	else
		echo "Trying *.tex"
		cpt=`ls *.tex 2>/dev/null|wc -l`
		echo $cpt
		if [ $cpt -ne 1 ]
		then
			ls *.tex
			echo "Ambiguity on the main file name !"
		exit;
		else
			f=`echo *.tex`;
		fi
	fi
else
	f=`echo *eport*.tex`;
fi

echo ""
echo "Main file: $f"
cp $f ${f/tex/backuptex}
title=`grep titlea $f |awk -v FS="[{}]" '{print $4}' | xargs`
echo "Title: $title\n"
echo ""
echo "Press ENTER if every thing's OK , Ctrl+C otherwise"
read


########################################################################
# Removing pdf
########################################################################
echo "##################################################################"
echo "Converting pdf to png"
echo "##################################################################"
rm *.pdf 2>/dev/null
../pdf2pngCleanUp



########################################################################
# latex work
########################################################################
echo "##################################################################"
echo "Formatting"
echo "##################################################################"


echo "Modifying figure width"
grep -nHFR \\\newcommand{\\\fitfig} ./* > tmp.tmp
ff=`gawk -F: '{print $1}' tmp.tmp`
if `test -e $ff`
then
	sed -i "s/{\\\fitfig}\[1\]{[#0-9\\\a-zA-Z]*}/{\\\fitfig}[1]{14cm}/g" $ff
fi

echo "Commenting xcolor"
grep -nHR .*{xcolor} ./* > tmp.tmp
ff=`gawk -F: '{print $1}' tmp.tmp`
if `test -e $ff`
then
	sed -i "s/.*usepackage.*{xcolor}*/%\\\usepackage[table]{xcolor} /g" $ff
fi

echo "Modifying for parshape"
grep -nHR .*\\\parshape ./* > tmp.tmp
ff=`gawk -F: '{print $1}' tmp.tmp`
if `test -e $ff`
then
	sed -i "s/.*\\\parshape/%/g" $ff
fi


rm tmp.tmp
echo "Modifying $f for undefined commands before \begin{document}"
old_value=".*\\\begin{document}";
new_value="\\\newcommand{\\\rowcolors}[3]{} \\\renewcommand{\\\arrayrulecolor}[1]{} \\\renewcommand{\\\rhead}[1]{} \\\renewcommand{\\\hypersetup}[1]{} \\\renewcommand{\\\lstset}[1]{} \\\renewcommand{\\\framebox}[1]{#1}  \\\renewcommand{\\\script}[1]{} \\\renewcommand{\\\command}[1]{} \\\renewcommand{\\\dtutext}[1]{#1\\\par} \\\begin{document}";
sed -i "s/$old_value/$new_value/g" $f


echo "##################################################################"
echo "Running pdflatex a first time on $f"
echo "##################################################################"
pdflatex $f

echo "##################################################################"
echo "Running bibtex on $f"
echo "##################################################################"
ff=*.aux
bibtex $ff

echo "##################################################################"
echo "Running pdflatex a second time on $f"
echo "##################################################################"
pdflatex $f

########################################################################
# latex 2 html and postformatting
########################################################################
echo "##################################################################"
echo "Now Running latex2html"
echo "##################################################################"

echo "Running latex2html on folder $1"
latex2html -html_version 4.0,ISO-8859-1 -address " " -split 2 $f -dir $1 -mkdir -t "$title"

echo "Done. If results are bad, check that the package xcolor has been commented."

echo "Formatting"
cp -r $1 "$1-bkp"
cd $1
rename "s/html/php/g" *.php
sed -i "s/[.]html/.php/g" *.php
sed -i "s:</HEAD>::g" *.php


old_value="<BODY >";
new_value="<? include('../_includes/haut.php');?>";
sed -i "s:$old_value:$new_value:g" *.php

old_value="<ADDRESS>";
new_value="<? include('../_includes/bas.php'); ?>";
sed -i "s:$old_value:$new_value:g" *.php

old_value="</ADDRESS>";
new_value="";
sed -i "s:$old_value:$new_value:g" *.php


old_value="</ADDRESS>";
new_value="";
sed -i "s:$old_value:$new_value:g" *.php

########################################################################
# Keywords
########################################################################
echo "##################################################################"
echo "Keywords"
echo "##################################################################"
keywords=`cat *php* | sed -e :a -e 's/<[^>]*>//g;/</N;//ba' | tr ' ' '\n'  | tr -d '[:punct:]' | grep -v '[^a-z]'| grep -E '[a-z]{3,}' | tr '[:upper:]' '[:lower:]' | grep -v -w -E 'the|and|for|from|with|used|which|are|that|this|will|can|been|should|using|all|one|two|three|has|taken|where|made|also|thus|though|have|when|not|such|figure|table|these|could|seen|given|nbsp|les|des|from|different|est|dans|une|our|qui|between|next|would|sont|its|see|son|plus|case|que|pour|suivant|nous|par|sur|each|but|than|only|other|main|figures|tables|more|there|value|values|were|was|low|high|around|since|very|order|per|into|first|because|found|them|done|good|their|really|here|got|big|better|well|away|shown|over|like|while|within|take|due|any|then|under|same|much|most|both|second|lot|use|get|pas|mais|alors|peut|plot|left|right' | sort | uniq -c| sort -rn|head -50 |sed 's/'[\ 0-9]'//g' |xargs |sed 's/[\ ]/,/g' `



echo "Keywords: $keywords"

../../keywordsSetUp.sh

old_value='KEYWORDSSHOULDGOHERE';
new_value="$keywords";
sed -i "s:$old_value:$new_value:g" *.php

cd ../


#final cleaning
texclean 2>/dev/null

18.39 LaunchSession.sh

#!/bin/bash

if [ $1 = "vortex" ]; then
    DIR="/work/publications/notes/"
    thunar "$DIR";
    gvim -S "$DIR""SessionVortex.vim"
fi

if [ $1 = "vortexcode" ]; then
    DIR="/work/VortexCode/VortexElements/"
    thunar "$DIR";
    gvim -S "$DIR""Session.vim"
fi


if [ $1 = "momentum" ]; then
    DIR="/work/publications/notes/"
    thunar "$DIR";
    gvim -S "$DIR""SessionMomentum.vim"
fi


if [ $1 = "book" ]; then
    DIR="/work/publications/book/"
    thunar "$DIR";
    gvim -S "$DIR""Session.vim"
fi

18.40 rhythmboxstartlong

#! /bin/sh
#launching 
rhythmbox&
#after a while using the client to play
sleep 20;rhythmbox-client --play --hide&

18.41 convertEnc

#!/bin/bash
#
# Conversion de toute une arborescence d'un encodage dans un autre.
# Exemple d'utilisation : 
#  mise a jour de sa distribution Linux de iso-8859-1 vers UTF-8
#
# Necessite : convmv et iconv
#
# Utilisation :
# $ ./convertEnc.sh Documents/Divers 
#
# IMPORTANT : faites une copie de vos donnees et travaillez sur cette copie !!
# (Je ne peux etre tenu responsable si vous corrompez vos donnees, soyez prudents)
#
# Ce script ne demande qu'a etre ameliore...
#
## Protection contre les espaces (JacquesF -> guillemets autour des variables ou cela n'etait pas fait)
#
# Sebastien de Boissieu (c) 2006
# $Id: convertEnc.sh,v 1.8.2.1 2007/03/17 22:39:29 sebastien Exp $
# Licence : GPL 2

FROM="iso-8859-1"
TO="UTF-8"

echo "Conversion de $FROM en $TO"

# Procedure pour renommer un fichier si nom deja existant
renomme()
{
nbe=0
num="_$nbe"
nouvnom="$1"
while [ -e "$nouvnom" ];
do
	let nbe=nbe+1
	num="_$nbe"
	nouvnom="$1$num"
done
export nouvnom
}

# Conversion recursive des noms de fichiers et repertoires
convert_names()
{
echo "Conversion des NOMS de fichiers et repertoires"
#convmv -r -f $FROM -t $TO --qfrom --qto --notest "$1"
convmv -r -f $FROM -t $TO --notest "$1"
echo ""
}

# Routine de conversion du contenu d'un fichier
do_convert()
{
fic="$1"
echo "  Fichier $fic"
# Lecture du type mime
encForm=`file -bi "$fic" | awk -F "charset=" '{ print $2 }'`
if [ !  "$encForm" = "" ]; then
	# le fichier possede un charset
	echo "  -> $encForm"
	if [ ! "$encForm" = "$TO" ]; then
		# ce charset est different de celui vise
		# nom du fichier converti temporaire
		renomme "$fic"_"$TO"
		nouv_fic="$nouvnom"
		# la conversion
		iconv -f "$encForm" -t $TO "$fic" -o "$nouv_fic"
        # reussite ou echec de la commande cruciale ?
        status=$?
        if [ $status == 0 ]; then
            # Pour conserver la/les date(s) :
            touch -r "$fic" "$nouv_fic"
            # Pour conserver le proprietaire
            chown --reference "$fic" "$nouv_fic"
            # pour conserver les droits :
            chmod --reference "$fic" "$nouv_fic"
            # on ecrase l'ancien fichier par le nouveau
            if [ -w "$fic" ] ; then
                ### JacquesF
                ### Sur mes tests, si le fichier n'est pas accessible en ecriture
                ### un mv -f sur le fichier remplace pourtant celui-ci (droits d'ecriture dans le repertoire)
                mv -f "$nouv_fic" "$fic"
            else
                echo "Le fichier $fic n'est pas accessible en ecriture"
                echo "Le fichier converti se nomme $nouv_fic"
            fi
        else
            echo "   -> Echec: $nouv_fic corrompu ?"
            echo "             $fic conserve."
        fi
	fi
fi

}

# Conversion recursive du contenu des fichiers texte
convert_content()
{
#echo "Conversion du contenu des fichiers"
if [ -d "$1" ]; then
	# c'est un repertoire
	if [ -x "$1" ]; then
		# On peut entrer dans le repertoire
		echo "Entree dans : $1"
        ### Protection si le repertoire contient un espace 
		chemin_orig="`pwd`"
		cd -- "$1"
		
		# liste complete (avec fichiers caches)
        # Attention : si liste trop longue ca peut planter 
        # passer par xargs --> man xargs
		 for fic in `ls * .* | xargs` ; do 
		   if [ $fic != "." -a $fic != ".." ]; then
                base_fic=$(basename -- "$fic")
                #echo "$fic -> $base_fic"
                echo " Analyse de : $base_fic"
                # recursivite
                if [ -d "$base_fic" ]; then
                # Si repertoire, on execute la procedure dessus
                convert_content "$base_fic"
                else
                # sinon on fait la conversion
                do_convert "$base_fic"
                fi
            fi
		done
		echo "Sortie de : $1"
		cd "$chemin_orig"
	else
		echo "Entree INTERDITE dans : $1"
	fi
else
	# On fait la conversion sur le fichier
	do_convert "$1"
fi

}
#=======================================

# Debut execution
if [ $# -gt 0 ]; then
    ### Alerte avant lancement du script
    clear
    echo -e "\n\nATTENTION : ne travaillez jamais sur les donnees d'origine !"
    echo -e "\nEtes-vous certain de vouloir modifier ces fichiers ?"
    echo -e "\tAppuyez sur Ctrl-C pour annuler ou sur Return pour continuer \c"
    read Tempo
    echo
    ### Fin de l'alerte 
	# pour l'instant on ne considere que le 1er argument
	echo "Sur: $1"
	echo ""
    ###   On n'est pas a l'abri d'un repertoire avec des espaces dans le nom 
	convert_names "$1"
	echo "============="
	# Remarque : si $1 est un repertoire dont le nom a ete converti
	#  le contenu de $1 est obsolete.
	#  on le converti :
	nom=$(echo "$1" | iconv -f $FROM -t $TO)
    convert_content "$nom"
	
	echo "Fini"
else
	echo "Utilisation :"
	echo "$0 chemin/repertoire"
    ### Alerte par precaution
    echo "Ne travaillez jamais sur les donnees d'origine mais seulement sur une copie de celles-ci" 
fi

18.42 pdfAlternRotation

#!/bin/sh
#############################################################
# Altern Rotation :
#############################################################
# Rotate by 180 degrees every other page of a pdf
# written by Emmanuel Branlard
# Oct 2009
# This script uses pdftk
# Feel free to modify and adapt it
# To separate 'file.pdf' into single page files :
#     pdftk file.pdf burst
#############################################################
echo 'Every other pdf file in the current directory will be rotated'
echo 'Warning : do a backup of the pdf files first'
echo '	Press Ctrl+C to cancel'
echo '	Press Enter to Continue';
read reply

j=0
# looping on all pdf files in the folder
for i in *.pdf ; do
  	j=`expr $j + 1`;
	printf 'File %d : %s ' $j $i
	if [ `expr $j % 2` -eq 0 ]; then
		printf ' -> Rotating... ';
		cp $i $i.bkp
		pdftk $i.bkp cat 1S output $i
		rm $i.bkp
	fi
	echo ''
done	

echo 'Do you want to concatenate the file ?'
echo '	Press Ctrl+C to cancel'
echo '	Press Enter to Continue';
read reply
 
echo 'Binding...'
pdftk *.pdf cat output bind.pdf

echo "Done. File 'bind.pdf' created"

18.43 4terms

#!/bin/sh
xfce4-terminal -T T4 --geometry 80x26+800+450 &
xfce4-terminal -T T1 --geometry 80x26+84+0 &
xfce4-terminal -T T3 --geometry 80x26+800+0 &
xfce4-terminal -T T2 --geometry 80x26+84+450 &

18.44 MoveWindowLeftRight.sh

#!/bin/bash
 
pywo put -p $1
pywo put -p M --xinerama

18.45 ScreenConf.sh

#!/bin/bash 

echo "----------------------- BEGIN SCREENCONF ---------------------------"
sleep 3
echo "----------------------- BEGIN SCREENCONF ---------------------------"

#x=`xrandr --query |grep 2720 |wc -l`; #home


x=`xrandr --query |grep 1920 |wc -l`;  #riso

echo "x:"$x

if [[ $x > 0 ]] 
then 
    #/home/manu/Config/profiles/screenlayout/RisoScreenPersoLaptop.sh
    xrandr --output LVDS-1 --mode 1440x900 --pos 1920x0 --rotate normal --output VGA-1 --mode 1920x1080 --pos 0x0 --rotate normal
fi

18.46 xsetnumlock.c

#include <X11/extensions/XTest.h>
#include <X11/keysym.h>

/*
Requires:
aptitude install libxcb-keysyms1-dev libxtst-dev
Compiled with:
gcc -I/usr/include/X11 -L/usr/lib/X11 -o xsetnumlock xsetnumlock.c -lX11 -lXtst  */

int main(void)
{
Display* disp = XOpenDisplay(NULL);

if (disp == NULL) return 1;

XTestFakeKeyEvent(disp, XKeysymToKeycode(disp, XK_Num_Lock),
True, CurrentTime);
XTestFakeKeyEvent(disp, XKeysymToKeycode(disp, XK_Num_Lock),
False, CurrentTime );
XCloseDisplay(disp);

return 0;
}

18.47 ref

#! /bin/sh
#############################################################
# Ref 
#############################################################
# Description : uses locate to search through references
# Written by : Emmanuel Branlard
# Date : Dec 2011
# Dependencies : 
# License : Feel free to modify and adapt it
# Use: ref Word1 Word2 etc.
#############################################################

a="";
for i
do
    a=$a" "$i;
    b=$b"|"$i;
done
# locate -iA $a |grep --colour=never _Refs|cut -b 13-|grep --colour=auto -i -E "$b"
locate -iA $a |grep --colour=never _Refs|grep --colour=auto -i -E "$b"

18.48 DEFAULT

#!/bin/bash
#############################################################
# Default script:
#############################################################
# Description :
# Written by : Emmanuel Branlard
# Date : Oct 2009
# Dependencies : 
# License : Feel free to modify and adapt it
# Note : To separate 'file.pdf' into single page files :
#     pdftk file.pdf burst
#############################################################
echo "Script name is		[$0]"
echo "This Process ID is		[$$]"
echo "This Parameter Count is	[$#]"
echo "All Parameters		[$@]"
echo "The FLAGS are			[$-]"
#############################################################
#sh syntax
# if [ $# -eq 0 ]; then echo "No arguments"; fi
# Expression comparison : !EX1 -a Ex2, Ex1 -o Ex2
# String comp : S1 = S2, S1!=S2
# Int comp :    I1 -ne I2
#bash syntax
#if [ $# == 0 ]; then echo "No arguments"; fi
# for f in *
# do
  # echo "$f"
# done








Emmanuel Branlard