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

32

Oh, 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 .phpfichiers à 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 de 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 ennuyant 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.

Richard Rodriguez
la source

Réponses:

39

Pourquoi...

gedit a 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.cde la fonction static boolean is_in_viewport, l’algorithme teste si l’instance gedit en cours 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.

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

entrez la description de l'image ici

ajoutez return FALSE;comme indiqué et enregistrez.

Cela permet de toujours quitter la routine en disant "je ne cours pas dans une fenêtre et donc toujours ouvrir une nouvelle instance"

Si vous l'utilisez, return TRUE;cela ouvrira toujours 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

maintenant ajouter +yournameà la version de première ligne et enregistrer le fichier à savoir

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.

entrez la description de l'image ici

construire 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?
fossfreedom
la source
1
Ceci, mon monsieur, est malade! Merci beaucoup, espérons que cela fonctionnera ...
Richard Rodriguez
... certainement lors de mes tests ... NB - J'ai utilisé l'observation des autres réponses selon laquelle si vous faites glisser gedit pour superposer les bords, une nouvelle instance est ouverte, mais si vous avez gedit sur le bureau, la nouvelle instance est ouverte. un onglet. Avec la compilation ci-dessus, il s’ouvre toujours dans une nouvelle instance ou un nouvel onglet, en fonction de la compilation avec "return FALSE" ou "return TRUE".
fossfreedom
Je confirme officiellement cette solution de TRAVAIL!
Richard Rodriguez
3
sainte sh * t @fossfreedom, je m'incline devant vous, monsieur, vous l'avez fait cette fois-ci, la qualité et la solution de cette réponse sont imba. Si je pouvais, je passerais toute la journée à appuyer sur le bouton de vote! Gj.
Bruno Pereira
2
On dirait qu'il aurait peut-être été préférable de faire une demande d'extraction pour avoir une variable de configuration et de faire un simple (pseudo-code) "if $ config-variable, puis renvoyer FALSE". La méthode proposée vous bloque indéfiniment des mises à jour.
pbhj
13

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 $DISPLAYdans la ligne de commande. par exemple, vous obtenez :0comme numéro d'affichage.

  2. Ouvrir en /usr/share/applications/gedit.desktoptant que superutilisateur avec un éditeur de texte.

  3. Changer la ligne en disant:

    Exec=gedit %U
    

    à

    Exec=gedit --display=:0 %U
    

    :0est votre numéro d'affichage.

Tim Banchi
la source
2
Bien mieux que de recompiler gedit et de faire des hacks de paquets bizarres. Merci!
rapport
1
Exécuter avec cette option à partir de la ligne de commande n'empêche pas geditd'ouvrir de nouvelles instances (Windows). Au moins dans la version actuelle 3.18.
alfC
fonctionne pour moi dans la version 3.28.1 à partir de la ligne de commande et de l'interface graphique. a besoin d'un redémarrage si
efie
2

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 quel fichier est 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

utiliser gedit --help-allull 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 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- en déplaçant la fenêtre un peu hors de l'écran puis en ouvrant un fichier s'ouvre dans une nouvelle fenêtre. Il pense en quelque sorte que c'est dans un autre affichage.

Kangourou
la source
Oui, cela arrive au hasard. C'est le point entier. L'implémentation est buggée / pas robuste. Par exemple, je suis désemparé, mais gedit a maintenant décidé au hasard de passer à ce nouveau mode fenêtre après avoir fonctionné comme d'habitude plus tôt dans la
journée
1

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 soit un bogue de 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 configuration par utilisateur de Gedit.

Spinkus
la source