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

使用applescript自动化trilium的数学公式环境(二)

9.23 ver1

没想到今天很有精神,在玩chatgpt的时候突然想到,为什么不让他帮我写一份代码呢?说干就干。但是,可能是因为我的英语不怎么样,chatgpt生成出来的整个东西实在是菜的抠脚。所以我觉得还是应该自己先想好一个大致的任务流程,然后让chatgpt一步一步把它实现出来。

  1. 从剪贴板获取需要数学公式化的文本
  2. 使用分隔符“$”将该文本分割为若干部分,存储为一个数组
  3. 对数组的元素循环:第偶数个就直接粘贴到trilium里面,第奇数个则用ver0的工作流程插入到公式环境里面。(这里有个小问题,就是可能文件一开始就是公式,但是我们事实上可以先给他前面插一个无意义字符,后面再删掉,保证公式一定是奇数个;总之这个细节我们先不管)

我们分别实现各个部分:

-- Part 1: get the text from clipboard
set paragraphText to the clipboard
tell application "Trilium Notes"activate
end tell-- Part 2: delimiter paragraphText to oldDelimiters
set delimiter to "$"-- Set the text item delimiters to the delimiter
set oldDelimiters to AppleScript's text item delimiters
set AppleScript's text item delimiters to delimiter-- Split the paragraphText into pieces
set shellPieces to text items of paragraphText-- Restore the original text item delimiters
set AppleScript's text item delimiters to oldDelimiters-- Part 3 insert ino trilium
-- Loop through the paragraph pieces
set i to 0
repeat with piece in shellPieces-- even or oddif i is equal to 1 thentell application "System Events"keystroke "m" using command downdelay 0.1keystroke piecedelay 0.1keystroke returndelay 0.1end tellset i to 0elsetell application "System Events"keystroke piecedelay 0.1end tellset i to 1end if
end repeat
问题处理
keystroke反序bug

实际使用的时候这个程序会出一些小bug,最明显的是,apple的keystroke似乎有点bug,第一个输入是反序的,比如keystroke “text”会输出“txet”,所以我们这里让keystroke一开始直接输入一个空格来避免这个情况。同时,每次keystroke之间应该delay一会,等待系统反应过来,即在输出之前增加一段:

tell application "System Events"keystroke " "delay 0.1
end tell
安全性问题

原本使用剪贴板是因为它无需输入,比较方便。但是在实际使用中发现会有一个问题就是我们的剪贴板里面可能不一定是我们想要的东西,所以最终还是决定改成输入模式:

set paragraphText to text returned of (display dialog "Enter the text you want to input in trilium with automated math formula transformation:" default answer "")
提醒我们把输入法切换成英文

还有一个问题是我们使用的是脚本,所以系统输入法会影响我们的输入。我们应该把输入法切换成英文,防止被它调用。

之前提到的奇偶性问题

最开始我们在字符串前面加一个空格,最后再把空格删掉即可。

最终我们的代码是:

-- Part 1: get the text from clipboard
set orgnparagraphText to text returned of (display dialog "Enter the text you want to input in trilium with automated math formula transformation; remember to change the keyboard into English:" default answer "")
set paragraphText to " " & orgnparagraphText
tell application "Trilium Notes"activate
end tell-- Part 2: delimiter paragraphText to oldDelimiters
set delimiter to "$"-- Set the text item delimiters to the delimiter
set oldDelimiters to AppleScript's text item delimiters
set AppleScript's text item delimiters to delimiter-- Split the paragraphText into pieces
set shellPieces to text items of paragraphText-- Restore the original text item delimiters
set AppleScript's text item delimiters to oldDelimiters-- Part 3 insert ino trilium
-- Loop through the paragraph pieces
set i to 0
set j to 0
-- 这里插入一段是因为apple的keystroke似乎有点bug,第一个输入是反序的,所以我们这里输入一个空格来避免这个情况。同时,每次keystroke之间应该delay一会,等待系统反应过来。
tell application "System Events"keystroke " "delay 0.1
end tell
repeat with piece in shellPieces-- even or oddif length of piece is not equal to 0 thenif i is equal to 1 thentell application "System Events"keystroke "m" using command downdelay 0.1keystroke piecedelay 0.1keystroke returndelay 0.1end tellset i to 0set j to 1elseif j is equal to 0 thentell application "System Events"-- delete the added spacekeystroke (ASCII character 8)delay 0.1end tellend iftell application "System Events"keystroke piecedelay 0.1end tellset i to 1set j to 1end ifend if
end repeat

我们同样在系统设置中为这个功能添加一个快捷键。由于我的命名是”trilium日志快速导入”,因此我们设置快捷键为ctrl+shift+l(log)

现在最后遗留的一个问题就是,我们的字符是用自动输入输入的,假如遇到中文字符可就原形毕露了。所以后面我们需要解决的问题是把这玩意弄成支持中文输入的。

来自9.23凌晨的灵感

卧槽,我突然悟了,只要像原来一样,把要输入的东西弄到剪贴板里面,然后粘贴到程序里面就行了。

询问chatgpt得知,只要用代码“set the clipboard to target string"就能实现这个功能!

-- Part 1: get the text from clipboard
set orgnparagraphText to text returned of (display dialog "Enter the text you want to input in trilium with automated math formula transformation; remember to change the keyboard into English:" default answer "")
set paragraphText to " " & orgnparagraphText
tell application "Trilium Notes"activate
end tell-- Part 2: delimiter paragraphText to oldDelimiters
set delimiter to "$"-- Set the text item delimiters to the delimiter
set oldDelimiters to AppleScript's text item delimiters
set AppleScript's text item delimiters to delimiter-- Split the paragraphText into pieces
set shellPieces to text items of paragraphText-- Restore the original text item delimiters
set AppleScript's text item delimiters to oldDelimiters-- Part 3 insert ino trilium
-- Loop through the paragraph pieces
set i to 0
set j to 0
-- 这里插入一段是因为apple的keystroke似乎有点bug,第一个输入是反序的,所以我们这里输入一个空格来避免这个情况。同时,每次keystroke之间应该delay一会,等待系统反应过来。
tell application "System Events"keystroke " "delay 0.1
end tell
repeat with piece in shellPieces-- even or oddif length of piece is not equal to 0 thenif i is equal to 1 thentell application "System Events"keystroke "m" using command downdelay 0.1set the clipboard to piecekeystroke "v" using command downdelay 0.1keystroke returndelay 0.1end tellset i to 0set j to 1elseif j is equal to 0 thentell application "System Events"-- delete the added spacekeystroke (ASCII character 8)delay 0.1end tellend iftell application "System Events"set the clipboard to piecekeystroke "v" using command downdelay 0.1end tellset i to 1set j to 1end ifend if
end repeat

那么,这个工具的设计就大功告成了,完结撒花!

相关文章:

使用applescript自动化trilium的数学公式环境(二)

9.23 ver1 没想到今天很有精神,在玩chatgpt的时候突然想到,为什么不让他帮我写一份代码呢?说干就干。但是,可能是因为我的英语不怎么样,chatgpt生成出来的整个东西实在是菜的抠脚。所以我觉得还是应该自己先想好一个大…...

机器学习与数据挖掘第三、四周

为什么第二周没有呢……因为刚换老师,自学要适应一段时间。 本课程作者之后的学习目标是:实操代码,至少要将作者参加数学建模中用到的数据处理方法都做一遍。 首先,作者复习一下李宏毅老师的两节课程。 机器学习概述 机器学习就…...

黎明加水印微信小程序源码 支持流量主接入

黎明加水印微信小程序源码,支持流量主接入。支持从聊天记录选择文件、相机拍摄、直接选择文件 支持白底、黑底的隐形水印,制作后,通过增加蒙版方能看到水印 纯前端,可嵌入任何项目。 部署教程 1、解压后得到项目文件夹 3、把…...

22 Python的argparse模块

概述 在上一节,我们介绍了Python的datetime模块,包括:datetime模块中一些常用的属性和函数。在这一节,我们将介绍Python的argparse模块。argparse模块是Python的一个标准库,用于编写命令行界面。它可以处理命令行参数和…...

Unity之NetCode多人网络游戏联机对战教程(3)--NetworkObject组件讲解

文章目录 NetworkObjectAlways Replicate As RootSynchronization TransformActive Scene SynchronizationScene Migration SynchronizationSpawn With ObserversDont Destroy With OwnerAuto Object Parent Sync 后话 NetworkObject 为了复制任何Netcode感知属性或发送/接收R…...

正点原子lwIP学习笔记——Socket接口UDP实验

1. Socket接口UDP连接配置 Socket接口的UDP配置流程如下: sin_family 设置为 AF_INET 表示 IPv4 网络协议;sin_port 为设置端口号, 可设置为 8080;sin_addr.s_addr 设置本地 IP 地址;调用函数 Socket 创建 Socket 连…...

连接组学中的机器学习:从表征学习到模型拟合

前言 机器学习(ML)由于其高自动化程度、高灵敏度和特异性优势,在医学影像领域取得了巨大的成功。由于具备这些优势,机器学习已被广泛应用于神经成像数据,目的是提取与感兴趣变量(如疾病状态)相关的特征。这使我们能够形成关于不同条件下大脑…...

数据结构-----二叉树的创建和遍历

目录 前言 二叉树的链式存储结构 二叉树的遍历 1.前序遍历 2.中序遍历 3.后序遍历 二叉树的创建 创建一个新节点的函数接口 1.创建二叉树返回根节点 2.已有根节点,创建二叉树 3.已有数据,创建二叉树 前言 在此之前我们学习了二叉树的定义和储…...

【算法题】1333. 餐厅过滤器

题目: 给你一个餐馆信息数组 restaurants,其中 restaurants[i] [idi, ratingi, veganFriendlyi, pricei, distancei]。你必须使用以下三个过滤器来过滤这些餐馆信息。 其中素食者友好过滤器 veganFriendly 的值可以为 true 或者 false,如果…...

linux脚本笔记

目录 1.增加环境变量 2.自定义命令快捷键 3.关闭selinux和防火墙 4.增加别名快捷键 5.Linux链接 1.增加环境变量 新建add_env.sh #!/bin/bashapp_dir"/root/docker"# 检查配置文件中是否已存在相同的环境变量 if grep -q -E "^export APP_HOME.*" ~…...

目标检测YOLO实战应用案例100讲-面向路边停车场景的目标检测(中)

目录 3.1.1 特征图相似度计算 3.1.2 特征图相似度实验 3.1.3 基于GhostBlock的网络结构改进...

[论文笔记]Prefix Tuning

引言 今天带来微调LLM的第二篇论文笔记Prefix-Tuning。 作者提出了用于自然语言生成任务的prefix-tuning(前缀微调)的方法,固定语言模型的参数而优化一些连续的任务相关的向量,称为prefix。受到了语言模型提示词的启发,允许后续的token序列注意到这些prefix,当成虚拟toke…...

electron快速入门

新建electronstu01文件夹 以管理员身份运行powershell,切换到该文件下 npm init -y安装依赖包 npm install --save-dev electron失败 npm install -g cnpm --registryhttps://registry.npm.taobao.org cnpm install --save-dev electron修改 package.json &qu…...

C语言的stdio.h的介绍

C语言的stdio.h的介绍 C语言的stdio.h的介绍 C语言的stdio.h的介绍C语言stdio.h的介绍 C语言stdio.h的介绍 这个含义是导入标准输入输出库 包含头文件.h&#xff0c;std标准库&#xff0c;io是input output输入输出库 <>代表系统库&#xff0c;自定义的话用""…...

使用香橙派 在Linux环境中安装并学习Python

前言 在实际项目中&#xff0c;经常会遇到需要使用人工智能的场景&#xff0c;如人脸识别&#xff0c;车牌识别等...其一般的流程就是由单片机采集数据发送给提供人工智能算法模型的公司&#xff08;百度云&#xff0c;阿里云...&#xff09;&#xff0c;然后人工智能将结果回…...

如何开发物联网 APP?

如何开发物联网 APP? 这个问题本身是不严谨的&#xff0c;APP只是手机端的一个控制或者用于显示的人机交互页面&#xff0c;物联网是通过传感器&#xff0c;物联网卡等模块把物体接入网络以方便远程监控或者控制等。 你问的应该是怎么开发出来一个远程控制物体的APP吧&#x…...

配置pytorchGPU虚拟环境-python3.7

cuda版本的pytorch包下载地址戳这里 winR->输入cmd->输nvcc -V回车 cuda 11.0 输入以下命令来查找 CUDA 的安装路径&#xff1a; Windows: where nvcc 输入以下命令来查找 cuDNN 的版本号&#xff1a; Windows: where cudnn* cuDNN 8.0 本机安装的是cuda 11.0&…...

Logic Pro X10.7.9(mac乐曲制作软件)

Logic Pro X是由苹果公司开发的一款专业音频制作软件&#xff0c;主要用于音乐制作、录音、混音和母带处理等方面。以下是Logic Pro X的特点&#xff1a; 强大的音频编辑功能&#xff1a;Logic Pro X提供了丰富的音频编辑工具&#xff0c;包括波形编辑器、音频自动化、时间拉伸…...

第一部分:HTML5

目录 一&#xff1a;网页 1.1&#xff1a;什么是网页&#xff1f; 1.2&#xff1a;什么是HTML&#xff1f; 1.3&#xff1a;网页的形成 二&#xff1a;常用浏览器 三&#xff1a;Web标准 3.1&#xff1a;为什么需要Web标准&#xff1f; 3.2&#xff1a;Web标准的构成 四&a…...

Linux 基础入门

目录 一、计算机 1、组成 2、功能 二、操作系统 1、定义 2、主要工作 3、操作系统内核功能 4、常见的操作系统 三、Linux的组成 四、搭建Linux学习环境 五、安装远程连接Linux的软件 1、安装xshell 2、安装mobaxterm 六、Linux操作系统学习大纲 一、计算机 1、组…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...