#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.
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 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.
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 :
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