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

Modified on: Sat, 09 Jun 2018 22:33:53 +0800

哦,我喜欢Ubuntu及其所有功能,但这个“bug”让我生气了很长时间,我终于决定在这里寻求帮助。

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

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

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

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

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

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

    这非常令人讨厌,我们将非常感激。有人试图解决这个问题吗?

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

最佳答案

为什么...

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

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

  1. 使用相同的屏幕编号和显示名称
  2. 在同一个工作区中
  3. 大于视口的边缘
  4. 的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. 如何防止更新特定软件包?
    2. 醇>
作者:Community,fossfreedom

相关问答

添加新评论