KDE 桌面会话中的别名

KDE 桌面会话中的别名

可以像在终端中设置一样为桌面会话设置别名吗?事实上,我不确定桌面会话是否以相同的方式工作。是否有某个中央解释器可以解释来自所有 GUI 应用程序的命令(某种后端 shell)或者它如何工作?

我需要做的是为 KDE 会话设置别名 gvim="gvim --remote-tab-silent",以便在 Krusader 设置或任何其他 GUI 应用程序中调用 gvim 时,将调用带有 --remote-tab-silent 的 gvim。

如何做到这一点(不在脚本中包装)?

答案1

视情况而定。图形程序通常使用与非图形程序相同的方法;即以下方法之一:

  • 有时程序会将参数列表直接传递给内核,使用类似下面的方法:

    if (fork() == 0)
        execlp("vim", "--remote-tab-silent", "/home/LeNoob/somefile.txt", NULL);
    

    各种exec*()函数告诉内核,“运行确切地这个东西,并将这个精确的命令行选项列表传递给它argv[]。”

  • 其他时候,程序会要求 shell – /bin/sh– 解释命令行:

    system("vim $HOME/.bashrc");
    

    它实际上与终端中的 shell 相同,但使用选项以非交互模式运行-c。此外,/bin/sh无论您选择以交互方式使用哪种 shell(bash、zsh……),它始终是惯例。因此,上面的内容大致与以下内容相同:

    if (fork() == 0)
        execl("/bin/sh", "-c", "vim $HOME/.bashrc");
    

    (当然,shell 本身会exec*()直接使用。)

  • 最后,使用 D-Bus 的桌面环境可以通过向所需的“总线名称”(例如org.gnome.gedit)发送消息来启动各种服务。也称为“总线激活”,当 dbus-daemon 看到某个程序向当前没有“拥有”的总线名称发送消息时,它会在其配置中搜索该程序的路径,然后再次使用 exec() 来启动它。

    这是常用的 D-Bus 功能,但主要用于“dconf”等后台服务。将来,GNOME 计划使用它来启动 Nautilus 或 Gedit 等常规应用程序。但是,目前,它使用的方法与所有其他 DE 相同,即读取相关文件.desktop[见下文] 并直接 exec() 执行程序,因此我仅出于完整性考虑才将其包括在内。

(当然,真正的程序不要在其中有"vim""somefile.txt"进行硬编码 – 它们使用类似getenv("EDITOR")和所需的文件名 – 但你明白了。)

然而,这些都不重要,因为 shell 从不在非交互模式下解释别名,而它解释 shell 函数,它永远不会读取你的函数~/.bashrc来查看你定义了哪些函数。


所以接下来的问题是,如何将 gVim 配置为文本编辑器;您的程序是否在 $PATH 目录中搜索,或者是否从其配置文件中gvim获取完整路径?/usr/bin/gvim

基于终端的程序使用$EDITOR变量,因此您可以在 ~/.profile 或类似文件中EDITOR=gvim使用它。EDITOR="gvim --remote-tab-silent"

桌面环境根据以下信息找到 gVim /usr/share/applications/gvim.desktop– 具体来说,该行Exec=gvim -f %F仅告诉它们启动gvim,但没有说明它在哪里,因此将使用 $PATH。这意味着它可以通过两种方式覆盖:

  • 您可以编写一个脚本并将gvim其包装起来并放在 $PATH 的某个早期位置 - 例如,调用该脚本~/bin/gvim然后将其放在~/bin$PATH 的开头;

  • 或者您可以将 .desktop 文件从 /usr 复制到~/.local/share/applications/gvim.desktop,然后更改行Exec=以包含所需的选项:

    Exec=gvim --remote-tab-silent -f %F
    

    (通常更改会立即生效,但如果没有,请尝试从终端运行kbuildsycoca4或。)kbuildsycoca4 --noincremental

相关内容