¿Por qué gedit sigue abriendo nuevas instancias al azar al abrir archivos de nautilus?

32

Oh, cómo amo Ubuntu y todas sus características, pero este "error" me ha estado enojando durante tanto tiempo y finalmente he decidido pedir ayuda aquí.

He asignado todos los .phparchivos para que se abran con gedit cada vez que hago doble clic en ellos en nautilus. Ahora, el comportamiento es extraño.

  1. No tengo gedit corriendo
  2. Hago doble clic en un archivo para abrirlo
  3. Se abre una ventana gedit y se carga el archivo
  4. Hago doble clic en otro archivo para abrirlo

Ahora, hay 2 resultados posibles:

5A) El archivo se abre en la misma ventana de gedit en una nueva pestaña

5B) El archivo se abre en una nueva ventana de gedit, lo que da como resultado la ejecución de 2 gedits.

Si A o B sucede parece ser totalmente aleatorio y continúa infinitamente. Eso significa que hago doble clic en 100 archivos y podría terminar con 60 gedits, algunos de los cuales tendrán 1 pestaña, algunos tendrán 2 pestañas, algunos tendrán 3 pestañas ...

Esto es extremadamente molesto y una solución para esto sería muy apreciada. ¿Alguien ha tratado de solucionar este problema?

Esto ha sucedido en Ubuntu 10.04, 10.10 y 11.10. Todas las versiones de Ubuntu que he probado.

Richard Rodriguez
fuente

Respuestas:

39

Por qué...

gedit tiene un algoritmo bastante interesante para determinar si abre una nueva instancia o si se abre en una pestaña en una instancia existente.

Ubicado en el archivo fuente gedit-app.cen la función static boolean is_in_viewport, el algoritmo prueba si la instancia de gedit actual es

  1. en el mismo número de pantalla y nombre para mostrar
  2. en el mismo espacio de trabajo
  3. mayor del 25% de los bordes del puerto de vista

Si todo es cierto, gedit se abre en la misma instancia en una nueva pestaña; de lo contrario, se abre en una nueva ventana.

En resumen: la única forma realista de cambiar el comportamiento es cambiar el algoritmo ...

Cómo...

La siguiente es una forma rápida de obtener una forma consistente de abrir gedit ... siempre abrirá una nueva instancia.

instalar las herramientas de desarrollo básicas

sudo apt-get install devscripts build-essential fakeroot 

obtener la fuente

cd ~/Downloads
mkdir build
cd build
apt-get source gedit
cd gedit-3.2*

Haz el cambio

Abra gedit-app.c

gedit gedit/gedit-app.c

ingrese la descripción de la imagen aquí

agregue return FALSE;como se muestra y guarde.

Lo que hace es salir siempre de la rutina diciendo "no estoy corriendo en una ventana gráfica y, por lo tanto, siempre abro una nueva instancia"

Si usa return TRUE;esto, siempre se abrirá en una instancia existente de gedit en una nueva pestaña ...

darle un nombre de paquete único

OK, debemos darle un nombre único al paquete para evitar que las actualizaciones del repositorio sobrescriban el paquete modificado.

gedit debian/changelog

ahora agregue +yournamea la versión de la línea superior y guarde el archivo, es decir

Nota: para estar absolutamente seguro, después de instalar el paquete modificado a continuación, bloquee la versión según la pregunta vinculada a continuación.

ingrese la descripción de la imagen aquí

construir el paquete

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

Ve a tomar un café ...

cd ..
sudo dpkg -i gedit*.deb

Pregunta vinculada:

  1. ¿Cómo evitar la actualización de un paquete específico?
fossfreedom
fuente
1
¡Esto, mi señor, está ENFERMO! Muchas gracias, espero que esto funcione ...
Richard Rodriguez
... ciertamente lo hice durante mis pruebas ... Nota: utilicé la observación de otras respuestas de que si arrastra gedit para superponer los bordes, se abre una nueva instancia, pero si tiene gedit dentro del escritorio, la nueva instancia se abre en una pestaña. Con la compilación anterior, siempre se abre en una nueva instancia o pestaña, según se compila con "return FALSE" o "return TRUE".
fossfreedom
¡Estoy confirmando oficialmente que esta solución FUNCIONA!
Richard Rodriguez
3
Holy Sh * t @fossfreedom, me inclino ante usted señor, lo ha hecho esta vez, la calidad y la solución de esta respuesta es imba. ¡Si pudiera, pasaría todo el día presionando el botón de votar! Gj.
Bruno Pereira
2
Parece que podría haber sido mejor hacer una solicitud de extracción para tener una variable de configuración y hacer un simple (pseudocódigo) "si $ config-variable entonces devuelve FALSE". La forma propuesta bloquea las actualizaciones indefinidamente.
pbhj
13

Quería tener todos los archivos abiertos en una sola ventana gedit. No encontré esta información en otro lugar, pero con los siguientes cambios logré tener todos los archivos de texto abiertos en una sola ventana como nuevas pestañas, sin importar cómo los abro (a través del iniciador, a través de nautilus, a través de Gnome DO).

  1. Obtenga el número de pantalla: escriba echo $DISPLAYen la línea de comando. por ejemplo, obtienes :0como número de pantalla

  2. Abrir /usr/share/applications/gedit.desktopcomo superusuario con un editor de texto.

  3. Cambia la línea que dice:

    Exec=gedit %U
    

    a

    Exec=gedit --display=:0 %U
    

    ¿Dónde :0está tu número de pantalla?

Tim Banchi
fuente
2
Mucho mejor que recompilar gedit y hacer hacks de paquetes extraños. ¡Gracias!
rcrogers
1
Ejecutar con esta opción desde la línea de comandos no impide geditabrir nuevas instancias (ventanas). Al menos en la versión actual 3.18.
alfC
funciona para mí en la versión 3.28.1 tanto desde la línea de comandos como desde la interfaz gráfica de usuario. necesita reiniciar sin embargo
efie
2

Esto no sucede al azar

Por defecto, Gedit no está hecho para abrir muchas instancias, sino una para cada pantalla. Si abre en la pantalla donde aún no está Gedit abrirá archivos en Gedit, la bruja existe ahora en esa pantalla desde la cual se abre el archivo.

Entonces, puede hacer que la primera instancia de gedit esté en Todos los espacios de trabajo para que siga su pantalla activa. O trabaje en cada espacio de trabajo con cada proyecto y cada uno con su propio Gedit`s abierto. En los métodos abreviados de teclado, puede crear un nuevo método abreviado para alternar la ventana en todos los espacios de trabajo.

O es posible que siempre se abra en una nueva instancia utilizando el comando de acceso directo en Abrir con ... gedit --new-window

Entonces, puede intentar abrir las propiedades de php con reset y poner una nueva apertura solo con Gedit

usando gedit --help-allull ver otra opción de apertura con gedit.

Y también puede intentar eliminar gedit con todos los archivos de configuración e instalarlo limpio usando sudo apt-get purge gedit && sudo apt-get clean && sudo apt-get update && sudo apt-get install gedit

ACTUALIZACIÓN: pude reproducir, al mover la ventana un poco fuera de la pantalla y luego abrir un archivo, se abre en una nueva ventana. De alguna manera piensa que está en otra pantalla.

Canguro
fuente
Sí, sucede al azar. Ese es el punto. La implementación tiene errores / no es robusta. Por ejemplo, yo estoy en una pérdida que hice, pero ahora ha decidido gedit al azar para cambiar a esto siempre un nuevo modo de ventana después de trabajar de forma normal el día de hoy ...
spinkus
1

Esto comenzó a pasarme a mí. No pude encontrar ningún archivo de configuración relevante, e incluso intenté purgar + limpiar. Finalmente encontré lo que era. La ventana de Gedit se estaba abriendo de tal manera que parecía que estaba maximizada, pero no fue así. Presioné el botón de maximizar en la ventana y esto solucionó el problema. Tenga en cuenta que la ventana no cambió de tamaño, solo las esquinas pasaron de redondo a cuadrado. Parece que esto debe ser un error en el algoritmo @fossfreedom descrito anteriormente.

Nota: Cuando cierra la ventana, el estado de maximizar / minimizar debe almacenarse en alguna configuración de usuario en algún lugar. Este estado sobrevive a la purga + limpieza, y tampoco está en confesiones de Gedit por usuario.

Spinkus
fuente