【问题标题】:Windows-like shell extension on Mac & LinuxMac 和 Linux 上的类似 Windows 的 shell 扩展
【发布时间】:2015-04-07 08:10:49
【问题描述】:

我正在制作一个应用程序(最初用于 Windows,但尽快扩展到 Mac 和 Linux),我需要在两个平台上扩展 shell,以实现最佳可用性。那么我将如何在 C# 中为 Mac OS X 和 Linux(基于 GNOME)制作 shell 扩展?

在 Windows 上,有一个名为 SharpShell 的库可以为您处理几乎所有这些,所以这很棒。但是 Mac 或 Linux 没有这样的运气(据我所知)。

我希望与之集成的 Shell 的主要方面是右键单击文件的选项,并让它显示一个上下文菜单,其中包含适用于我的应用程序的不同选项。 (就像 Windows 上的 7-Zip)

当我使用术语 Shell 时,我是从 Windows 派生的。因此,当我说我希望与 Shell 集成时,我的意思是在右键单击时创建上下文菜单以及类似的功能。所有基于 UI。

【问题讨论】:

  • 哪个外壳? bash、tcsh、ksh、ash、csh?您要添加什么扩展程序?
  • 编辑了问题以回答您的问题@MatsPetersson
  • 如果您能具体一点,其他人通常更容易提供帮助。而不是“和类似的功能”,你究竟想要实现什么? :)
  • 现在好了,仅此而已。带有一些选项的右键菜单,它将根据所选选项启动具有不同命令行参数的应用程序。

标签: c# linux macos shell


【解决方案1】:

您正在尝试在完全不同的 *NIX 环境中应用特定于 Windows 环境(上下文菜单)的概念。这是一项艰巨的任务,而且非常困难,因为 *NIX 没有提供友好的 API 来修改环境,因为桌面/Shell 碎片(Gnome、KDE ​​等)。 Windows Shell 是 explorer.exe 并提供 shell 和桌面体验,explorer.exe 向您显示桌面、开始按钮栏和资源管理器窗口(用于在文件、设备和目录之间导航),因此在 Windows 中我们只有执行此操作的程序,Linux 或 OSX 遵循另一种设计,在 Linux 中,我们有一个桌面管理器(Gnome、KDE、LXDE),它向您显示桌面,但对于文件交互,我们有一个不同的程序,称为文件管理器(Nautilus,海豚等)。但是,我需要说很难,但并非不可能。

为此,您需要编写一个抽象层 (AL)。您的程序只需要调用这一层,并且您需要将 AL 移植到您拥有的每个平台/桌面管理器。

例子:

假设我们的 AL 中有一个名为 AddContextualItem(...) 的函数,要向 Shell 上下文菜单添加新项目,您的代码需要调用此函数,但对于 Windows 环境,此函数肯定会调用一些 WIN32 API完成目标,但在 OSX 环境或 Linux 中,此函数 AddContextualItem 应替换为与 unix 桌面环境(如 Gnome、KDE ​​等)或特定文件管理器(Nautilus、Dolphin 等)兼容的另一个实现。

最终,C# 似乎不是完成此类任务的更好语言,Xamarin 在 Mono 框架方面做得很好,但还不够。 C 或 C++ 是执行此操作的更强大的语言。

How To add right click menu to Nautilus (Gnome) File Manager

Source code of nautilus-actions

How to add right click menu to Dolphin (KDE) File Manager

Apple Official Documentation for Building a service (like right-click item menu) in OS X

【讨论】:

    【解决方案2】:

    “Linux”没有“外壳”。

    它有许多不同的应用程序提供类似“shell”的功能,还有很多提供类似文件管理器的功能。

    这里有一些规范(链接如下)可能与您的目标相关,它们可能会帮助您以通用的方式完成其中的一些工作,但最终我不知道您的模拟量有多接近能够得到。


    【讨论】:

    • linux 拥有的 shell 数量多到你一只手都数不过来。之前的响应者提供了问题的解决方案。
    • @MartyMcGowan 我在答案中指出了选项的广度,并与应该适用于大多数(如果不是全部)主要(以及更多次要)“桌面环境”的标准相关联。您所说的“先前的响应者”是指凯勒曼吗?谁在我发布后一周回复?您还有其他要表达的观点吗?
    猜你喜欢
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 2011-01-12
    • 2014-12-20
    • 1970-01-01
    • 2015-04-08
    相关资源
    最近更新 更多