Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 06/11/2011, à 17:26

peterp@n

[Bash][Quicklist-Nautilus] fixer les accents dans les noms de dossier

Bonjour,

Vu sur Askubuntu : lanceurs et quicklists personnalisés pour Unity
Il y a un script pour mettre à jour la quicklist de nautilus avec les signets.
J'ai télécharger le script, mis les droits d'exécution et je l'ai lancer une première fois. Ca marche très bien sauf les noms de répertoires avec des accents.
Capture Quicklist Nautilus
Je pense savoir ou il faut modifié le script mais je n'y connais rien en bash.
Voici le script :

#!/bin/bash
# tabsize: 4, encoding: utf8
#
# © 2011 con-f-use@gmx.net. Use permitted under MIT license:
#     http://www.opensource.org/licenses/mit-license.php
# 
# CONTRIBUTORS: Chris Druif <cyber.druif@gmail.com>
#               Scott Severance <http://www.scottseverance.us/>
# 
# This script updates the unity quicklist menu for nautilus to contain the user
# bookmarks. The updates will have efect after unity is restarted (either on
# the next login or by invoking 'unity --replace').

# location of template and unity bar launchers
nautempl="/usr/share/applications/nautilus-home.desktop"
target="$HOME/.local/share/applications/nautilus-home.desktop"
bookmarks="$HOME/.gtk-bookmarks"

# backup if file already exists
if [ -e "$target" ]; then
    echo "Creating backup of: $target."
    mv -n "$target" "$target.bak"
fi

# copy template
cp "$nautempl" "$target"

sed -i "s/\(OnlyShowIn=GNOME;\)/\1Unity;/" "$target"

echo "X-Ayatana-Desktop-Shortcuts=" >> $target

bmcount=0
while read bmline; do
    bmcount=$(($bmcount+1))     # number of current bookmark
    bmname=${bmline#*\ }        # name of the bookmark
    bmpath=${bmline%%\ *}       # path the bookmark leads to
    # deal with bookmarks that have no name
    if [ "$bmname" = "$bmpath" ]; then
        bmname=${bmpath##*/}
    fi
    # fix spaces in names and paths
    bmname="$(echo "$bmname" | sed 's/%20/ /g')"
    bmpath="$(echo "$bmpath" | sed 's/%20/ /g')"
    # extend shortcut list with current bookmark
    sed -i "s/\(X-Ayatana-Desktop-Shortcuts=.*\)/\1Scg${bmcount};/" "$target"
    # write bookmark information
    cat - >> "$target" <<EOF

[Scg$bmcount Shortcut Group]
Name=$bmname
Exec=nautilus "$bmpath"
OnlyShowIn=Unity
EOF
done < "$bookmarks"

# Add a root file manager entry
sed -i "s/\(X-Ayatana-Desktop-Shortcuts=.*\)/\1RootFM;/" "$target"
cat - >> "$target" <<EOF

[RootFM Shortcut Group]
Name=Root
Exec=gksudo nautilus
OnlyShowIn=Unity
EOF

exit 0

Je pense que c'est ici qu'il faut rajouter un fix :

while read bmline; do
    bmcount=$(($bmcount+1))     # number of current bookmark
    bmname=${bmline#*\ }        # name of the bookmark
    bmpath=${bmline%%\ *}       # path the bookmark leads to
    # deal with bookmarks that have no name
    if [ "$bmname" = "$bmpath" ]; then
        bmname=${bmpath##*/}
    fi
    # fix spaces in names and paths
    bmname="$(echo "$bmname" | sed 's/%20/ /g')"
    bmpath="$(echo "$bmpath" | sed 's/%20/ /g')"
    
    #ICI fix accent in names ICI
    bmname=$(echo "$bmname" | "une commande qui convertit les accent
    
    # extend shortcut list with current bookmark
    sed -i "s/\(X-Ayatana-Desktop-Shortcuts=.*\)/\1Scg${bmcount};/" "$target"
    # write bookmark information
    cat - >> "$target" <<EOF

Voila, si quelqu'un a une idée ? En attendant je continue les recherches.


Ubuntu 14.04 64bits, Raspbian “wheezy”, Tango Studio sauce debian
Assistance - Développement - Formations FreeCAD (logiciel 3d)

Hors ligne

#2 Le 06/11/2011, à 18:25

peterp@n

Re : [Bash][Quicklist-Nautilus] fixer les accents dans les noms de dossier

Bon j'avance :

# fix accent in names
    bmname="$(echo "$bmname" | sed 's/%C3%A9/é/')"

Avec ça j'obtient :
Tél%C3%A9chargements

Le premier "é" est remplacer mais pas le suivant...
Donc je fait ça

# fix accent in names
    bmname="$(echo "$bmname" | sed 's/%C3%A9/é/' | sed 's/%C3%A9/é/')"

Cool, ça marche.
Par contre ça marche que pour les é si il n'y en a pas plus que 2
Il y a une meilleure solution ?


Ubuntu 14.04 64bits, Raspbian “wheezy”, Tango Studio sauce debian
Assistance - Développement - Formations FreeCAD (logiciel 3d)

Hors ligne

#3 Le 06/11/2011, à 18:47

frafa

Re : [Bash][Quicklist-Nautilus] fixer les accents dans les noms de dossier

Bonjour,
bizarre car normalement les noms sont encodés en utf8 dans $HOME/.gtk-bookmarks
chez moi genre pour Vidéos j'ai:

file:///home/frafa/Vid%C3%A9os Vidéos

je n'ai pas testé le script mail nortmalement il relève la seconde occurence pour bmpath
bmpath=${bmline%%\ *}
et donc normalement tu ne devrait pas avoir ce souci
fait voit contenu de ton fichier $HOME/.gtk-bookmarks:

cat $HOME/.gtk-bookmarks

pour sed il te faut rajouter g pour modif toute les occurences:

bmname="$(echo "$bmname" | sed 's/%C3%A9/é/g')"

ou

bmname="$(sed 's/%C3%A9/é/g' <<<"$bmname")"

Hors ligne

#4 Le 06/11/2011, à 20:03

peterp@n

Re : [Bash][Quicklist-Nautilus] fixer les accents dans les noms de dossier

Salut frafra,
Merci pour la commande sed.
La commande que tu me demande retourne ça :

cat $HOME/.gtk-bookmarks
file:///home/jo/Documents
file:///media/stockage/Musique/Ma%20musique
file:///home/jo/Ubuntu%20One Ubuntu One
file:///media/softwares
file:///media/stockage
file:///home/jo/T%C3%A9l%C3%A9chargements
file:///home/jo/Images
file:///home/jo/Vid%C3%A9os

Bizarre, j'ai pas  Vid%C3%A9os Vidéos comme toi.
Je vais faire des tests.

Sinon le script écrit ce fichier au final :

cat .local/share/applications/nautilus-home.desktop

sans le fix, le script écrit :

[Scg6 Shortcut Group]
Name=T%C3%A9l%C3%A9chargements
Exec=nautilus "file:///home/jo/T%C3%A9l%C3%A9chargements"
OnlyShowIn=Unity

Et ça affiche texto T%C3%A9l%C3%A9chargements dans la quicklist.

avec le fix :

[Scg6 Shortcut Group]
Name=Téléchargements
Exec=nautilus "file:///home/jo/T%C3%A9l%C3%A9chargements"
OnlyShowIn=Unity

Et ça affiche bien Téléchargements dans la quicklist.

Edit :
Bon ben d'accord,
Le fait de rajouter le nom dans .gtkbookmark permet d'avoir le bon affichage des accents dans la quicklist (avec ou sans fix).
Mais il faut aussi modifié le chemin du dossier.
Donc le fix donnce ça :

# fix accent in names
    bmname="$(echo "$bmname" | sed 's/%C3%A9/é/g')"
    bmpath="$(echo "$bmpath" | sed 's/%C3%A9/é/g')"

Il faut le faire pour é|è|ê|à|....???

Dernière modification par peterp@n (Le 06/11/2011, à 20:44)


Ubuntu 14.04 64bits, Raspbian “wheezy”, Tango Studio sauce debian
Assistance - Développement - Formations FreeCAD (logiciel 3d)

Hors ligne

#5 Le 13/11/2011, à 21:15

thierrybo

Re : [Bash][Quicklist-Nautilus] fixer les accents dans les noms de dossier

Bonjour,

je suis arrivé sur ton post après avoir suivi le même chemin que toi. Je ne suis pas un pro du bash, mais un pro de google smile et j'ai trouvé dans ce forum même les commandes qui permettent de résoudre le problème ... en ligne de commande. Le problème est que je ne réussi pas à le faire fonctionner dans le script à cause de mon *incompétence" dans ce domaine. Peut-être auras-tu plus de chance que moi (j'ai essayé avec le code python). Le post ce trouve numéro 5.

Alain.g a écrit :

Salut,

Pas besoin de t'embêter comme ça avec sed, tu peux le faire en utilisant Perl, Php,  Python ou Ruby dans ton script bash.

Des exemples sont donnés ici : http://tokigun.net/blog/rss2.php
(je donne le lien rss car le blog est out et je n'ai pas trouvé de version en cache)

ruby :

echo $var | ruby -ruri -p -e '$_=URI.decode$_'

php :

echo $var | php -r 'echo urldecode(file_get_contents("php://stdin"));'

perl :

echo $var | perl -pe 's|%([0-9a-f]{2})|pack('C',hex($1))|segi;'

python :

echo $var | python -c 'import sys,urllib;sys.stdout.write(urllib.unquote(sys.stdin.read()))'

J'ai testé les quatre solutions avec

var=%C3%80%20la%20m%C3%AAme%20p%C3%A9riode

Devant donner : À la même période
Le résultat a été correct dans tous les cas .

J'ai plusieurs façon mais je n'arrive pas à récupérer dans le script la sortie de commande.

Hors ligne

#6 Le 14/11/2011, à 11:00

peterp@n

Re : [Bash][Quicklist-Nautilus] fixer les accents dans les noms de dossier

Essayes en mettant ça dans le script :

# fix accent in names
    bmname="$(echo "$bmname" | python -c 'import sys,urllib;sys.stdout.write(urllib.unquote(sys.stdin.read()))')"
    bmpath="$(echo "$bmpath" | python -c 'import sys,urllib;sys.stdout.write(urllib.unquote(sys.stdin.read()))')"

J'ai pas Unity sous la main pour tester.

Edit : c'est bon pour moi, ça marche avec la commande en python intégrer dans le script comme ci dessus.

Dernière modification par peterp@n (Le 14/11/2011, à 22:37)


Ubuntu 14.04 64bits, Raspbian “wheezy”, Tango Studio sauce debian
Assistance - Développement - Formations FreeCAD (logiciel 3d)

Hors ligne

#7 Le 15/11/2011, à 20:28

thierrybo

Re : [Bash][Quicklist-Nautilus] fixer les accents dans les noms de dossier

Whaou super ça marche, pourtant j'étais sur d'avoir essayé ça ....

J'ai vu que tu avais mis à jour sur le site le code avec cette modif, tu pourrais remplacer le commentaire
# fix accents in names and paths (for french users)
par
# Replace %xx escapes by their single-character equivalent (fix for accented letters and special characters in names and paths)

car ce n'est pas spécifique au français.

Sinon en dehors des accents j'ai des "trous" dans la liste :
infobulle001.png

En fait dans la liste de mes signets il s'agit de signets vers des répertoires samba (URI commençant par smb://). Si je clique sur la ligne vide il monte bien le partage samba. J'ai ensuite manuellement relancé le script après montage et après unity --replace les noms apparaissent. Bon c'est pas très grave !

Hors ligne