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 上,这也使得在按下修改键时快捷键可以工作(因为默认由操作系统处理)。
键码列表
修饰符
cmd
cmd_or_ctrl
(cmd
和ctrl
的别名)shift
alt
ctrl
opt
(alt
的别名)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