#tauri-plugin #menu #context #native #click #display #context-menu

tauri-plugin-context-menu

处理 Tauri 中的原生上下文菜单

12 个版本 (7 个破坏性更新)

0.8.1 2024 年 8 月 24 日
0.8.0 2024 年 7 月 21 日
0.7.1 2024 年 2 月 27 日
0.7.0 2023 年 12 月 21 日
0.1.0 2023 年 7 月 30 日

#119GUI

Download history 33/week @ 2024-04-28 14/week @ 2024-05-05 8/week @ 2024-05-12 222/week @ 2024-05-19 200/week @ 2024-05-26 17/week @ 2024-06-02 15/week @ 2024-06-09 4/week @ 2024-06-16 74/week @ 2024-07-07 75/week @ 2024-07-14 170/week @ 2024-07-21 89/week @ 2024-07-28 21/week @ 2024-08-04 3/week @ 2024-08-11

每月 288 次下载

MIT/Apache

78KB
1.5K SLoC

Rust 1K SLoC // 0.1% comments TypeScript 176 SLoC // 0.1% comments JavaScript 28 SLoC

Tauri 插件 Context Menu

一个用于在 Tauri v1.x 上显示原生上下文菜单的 Tauri 插件。Tauri API 默认不支持原生上下文菜单,因此创建了此插件以填补这一空白。

image

Tauri v2.x 已添加官方上下文菜单支持(见此处),因此此插件仅适用于 Tauri v1.x。

支持

Windows MacOS Linux

安装

包: https://crates.io/crates/tauri-plugin-context-menu

cargo add tauri-plugin-context-menu 添加包。

或将以下内容添加到您的 Cargo.toml 以获取最新未发布版本(不推荐)。

tauri-plugin-context-menu = { git = "https://github.com/c2r0b/tauri-plugin-context-menu", branch = "main" }

参阅"使用插件" Tauri 官方指南以初始化插件。

此项目提供 TypeScript 工具以简化插件的用法。运行以下命令安装 JavaScript/TypeScript 包

 npm i tauri-plugin-context-menu

示例

检查 examples 目录以获取示例用法。

提供了一个纯 JavaScript 示例在 examples/vanilla
在执行 npm install 后,要运行示例,请使用以下命令

npm run examples/vanilla

提供了一个使用实用程序包的 TypeScript 示例在 examples/ts-utility。您可以使用相同的命令运行它(将 examples/vanilla 替换为 examples/ts-utility)。

示例用法

无 JS/TS 包

import { invoke } from "@tauri-apps/api";
import { listen } from "@tauri-apps/api/event";
import { resolveResource } from "@tauri-apps/api/path";

// Listen to the event emitted when the first menu item is clicked
listen("item1clicked", (event) => {
    alert(event.payload);
});

window.addEventListener("contextmenu", async (e) => {
    e.preventDefault();
    const iconUrl = await resolveResource('assets/16x16.png');

    // Show the context menu
    invoke("plugin:context_menu|show_context_menu", {
        items: [
            {
                label: "Item 1",
                disabled: false,
                event: "item1clicked",
                payload: "Hello World!",
                shortcut: "ctrl+M",
                icon: {
                    path: iconUrl
                },
                subitems: [
                    {
                        label: "Subitem 1",
                        disabled: true,
                        event: "subitem1clicked",
                    },
                    {
                        is_separator: true,
                    },
                    {
                        label: "Subitem 2",
                        disabled: false,
                        checked: true,
                        event: "subitem2clicked",
                    }
                ]
            }
        ],
    });
});

带 JS/TS 包

import { showMenu } from "tauri-plugin-context-menu";

showMenu({ 
    pos: {...}, // Position of the menu (see below for options)
    theme: "light", // Theme of the menu
    items: [
        ...,
        {
            ..., // Menu item (see below for options)
            event: () => {
                // Do something
            }
        }
    ]
});

您还可以使用它通过 onEventShowMenu 函数响应用户事件

import { onEventShowMenu } from "tauri-plugin-context-menu";
onEventShowMenu("contextmenu", (e) => ({ /* menuOptions */ }));

选项

可以传递给插件的选项列表。

选项 类型 可选 描述 操作系统兼容性
项目 菜单项[] 要显示的菜单项列表。 所有
位置 位置 可选 菜单的位置。默认为光标位置。 所有
主题 light | dark 可选 菜单的主题。默认为系统主题。 仅限 MacOS #25

菜单项

选项 类型 可选 默认 描述 JS/TS 包
标签 字符串 菜单项显示的文本。
禁用 布尔值 可选 false 菜单项是否禁用。
事件 字符串 可选 当菜单项被点击时触发的事件名称。 您可以将一个函数传递代替事件名称。
负载 字符串 可选 传递给事件的负载。 您可以传递任何类型的数据。
选中 布尔值 可选 菜单项是否选中。
子项 菜单项[] 可选 [] 要显示的子菜单项列表。
快捷键 字符串 可选 在右侧显示的键盘快捷键。
图标 MenuItemIcon 可选 要显示在左侧的图标。
分隔符 布尔值 可选 false 菜单项是否为分隔符。

MenuItemIcon

选项 类型 可选 默认 描述 JS/TS 包
路径 字符串 图标文件的绝对路径。 您可以使用 assetToPath 将相对路径转换为绝对路径。
宽度 数字 可选 16 图标的宽度。
高度 数字 可选 16 图标的长度。

位置

is_absolute 设置为 false 时,位置坐标必须相对于当前活动的窗口。

选项 类型 可选 默认 描述
x 数字 菜单的 X 位置。
y 数字 菜单的 Y 位置。
is_absolute 布尔值 可选 false 位置是否相对于屏幕绝对。

修改键

修改键可以用于菜单项的 shortcut 选项,以显示相应的符号()。

在 MacOS 上,这也使得在按下修改键时快捷键可以工作(因为默认由操作系统处理)。

键码列表

修饰符

  • cmd
  • cmd_or_ctrlcmdctrl 的别名)
  • shift
  • alt
  • ctrl
  • optalt 的别名)
  • altgr
  • super
  • win
  • meta

  • plus
  • space
  • tab
  • capslock
  • numlock
  • scrolllock
  • backspace
  • delete
  • insert
  • return
  • enter
  • up
  • down
  • left
  • right
  • home
  • end
  • pageup
  • pagedown
  • escape
  • esc
  • num0...9
  • numdec
  • numadd
  • numsub
  • nummult
  • numdiv
  • f1...24

事件

项点击

当菜单项被点击时触发。事件名称与菜单项的 event 选项相同

import { listen } from "@tauri-apps/api/event";
import { invoke } from "@tauri-apps/api";

listen("[EVENTNAME]", () => {
    alert("menu item clicked");
});

invoke(...{
    items: [{
        ...
        event: "[EVENTNAME]",
        ...
    }]
});

菜单关闭

当菜单关闭时触发。无论菜单是通过点击菜单项还是通过点击菜单外部关闭,都会触发此事件。
您可以使用以下代码捕获此事件

import { listen } from "@tauri-apps/api/event";

listen("menu-did-close", () => {
    alert("menu closed");
});

依赖项

~22–66MB
~1M SLoC