在Mac和Linux上实现类似Windows的Shell扩展

5
我正在开发一个应用,最初是为了Windows平台,但尽快扩展到Mac和Linux平台。为了实现最佳的易用性,我需要在这两个平台上扩展shell。那么,我该如何使用C#为Mac OS X和基于GNOME的Linux制作shell扩展程序呢?
在Windows上,有一个名为SharpShell的库,可以处理几乎所有这些问题,这非常好。但至少据我所知,在Mac或Linux上没有这样的库。
我要集成的Shell的主要方面是右键单击文件并显示一个包含不同选项的上下文菜单,针对我的应用程序(就像Windows上的7-Zip)。
当我使用“Shell”这个术语时,我是从Windows中派生出来的。因此,当我说我要与Shell集成时,我指的是创建右键单击时的上下文菜单以及类似的UI功能。

哪个shell?bash,tcsh,ksh,ash,csh?你要添加什么扩展名? - Mats Petersson
编辑了问题以回答您的问题@MatsPetersson - Falgantil
如果您能具体说明,那么其他人帮助您就会更容易。不要只说"和类似功能",请问您想要实现什么? :) - Magnus Hoff
暂时就这样。一个右键菜单,其中包含一些选项,根据所选的选项启动具有不同命令行参数的应用程序。 - Falgantil
2个回答

3
你正在尝试将Windows环境中特定的概念(上下文菜单)应用到完全不同的*NIX环境中。这是一项艰巨的任务,非常困难,因为*NIX没有提供友好的API来修改环境,因为桌面/Shell的分散性(Gnome、KDE等)。Windows Shell是explorer.exe,提供Shell和桌面体验,explorer.exe向您显示桌面,开始按钮栏以及资源管理器窗口(用于浏览文件、设备和目录),因此在Windows中,我们只有一个程序可以做到这一点,Linux或OSX遵循另一种设计,在Linux中,我们有一个桌面管理器(Gnome、KDE、LXDE),它向您显示桌面,但是,对于文件交互,我们有一个称为文件管理器的不同程序(Nautilus、Dolphin等)。但是,我需要说的是,虽然很难但并非不可能。

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

示例:

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

最终,C#似乎不是完成这种任务的更好的语言,Xamarin使用Mono Framework做得很好,但还不够。 C或C++是更强大的语言来完成这项任务。

如何在Nautilus(Gnome)文件管理器中添加右键菜单

nautilus-actions的源代码

如何在Dolphin(KDE)文件管理器中添加右键菜单

苹果官方文档:如何在OS X中构建服务(例如右键菜单)


-3

1
Linux拥有超过你一只手数得过来的shell。之前的回答者提供了解决问题的方案。 - Marty McGowan
@MartyMcGowan,我在我的回答中指出了各种选项,并链接到了适用于大多数(如果不是全部)主要(以及许多次要)“桌面环境”的标准。而你所说的“之前的回复者”,是指Kellerman吗?他是在我发布这个问题一周后才回复的吗?你还有其他想表达的意思吗? - Etan Reisner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接