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 日 |
#119 在 GUI
每月 288 次下载
78KB
1.5K SLoC
Tauri 插件 Context Menu
一个用于在 Tauri v1.x 上显示原生上下文菜单的 Tauri 插件。Tauri API 默认不支持原生上下文菜单,因此创建了此插件以填补这一空白。
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 上,这也使得在按下修改键时快捷键可以工作(因为默认由操作系统处理)。
键码列表
修饰符
cmdcmd_or_ctrl(cmd和ctrl的别名)shiftaltctrlopt(alt的别名)altgrsuperwinmeta
键
plusspacetabcapslocknumlockscrolllockbackspacedeleteinsertreturnenterupdownleftrighthomeendpageuppagedownescapeescnum0...9numdecnumaddnumsubnummultnumdivf1...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