Geany:在该工作区中打开文件时,为每个工作区打开一个新实例

Geany:在该工作区中打开文件时,为每个工作区打开一个新实例

我在 Linux Mint 13 中使用 Mate 1.2.0。我使用的两个文本编辑器是 Gedit 和 Geany (v0.25):我使用 Geany 进行所有编码,因为我更喜欢语法突出显示和其他一些界面功能。

但让我烦恼的一件事是这种行为:

  • 在 Geany 的工作区 1 中打开文件
  • 转到工作区 2
  • 双击文件将其打开(在 Geany 中)
  • 桌面再次切换到工作区 1 并在 Geany 中打开文件。

当我在 Gedit 中执行此操作时,它会在该工作区中打开一个新的 Gedit 实例,这非常适合我的工作风格,我在每个工作区中打开了不同的项目。

从程序菜单启动 Geany 的另一个实例,并将其移至另一个工作区,但它不会改变行为:然后我看到以下内容:

  • 在 Geany 的工作区 1 中打开文件
  • 转到工作区 2
  • 从程序菜单启动一个新的 Geany 实例(所以我现在每个工作区都有一个实例)
  • 双击文件将其打开(在 Geany 中)
  • 桌面再次切换到工作区 1 并在第一个 Geany 实例中打开该文件。

所以它就像总是在“主”Geany 中打开一个文件,然后切换到恰好位于其中的任何工作区。

有什么办法可以改变这种行为吗?我希望它是这样的:

  • 打开文件时:此工作区中是否有 Geany 正在运行?
    • yes: 在 Geany 中打开文件
    • 否:在此工作区中打开一个新的 Geany 并在其中打开文件。

我在设置中看不到与此相关的选项。任何建议表示赞赏!谢谢

答案1

使用此批处理打开 Geany。这将打开一个特定于每个工作区的单独套接字。

例如,在 Thunar 中,使用“使用其他应用程序打开”并指向此批处理文件。

#!/bin/sh

socket=`xprop -root _NET_CURRENT_DESKTOP`
socket=${socket##* }

if [ "$socket" ]
then
    if [ "$DISPLAY" ]
    then
        socket="${DISPLAY%.*}-$socket"
        socket=${socket#*:}
    else
        socket="NODISPLAY-$socket"
    fi
    exec geany --socket-file "/tmp/geany_socket_$socket" "$@"
else
    exec geany "$@"
fi

答案2

转到终端并键入geany -h它会显示所有可用的选项。其中-i, --new-instance Don't open files in a running instance, force opening a new instance正是您所需要的。

如何

  1. 找到您正在点击的那个东西。

  2. 在任何文本编辑器中打开它,或者找到一种更改它正在执行的命令的方法。 (例如,如果它是托盘中的启动器,则可能会很棘手)。

  3. 将命令从类似更改geany -some_optionsgeany -some_options -i

--

完毕。

答案3

这对于评论来说太长了,所以我将其作为答案发布。我很难让奥利维尔的答案发挥作用,所以我想我应该在他的答案中包含更详细的说明,以防其他人也遇到麻烦(所有功劳都归于他,支持他而不是/以及我的)。

创建一个批处理文件,其中包含

#!/bin/sh

socket=`xprop -root _NET_CURRENT_DESKTOP`
socket=${socket##* }

if [ "$socket" ]
then
    if [ "$DISPLAY" ]
    then
        socket="${DISPLAY%.*}-$socket"
        socket=${socket#*:}
    else
        socket="NODISPLAY-$socket"
    fi
    exec geany --socket-file "/tmp/geany_socket_$socket" "$@"
else
    exec geany "$@"
fi

将批处理文件放入 PATH 中包含的目录中(请参阅https://stackoverflow.com/questions/14650070/how-to-execute-bash-script-from-any-location)。我假设您将批处理文件命名为 wgeany,否则将以下说明中的名称替换为您命名的任何名称。

现在我们希望将其设置为打开文本文件的默认程序。不幸的是,它不在列表中,至少在我的版本中,不幸的是您无法进行自定义选择。

我们可以通过转到~/.local/share/applications/usr/share/applications(如果一个不存在/不起作用/您没有权限尝试另一个)并创建一个名为 wgeany.desktop 的文本文件来解决此问题,其中包含:

[Desktop Entry]
Name=wgeany
Comment=wgeany
Exec=wgeany %f
Type=Application
StartupNotify=false
Terminal=false
Categories=TextTools;
Name[en_US]=wgeany

另外,您可能想要包含一条指向正确的 geany 图标 ( Icon=path/icon.png) 的行,但我没有费心去找到它。保存文件,现在您的批处理文件应该出现在打​​开方式对话框中。 (您可以将其设置为文件类型(例如 .txt)的默认应用程序,方法是转到(该类型)文件的属性,然后转到“打开方式”选项卡并将 wgeany 设置为默认应用程序。


还要感谢 MaxWilliams 帮助我解决了这个问题。

答案4

如果您使用“文件”和“打开”,Geany 将在当前“主”实例(即您当前使用的 Geany 实例而不是第一个实例)中打开文件。

相关内容