当前位置: 首页 > article >正文

字玩FontPlayer开发笔记11 Tauri2剪切板模块

字玩FontPlayer开发笔记11 Tauri2剪切板模块

字玩FontPlayer是笔者开源的一款字体设计工具,使用Vue3 + ElementUI开发,源代码:github | gitee

笔记

浏览器默认的复制粘贴功能在Tauri应用中是禁用的,对于复制粘贴操作需要使用Tauri自带的插件进行处理。

安装插件
npm run tauri add clipboard-manager
权限配置

使用剪切板插件需要开启权限:
src-tauri/capabilities/default.json

{
  "$schema": "../gen/schemas/desktop-schema.json",
  "identifier": "default",
  "description": "enables the default permissions",
  "windows": [
    "main",
    "glyph-script"
  ],
  "remote": {
    "urls": [
      "https://*.tauri.app"
    ]
  },
  "permissions": [
    //...
    "clipboard-manager:allow-read-text",
    "clipboard-manager:allow-write-text",
    //...
  ]
}
写入剪切板
import { writeText, readText } from '@tauri-apps/plugin-clipboard-manager'

await writeText(selectedText)
读取剪切板
import { writeText, readText } from '@tauri-apps/plugin-clipboard-manager'

const clipboardText = await readText()
监听复制粘贴事件

笔者项目使用CodeMirror代码编辑器,CodeMirror可以直接获取编辑器dom,通过对dom按键事件监听,进行复制粘贴功能的实现。

import { writeText, readText } from '@tauri-apps/plugin-clipboard-manager'

const isMac = navigator.userAgent.includes("Mac")

// 监听按键事件
codeEditor.dom.addEventListener("keydown", async (event) => {
  // 监听复制:Ctrl+C 或 Command+C
  if ((isMac ? event.metaKey : event.ctrlKey) && event.key === "c") {
    const { from, to } = codeEditor.state.selection.main
    const selectedText = codeEditor.state.doc.slice(from, to).toString()

    if (selectedText) {
      // 将选中的文本写入剪贴板
      await writeText(selectedText)
    }

    event.preventDefault()
  }

  // 监听粘贴:Ctrl+V 或 Command+V
  if ((isMac ? event.metaKey : event.ctrlKey) && event.key === "v") {
    const clipboardText = await readText() // 从剪贴板读取文本

    if (clipboardText) {
      const { from } = codeEditor.state.selection.main
      const transaction = codeEditor.state.update({
        changes: { from, insert: clipboardText }, // 插入剪贴板内容
      })
      codeEditor.dispatch(transaction) // 执行插入
    }

    event.preventDefault()
  }
})

http://www.kler.cn/a/501862.html

相关文章:

  • 【机器学习】主动学习-增加标签的操作方法-流式选择性采样(Stream-based selective sampling)
  • 基于DFT与IIR-FIR滤波器的音频分析与噪声处理
  • Centos9 + Docker 安装 MySQL8.4.0 + 定时备份数据库到本地
  • Pytorch通信算子组合测试
  • 【日常小记】Ubuntu启动后无图形界面且网络配置消失
  • 初学stm32 --- DAC输出三角波和正弦波
  • 计算机网络之---UDP协议
  • ros2-6.4.5 gazebo传感器仿真
  • 使用LangChain、CrewAI、AutoGen搭建数据分析Agent
  • React 进阶之路:深入详解事件绑定的多样方式与区别,促使更加容易理解
  • 谷歌开放语音命令数据集,助力初学者踏入音频识别领域
  • Windows远程桌面断开导致锁屏问题解决方案
  • salesforce sandbox的用户如何重置密码
  • Unity3D中的Lua、ILRuntime与HybridCLR/huatuo热更对比分析详解
  • 慧集通(DataLinkX)iPaaS集成平台-系统管理之UI库管理、流程模板
  • 使用WPF在C#中制作下载按钮
  • 《机器学习》之DBSCAN聚类
  • nginx代理服务器配置不正确出现的小bug
  • SQL中的公用表表达式
  • [论文阅读]Corpus Poisoning via Approximate Greedy Gradient Descent
  • SQL语言的面向对象编程
  • 全面代码行数统计工具——CodeLinesCounter
  • 基于C#Halcon3D点云图视图查看实现封装心得
  • 实战篇: BiLSTM+CRF实现中文分词
  • 统信操作系统FTP
  • 深度学习camp-第J7周:对于ResNeXt-50算法的思考