为什么gedit在从nautilus打开文件时会随机打开新实例?

哦,我多么喜欢Ubuntu及其所有function,但是这个“虫子”让我生气了这么久,我终于决定在这里寻求帮助。

每当我在nautilus中双击它们时,我已经使用gedit分配了所有.php文件。 现在,这种行为很奇怪。

  1. 我没有运行gedit
  2. 我双击要打开的文件
  3. 将打开gedit窗口并加载文件
  4. 我双击另一个要打开的文件

现在,有两种可能的结果:

5A)文件在新选项卡的同一gedit窗口中打开

5B)文件在新的gedit窗口中打开,导致运行2个gedit。

A或B是否发生似乎是完全随机的并且继续无限地进行。 这意味着我双击100个文件,我可能最终得到60个gedits,其中一些将有1个选项卡,一些将有2个选项卡,一些将有3个选项卡…

这非常令人讨厌,并且非常感谢对此的修复。 有人试图解决这个问题吗?

这种情况发生在Ubuntu 10.04,10.10和11.10中。 我测试过的所有Ubuntu版本。

为什么…

gedit有一个非常有趣的算法来确定它是打开一个新实例还是在现有实例的选项卡中打开它。

位于函数static boolean is_in_viewport的源文件gedit-app.c中,该算法测试当前的gedit实例是否为

  1. 在相同的屏幕号和显示名称
  2. 在同一工作区
  3. 大于视口25%的边缘

如果一切都为真,则gedit会在新选项卡中的同一实例中打开,否则会在新窗口中打开。

总之 – 改变行为的唯一现实方法是改变算法……

怎么样…

以下是获得打开gedit的一致方法的快速方法…它将始终打开一个新实例。

安装基本的开发工具

 sudo apt-get install devscripts build-essential fakeroot 

得到消息来源

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

做出改变

打开gedit-app.c

 gedit gedit/gedit-app.c 

在此处输入图像描述

添加return FALSE; 如图所示并保存。

这样做总是退出例程,说“我没有在视口中运行,因此总是打开一个新实例”

如果使用return TRUE; 这将始终在新选项卡中的现有gedit实例中打开…

给它一个独特的包名

好的,我们需要为包提供一个唯一的名称,以防止存储库更新覆盖已更改的包

 gedit debian/changelog 

现在将+yourname附加到顶行版本并保存文件即

注意 – 绝对确定 – 在安装下面的修改后的软件包后,按照下面的链接问题锁定版本。

在此处输入图像描述

构建包

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

去喝杯咖啡……

 cd .. sudo dpkg -i gedit*.deb 

相关问题:

  1. 如何防止更新特定包?

我想在一个gedit窗口中打开所有文件。 我没有在其他地方找到这些信息,但是通过以下更改,我设法将所有文本文件仅在一个窗口中打开作为新选项卡,不管我如何打开它们(通过启动器,通过鹦鹉螺,通过Gnome DO)。

  1. 获取显示编号:在命令行中键入echo $DISPLAY 。 例如,你得到:0作为你的显示号码。

  2. 以文本编辑器的超级用户身份打开/usr/share/applications/gedit.desktop

  3. 换行说:

     Exec=gedit %U 

     Exec=gedit --display=:0 %U 

    其中:0是您的显示号码。

这不是随机发生的

默认情况下,Gedit不会打开许多​​实例,但每个实例都会显示一个。 如果你打开显示在哪里还没有Gedit将打开Gedit女巫的文件现在存在于该显示从女巫打开文件。

因此,您可以将第一个gedit实例设置为所有工作区,以便它跟随您的活动显示。 或者在每个项目的每个工作区上工作,每个工作区都有自己打开的Gedit。 在键盘快捷键中,您可以为在所有工作区上切换窗口设置创建新的快捷方式。

或者可以使用Open With .. gedit --new-window快捷命令在新实例中打开它

所以你可以尝试在php属性中打开并重置并使用Gedit进行新的开放

使用gedit --help-all ull会看到使用gedit --help-all打开的其他选项。

你也可以尝试用所有配置文件删除gedit并使用sudo apt-get purge gedit && sudo apt-get clean && sudo apt-get update && sudo apt-get install gedit

更新:我能够重现 – 当移动窗口稍微偏离屏幕然后打开一些文件在新窗口中打开。 它以某种方式认为它在另一个显示器中。

这开始发生在我身上。 我找不到任何相关的conf文件,甚至尝试了purge + clean。 终于找到了它是什么。 Gedit窗口正在打开,看起来它已经最大化,但事实并非如此。 我按下窗口上的最大化按钮,这解决了问题! 请注意,窗口没有改变大小,只有角落从圆形变为方形。 看起来这必须是上面描述的算法@fossfreedom中的一个错误。

注意:关闭窗口时,最大化/最小化状态必须存储在某个用户配置中。 这种状态在清除+清洁后仍然存在,并且它不是每用户Gedit confs。