web-dev-qa-db-fra.com

Pourquoi gedit continue-t-il d'ouvrir de manière aléatoire de nouvelles instances lors de l'ouverture de fichiers à partir de Nautilus?

Oh, j'adore 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 fichiers .php à ouvrir avec gedit chaque fois que je double-clique dessus dans Nautilus. Maintenant, le comportement est étrange.

  1. Je n'ai pas de gedit en cours d'exécution
  2. Je double clique sur un fichier à ouvrir
  3. Une fenêtre de gedit s'ouvre et le fichier se charge
  4. 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, entraînant l'exécution de 2 gedits.

Que A ou B arrive semble être totalement aléatoire et continue à aller infiniment. Cela signifie que je double-clique sur 100 fichiers et que je risque de me retrouver avec 60 gedits, dont certains auront 1 onglet, certains auront 2 onglets, certains auront 3 onglets ...

Ceci est extrêmement agaçant et une solution à ce problème serait très appréciée. 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 déjà testées.

32

Pourquoi...

gedit a un algorithme assez intéressant pour déterminer si elle ouvre une nouvelle instance ou si elle 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

  1. dans le même numéro d'écran et nom d'affichage
  2. dans le même espace de travail
  3. plus de 25% des bords du port de vue

Si toutes sont vraies, 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é - le seul moyen réaliste de changer le comportement est de changer l'algorithme ...

Comment...

Ce qui suit est un moyen rapide d’obtenir un moyen cohérent d’ouvrir Gedit ... il ouvrira toujours une nouvelle instance.

installez les outils de développement de base

Sudo apt-get install devscripts build-essential fakeroot 

récupère le 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

enter image description here

ajoutez return FALSE; comme indiqué et enregistrez.

Cela revient à toujours quitter la routine en disant "Je ne cours pas 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 paquet unique

OK, nous devons attribuer un nom unique au package pour empêcher les mises à jour du référentiel de remplacer votre package modifié.

gedit debian/changelog

ajoutez maintenant +yourname à la version de la première ligne et enregistrez le fichier i.e.

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.

enter image description here

construit le paquet

Sudo apt-get build-dep gedit
debuild -i -us -uc -b

Allez prendre un café ...

cd ..
Sudo dpkg -i gedit*.deb

Question liée:

  1. Comment empêcher la mise à jour d'un paquet spécifique?
39
fossfreedom

Je voulais que tous les fichiers soient ouverts dans une seule fenêtre de gedit. Je n'ai pas trouvé cette information ailleurs, mais avec les modifications suivantes, j'ai réussi à ouvrir tous les fichiers texte dans une seule fenêtre sous forme de nouveaux onglets, peu importe la façon dont je les ai ouverts (via launcher, via nautilus, via Gnome DO).

  1. Obtenez le numéro d'affichage: tapez echo $DISPLAY dans la ligne de commande. par exemple. vous obtenez :0 comme numéro d'affichage.

  2. Ouvrez /usr/share/applications/gedit.desktop en tant que superutilisateur avec un éditeur de texte.

  3. Changer la ligne en disant:

    Exec=gedit %U
    

    à

    Exec=gedit --display=:0 %U
    

    :0 est votre numéro d'affichage.

13
Tim Banchi

Cela ne se produit pas au hasard

Par défaut, Gedit n'est pas fait pour ouvrir plusieurs instances, mais une seule par écran. Si vous ouvrez dans l’affichage là où c’est pas encore, Gedit ouvrira des fichiers dans Gedit qui existent maintenant dans cet affichage depuis le fichier ouvert.

Pour que vous puissiez faire en sorte que la 1ère instance de gedit soit sur Tous les espaces de travail, elle suit votre affichage actif. Ou travaillez sur chaque espace de travail avec chaque projet et chacun avec ses propres Gedit ouverts. Dans les raccourcis clavier, vous pouvez créer un nouveau raccourci pour basculer la fenêtre sur tous les espaces de travail.

OU il est possible de toujours l’ouvrir dans une nouvelle instance en utilisant la commande de raccourci dans Ouvrir avec .. gedit --new-window

Vous pouvez donc essayer dans les propriétés php ouvrir avec reset et mettre une nouvelle ouverture avec juste Gedit

en utilisant gedit --help-all ull voir une autre option d’ouverture avec gedit.

Et vous pouvez également essayer de supprimer gedit avec tous les fichiers de configuration et de l’installer proprement en utilisant Sudo apt-get purge gedit && Sudo apt-get clean && Sudo apt-get update && Sudo apt-get install gedit

MISE À JOUR: J'ai été capable de reproduire. Lorsque vous déplacez la fenêtre un peu hors de l'écran, puis que vous ouvrez un fichier, celui-ci s'ouvre dans une nouvelle fenêtre. Il pense en quelque sorte que c'est dans un autre affichage.

2
Kangarooo

Cela a commencé à m'arriver. Je n'ai trouvé aucun fichier de configuration pertinent et j'ai même essayé de purger + nettoyer. Enfin trouvé ce que c'était. La fenêtre de Gedit s’ouvrait telle qu’elle semblait avoir été maximisée, mais ce n’était pas le cas. J'ai appuyé sur le bouton d'agrandissement de la fenêtre et le problème a été résolu! Notez que la fenêtre n'a pas changé de taille, seuls les coins sont passés du rond au carré. Il semble que cela doit être un bug dans l'algorithme @ fossfreedom décrit ci-dessus.

Remarque: lorsque vous fermez la fenêtre, l'état d'agrandissement/minimisation doit être stocké quelque part dans une configuration utilisateur. Cet état survit à purge + clean, et il ne figure pas non plus dans la config Gedit par utilisateur.

1
spinkus