dde-file-manager-menu-oem 将会在 v20 后发布的文件管理器中被整合为文件管理器的内建支持,不再需要另外安装单独的包。当前此项目 README 内描述的插件格式文档略微有些过时。在 v20 项目源码公开前,在此附带完整的右键菜单扩展文档,以供开发者参阅。


深度文管上下文菜单扩展

深度文件管理器会识别指定目录下的 .desktop 文件,并将其视为扩展菜单项,加入到文件管理器的上下文菜单中。

OEM 方式

每个定制菜单项为一个独立的 Application 类型的 .desktop 文件(遵循 desktop-entry-spec)。对于每个文件,在其 [Desktop Entry] 下至少需要包含 NameExec 字段,Name 的内容为添加到上下文菜单中时将会显示的名称,Exec 的内容为当单击此新增的菜单项时将会执行的行为(遵循 desktop 文件规范标准,可以使用 %u 等参数)。

定制菜单支持使用 Actions 字段增加指定的子菜单,子菜单需至少包含 NameExec 字段,可以通过 Icon 指定图标。若指定子菜单,则入口项(原本 [Desktop Entry] 下)的 Exec 字段将不再有效。

对于文件管理器菜单项定制,支持额外的字段可供定制,可以使用 X-DFM-MenuTypes 字段来指定菜单项在何种情况会显示,此字段可包含一个或多个类型,其中包括 SingleFile, SingleDir, MultiFileDirsEmptyArea 四种。

名称 含义
SingleFile 在单独的文件上触发上下文菜单
SingleDir 在单独的文件夹/目录上触发上下文菜单
MultiFileDirs 在多个文件/文件夹上触发上下文菜单
EmptyArea 在空白区域触发上下文菜单

可以使用 ; 作为分割填写多个值,但注意,包含 X-DFM-MenuTypes 字段但内容为空的情况和不包含 X-DFM-MenuTypes 字段的情况不同,包含但为空将不会在任何位置显示,不包含将会视为会在任何情况下显示。

MimeType 可以根据被选中的文件类型决定菜单项是否显示被添加的项,支持模糊匹配(如 MimeType=image/*; )。 同 X-DFM-MenuTypes 一样, MimeType 只能用在 [Desktop Entry] 项目中,使用 ; 作为分割填写多个值, MimeType 字段但内容为空的情况和不包含 MimeType 字段的情况不同,包含但为空将不会在任何位置显示,不包含将会视为 MimeType=*;

X-DFM-ExcludeMimeTypes 可以排除特定的文件类型,只能用在 [Desktop Entry] 项目中,使用 ; 作为分割填写多个值,支持模糊匹配。优先于 MimeTypes项过滤文件,即如果 MimeTypesX-DFM-ExcludeMimeTypes同时包含某种文件类型时,该文件类型被选中将无法显示菜单。

X-DFM-NotShowIn 可以决定是否在桌面或者文件管理器显示菜单,此字段可包含一个或多个类型,其中包括 FileManager, Desktop 两种,字段不存在或字段为空时在桌面和文件管理均可显示。

名称 含义
FileManager 在文件管理器中触发上下文菜单
Desktop 在桌面触发上下文菜单

X-DFM-SupportSchemes 可以决定是否在指定的目录scheme下显示菜单,此字段可包含一个或多个类型,其中包括 file, trash, recent, bookmark 等多种,字段不包含时任何位置均可显示菜单,字段内容为空时将不显示菜单。

名称 含义
file 在本地文件上触发上下文菜单
trash 在回收站中触发上下文菜单
recent 在最近文件中触发上下文菜单
bookmark 在书签文件触发上下文菜单

X-DFM-SupportSuffix 可以决定是否根据(全)后缀名过滤显示菜单,如在 test.7z.002 test.7z.003 test.7z.004 等文件上显示压缩菜单,由于分卷文件 MimeTypeapplication/octet-stream 无法通过文件类型显示,特增加通过后缀显示菜单,此情况可以用 7z.* 来支持。

OEM 厂商需要将待添加的 desktop 文件放置到 /usr/share/deepin/dde-file-manager/oem-menuextensions/ 位置,在下次启动文件管理器时[1],选中任意一个或多个文件并触发上下文菜单,将可以看到新增的项目位于其中。

示例 .desktop 文件

可以将下面的示例存储为 test.desktop 并放置到 /usr/share/deepin/dde-file-manager/oem-menuextensions/ 中,关闭现有的所有文件管理器窗口并打开新的文件管理器窗口,定制的菜单将会出现在单独目录或多选文件的情况的上下文菜单中。

示例 1 - 单项菜单

[Desktop Entry]
Type=Application
Exec=/home/wzc/Temp/test.sh %U
Icon=utilities-terminal
Name=示例菜单项名称
X-DFM-MenuTypes=SingleDir;MultiFileDirs;

示例 2 - 包含子菜单

注意这种情况时,由于包含子菜单,故在 [Desktop Entry] 下添加 Exec 不会起任何作用。另外,X-DFM-MenuTypes 只能用在 [Desktop Entry] 项目中,不能用在子菜单中。

[Desktop Entry]
Type=Application
Icon=utilities-terminal
Name=示例菜单项名称
Actions=TestAction;
X-DFM-MenuTypes=SingleDir;MultiFileDirs;

[Desktop Action TestAction]
Name=示例子菜单
Exec=/home/wzc/Temp/test.sh %U

完整示例 - 复制文件路径

  1. 切换到 .desktop 文件所在目录 /usr/share/deepin/dde-file-manager/oem-menuextensions/
sudo mkdir /usr/share/deepin/dde-file-manager
sudo mkdir /usr/share/deepin/dde-file-manager/oem-menuextensions
cd /usr/share/deepin/dde-file-manager/oem-menuextensions
  1. 使用文本编辑器(如 deepin-editorvim )创建一个文本文件(需要root权限保存), 名称可以自定义, 后缀名为.desktop
sudo deepin-editor copyfilepath.desktop
  1. 在文件中加入以下内容, Icon 图标可以去 /usr/share/icons/ 中选择合适的图标。
[Desktop Entry]
Type=Application
Icon=edit-copy
Name=复制文件路径
X-DFM-MenuTypes=SingleFile;
Exec=~/copyfilepath.sh %u
MimeType=text/plain;
X-DFM-NotShowIn=Desktop
X-DFM-ExcludeMimeTypes=application/xml;
  1. 在主目录下创建 copyfilepath.sh 脚本。
cd ~
deepin-editor copyfilepath.sh

在文本中加入以下内容

#!/bin/bash
echo -n $1 | xclip -i -selection clipboard

至此,重新启动文件管理器,文件列表中常规文本文件的右键菜单会多一个菜单项 复制文件路径,点击即可将文件路径复制到剪切板中。


原文:https://github.com/linuxdeepin/dde-file-manager-menu-oem/wiki


  1. 注:这是由于菜单列表仅在文件管理器(桌面)启动时识别并记录一次。在部分平台,深度文件管理器存在加速启动用的进程常驻后台,您可能需要结束所有文件管理器进程。类似的,对于桌面,也需要重启桌面的相应进程才能使桌面使用新增的菜单。 ↩︎