Why does gedit keep randomly opening new instances when opening files from nautilus?
Why...
gedit
has quite an interesting algorithm to determine whether it opens a new instance or if it opens in a tab in an existing instance.
Located in the source file gedit-app.c
in the function static boolean is_in_viewport
, the algorithm tests if the current gedit instance is
- in the same screen number and display name
- in the same workspace
- greater than 25% of the edges of the view port
If all are true then gedit opens in the same instance in a new tab otherwise it opens in a new window.
In summary - the only realistic way of changing the behaviour is to change the algorithm...
How...
The following is a quick way to get a consistent way of opening gedit... it will always open a new instance.
install the basic development tools
sudo apt-get install devscripts build-essential fakeroot
get the source
cd ~/Downloads
mkdir build
cd build
apt-get source gedit
cd gedit-3.2*
make the change
Open gedit-app.c
gedit gedit/gedit-app.c
add return FALSE;
as shown and save.
What this does is to always exit the routine saying "i'm not running in a viewport and therefore always open a new instance"
If you use return TRUE;
this will always open in an existing instance of gedit in a new tab...
give it a unique package name
OK, we need to give the package a unique name to prevent repository updates from overwriting your changed package
gedit debian/changelog
now append +yourname
to the top line version and save the file i.e.
Note - to be absolutely sure - after installing the modified package below, lock the version as per the linked question below.
build the package
sudo apt-get build-dep gedit
debuild -i -us -uc -b
Go for a coffee...
cd ..
sudo dpkg -i gedit*.deb
Linked Question:
- How to prevent updating of a specific package?
I wanted to have all files opened in only one gedit window. I didn't find this information somewhere else, but with the following changes I managed to have all text files open in only one window as new tabs, no mather how I open them (via launcher, via nautilus, via Gnome DO).
Get the display number: type
echo $DISPLAY
in the command line. e.g. you get:0
as your display number.Open
/usr/share/applications/gedit.desktop
as superuser with a text editor.Change the line saying:
Exec=gedit %U
to
Exec=gedit --display=:0 %U
where
:0
is your display number.
This doesnt happen randomly
By default Gedit isnt made to open many instances but one one each display. If u open in display where isnt yet Gedit will open files in Gedit witch exists now in that display from witch is opened file.
So u can make 1st instance of gedit to be on All workspaces so it follows ur active display. Or work on each workspace with each project and each with its own opened Gedit`s. In keyboard shortcuts u can make new shortcut for toggling window beeing on all workspaces.
OR its possible to make it allways open in new instance using shortcut command in Open With.. gedit --new-window
So u can try in php properties open with reset and put new opening with just Gedit
using gedit --help-all
ull see other option of opening with gedit.
And u can also try removing gedit with all configuration files and installing it clean using sudo apt-get purge gedit && sudo apt-get clean && sudo apt-get update && sudo apt-get install gedit
UPDATE: I was able to reproduce- when moving window a little off screen then opening some file opens in new window. It somehow thinks that its in another Display.