Oh comme j'aime Ubuntu et toutes ses fonctionnalités, mais ce "bug" me met en colère depuis si longtemps et j'ai finalement décidé de demander de l'aide ici.
J'ai assigné tous les .php
fichiers à ouvrir avec gedit chaque fois que je double-clique dessus dans nautilus. Maintenant, le comportement est étrange.
- Je n'ai pas gedit en cours d'exécution
- Je double-clique sur un fichier à ouvrir
- Une fenêtre gedit s'ouvre et le fichier se charge
- Je double-clique sur un autre fichier à ouvrir
Maintenant, il y a 2 résultats possibles :
5A) Le fichier s'ouvre dans la même fenêtre gedit dans un nouvel onglet
5B) Le fichier s'ouvre dans une nouvelle fenêtre gedit, ce qui entraîne l'exécution de 2 gedits.
Que A ou B se produise semble être totalement aléatoire et continue indéfiniment. Cela signifie que je double-clique sur 100 fichiers et je pourrais me retrouver avec 60 gedits, dont certains auront 1 onglet, certains auront 2 onglets, certains auront 3 onglets…
C'est extrêmement ennuyeux et un correctif pour cela serait très apprécié. Quelqu'un a-t-il déjà essayé de résoudre ce problème ?
Cela s'est produit dans Ubuntu 10.04, 10.10 et 11.10. Toutes les versions d'Ubuntu que j'ai jamais testées.
Meilleure réponse
Pourquoi…
gedit
possède un algorithme assez intéressant pour déterminer s'il ouvre une nouvelle instance ou s'il s'ouvre dans un onglet d'une instance existante.
Situé dans le fichier source gedit-app.c
dans la fonction static boolean is_in_viewport
, l'algorithme teste si l'instance actuelle de gedit est
- dans le même numéro d'écran et le même nom d'affichage
- dans le même espace de travail
- plus de 25 % des bords de la fenêtre
Si tout est vrai, alors gedit s'ouvre dans la même instance dans un nouvel onglet, sinon il s'ouvre dans une nouvelle fenêtre.
En résumé - la seule façon réaliste de changer le comportement est de changer l'algorithme…
Comment…
Ce qui suit est un moyen rapide d'obtenir une manière cohérente d'ouvrir gedit… il ouvrira toujours une nouvelle instance.
installer les outils de développement de base
sudo apt-get install devscripts build-essential fakeroot
obtenir la source
cd ~/Downloads
mkdir build
cd build
apt-get source gedit
cd gedit-3.2*
faire le changement
Ouvrez gedit-app.c
gedit gedit/gedit-app.c
ajouter return FALSE;
comme indiqué et enregistrez.
Ce que cela fait, c'est toujours quitter la routine en disant "je ne suis pas en cours d'exécution dans une fenêtre et donc toujours ouvrir une nouvelle instance"
Si vous utilisez return TRUE;
cela s'ouvrira toujours dans une instance existante de gedit dans un nouvel onglet…
donnez-lui un nom de package unique
OK, nous devons donner au package un nom unique pour empêcher les mises à jour du référentiel d'écraser votre package modifié
gedit debian/changelog
ajoutez maintenant +yourname
à la version supérieure et enregistrez le fichier, c'est-à-dire
Remarque - pour être absolument sûr - après avoir installé le package modifié ci-dessous, verrouillez la version conformément à la question liée ci-dessous.
construire le package
sudo apt-get build-dep gedit
debuild -i -us -uc -b
Allez prendre un café…
cd ..
sudo dpkg -i gedit*.deb
Question liée :
- Comment empêcher la mise à jour d'un package spécifique ?