首页
游戏
影视
直播
广播
听书
音乐
图片
更多
看书
微视
主播
统计
友链
留言
关于
论坛
邮件
推荐
我的云盘
我的搜索
我的记录
我的图片
我的图书
我的笔记
我的音乐
我的影视
我的邮件
Search
1
virtuoso和empyrean alps模拟仿真和混仿教程
166 阅读
2
在IC617中进行xa+vcs数模混仿
163 阅读
3
科普:Memory Compiler生成的Register file和SRAM有何区别?
153 阅读
4
文档内容搜索哪家强? 15款文件搜索软件横向评测
120 阅读
5
vcs debug rtl或者netlist 中的loop
85 阅读
默认分类
芯片市场
数字电路
芯片后端
模拟电路
芯片验证
原型与样片验证
算法与架构
DFX与量产封装
PC&Server OS设置
移动OS设置
软件方案
新浪备份
有道备份
登录
Search
标签搜索
AI
python
Docker
vcs
PyQT
STM32
cadence
linux
systemverilog
EDA
Alist
vscode
uos
package
MCU
C
QT
CXL
sed
sv
bennyhe
累计撰写
378
篇文章
累计收到
31
条评论
首页
栏目
默认分类
芯片市场
数字电路
芯片后端
模拟电路
芯片验证
原型与样片验证
算法与架构
DFX与量产封装
PC&Server OS设置
移动OS设置
软件方案
新浪备份
有道备份
页面
游戏
影视
直播
广播
听书
音乐
图片
看书
微视
主播
统计
友链
留言
关于
论坛
邮件
推荐
我的云盘
我的搜索
我的记录
我的图片
我的图书
我的笔记
我的音乐
我的影视
我的邮件
搜索到
378
篇与
的结果
2026-02-26
轮毂电机光电增量编码器的ABZ信号详解
轮毂电机ABZ信号详解。 轮毂电机的定位使用了霍尔信号和光电增量编码器,1024线的。也就意味着,轮子转一圈,A信号和B信号各有1024个高电平和低电平。实际应用中,我们将A/B信号的上升沿和下降沿分别设置为外部中断触发信号,这样,我们就进行了1024的四倍频,最后的结果就4096。 如下如所示:第一行是顺转,可以看到A比B快1/4个周期;第二行是倒转,A比B慢1/4个周期。 轮子机械角度上转一圈,A和B各有1024个周期,通过4倍频,就能实现轮子转一圈编码为4096了。 如何通过A和B判断转向呢: 第一行: A下降沿中断且B为高,或者A为上升沿中断且B为低 ,是顺转。 第二行: A下降沿中断且B为低,或者A为上升沿中断且B为高 ,是倒转。 Z信号相当于是每转一圈给一个脉冲。
2026年02月26日
27 阅读
0 评论
0 点赞
2026-02-26
RISC-V CPU侧信道攻击原理与实践
https://zhuanlan.zhihu.com/p/393106129RISC-V作为一种全新的开源CPU指令集体系结构(ISA),目前无论是在高校与各研究机构,还是商业应用中,皆方兴未衰,大有与X86和ARM形成成三足鼎立之势。但对于RISC-V CPU本身的安全, 却资料少而凌乱,晦涩难懂,面目狰狞,拒人于千里之外。故有此冲动,写几篇有关RISC-V CPU侧信道攻击的文章,介绍RISC-V CPU侧信道攻击的原理和作者本人的实践;作者研究CPU侧信道攻击的初衷也是为“防守”,意在为某款RISC-V CPU提供一个安全性验证平台,验证该CPU安全设计加固方案之有效性。我将用一系列文章来来介绍:什么是CPU侧信道攻击?导致CPU产生侧信道攻击风险的微架构设计技术Spectre攻击的种类与攻击方法细节;Meltdown攻击原理与工具过程;降低CPU侧信道攻击风险的手段那就让我们开始吧。侧信道攻击概述1.1什么是侧信道攻击1.1.1 日常生活中的侧信道攻击在科技日新月异的今天,在享受高科技带来的幸福感的同时,我们的隐私也会在不知不觉中从各种渠道被泄露出去,有些甚至你完全想不到,可以说防不胜防,比如说,你想过单从按键声音就分析出你的手机号码么?大家可能听说过网友“清华南都”就根据一段视频中的按键音,还原出了360总裁周鸿祎的手机号。事情起源于优酷的记者电话采访周鸿祎先生的一段视频. 在视频的第33-43秒,记者与周鸿祎先生进行了电话连线,视频播放把整个拨号过程也原封不动地播放了出来,包括在电话拨号阶段的产生的电话拨号音,“清华南都”就根据这段拨号音结合一些DTMF(双音多频, Dual-tone multi-frequency)的技术基础,破解这个电话号码;在这个事情中,如果把周鸿祎先生的电话号码当做一个高度机密信息(private data)的话,“清华南都”本人并没有看到过周先生的电话号码,也没有采用暴力破解的方式一个个电话号码去尝试,而“清华南都”通过分析声音特征信息获取了该机密信息,这个过程从技术范畴的角度讲就是一种利用了声波信息的“侧信道攻击”。那到底什么是侧信道攻击?维基百科是这么定义的:“在密码学中,侧信道攻击(Side-channel attack)是一种攻击方式,它基于从密码系统的物理实现中获取的信息,而非暴力破解法或是算法中的理论性缺陷,例如利用时间信息、功率消耗、电磁泄露或甚是声音可以提供额外的信息,来对系统的破解。”这个定义对于非密码学行业从业人员来讲还是非常抽象的。我们简单一点理解就是利用一些“旁门左道”的手法来获取我们需要的机密信息;比如我们经常在电视剧中看到的一个场景:一个窃贼将听诊器压在保险柜的前面板上,通过内部的机械声来打开保险柜。小偷会慢慢地转动转盘,听着内部机械结构所泄露出的咔哒声或阻力声,来分析保险箱齿轮的内部运作,并从而得知其密码的组合。除了拨号盘上的数字和保险柜“是”或“否”的打开状态以外,这个保险柜并不会给用户任何反馈。但保险箱的物理机械所产生的那些微小的触动和声音线索,这也是一个典型的侧信道攻击。某网站(https://www.wired.com/story/lamphone-light-bulb-vibration-spying/...)曾经公布了一项新技术(lamphone):“通过使用望远镜观察室内悬挂的灯泡的振动(通过灯泡所发出的光的微弱变化),可以实时窃听房间内的对话”。这种技术将测信道攻击变得更加具有广泛性。1.1.2 计算机领域的侧信道攻击计算机领域的侧信道攻击是利用计算机不经意间释放出的信息信号(如电磁辐射,电脑硬件运行产生的声音)来进行破译的攻击模式:例如,黑客可以通过计算机显示屏或硬盘驱动器所产生的电磁辐射,来读取你所显示的画面和磁盘内的文件信息;或是,通过计算机组件在执行某些程序时需要消耗不同的电量,来监控你的电脑;亦或是,仅通过键盘的敲击声就能知道你的账号和密码。最早的计算机侧信道攻击之一,是美国国家安全局(National Security Agency)所称的TEMPEST。1943年贝尔实验室发现,每当有人在电传打字机上打字时,电传打字机会导致附近示波器的读数移动。贝尔实验室的研究人员很快意识到这一问题。电传打字机的目的是为了实现安全、加密的通信,但任何接近它的人,只要能读到它的电磁辐射,就有可能破译它的秘密。这种现象直到1985年才被完全公开记录下来,当时一位名叫维姆·范·埃克(Wim van Eck)的计算机研究人员发表了一篇论文,这就是后来被称为 "屏幕辐射窃密(van Eck phreaking)",即通过远距离检测电脑屏幕放电的电信号,在电脑屏幕上重建图像。计算机领域的侧信道攻击,目前使用最为广泛的攻击手段就是基于时序的攻击(timing attack)。讲了那么多故事,让我们来看一段代码直观地了解一下什么是时序攻击:这是某产品中的一个秘钥比对函数,假设这个函数的用户无法看到源码(也不进行反汇编),我们只是通过库函数的头文件知道这个函数接口定义为int does_password_match(char * input_password)。那我们怎么能够快速地获取函数内部设定的机密信息strPrivateKey的值呢?你可能首先想到的是采用暴力破解方式,逐一尝试各种字符组合,直到函数返回true为止;如果这个秘钥只使用字母和数字,并且秘钥的最大长度7,那你需要尝试的最大次数为62**7=3,521,614,606,208【注26大写字母+26小写字母+10数字)。如果我们利用一下这个函数的timing信息,测量一下这个函数的处理时间,我们其实可以有一种更为快捷的方法,我们可以采用逐位破解的方法快速地完成这个任务;因为我们输入的密码与机密信息的匹配度越高,该函数的处理时间越长,这样我们通过测量这个函数的处理时间就可以判断前面的第一位,第二位,第三位等是否验证通过;则最坏的尝试的次数为62*7=434;用这种方式实现的一个产品(比如密码门禁系统),通过采用timing-attack的方法,其破解是完全可以通过人力的方式在数分钟内完成的;1.1.3 CPU的侧信道攻击目前随着超标量CPU技术的飞速发展,其处理性能大幅提升的同时, 以计算机为中心的侧信道攻击也变得更加复杂和手段多样。所谓道高一尺,魔高一丈; 2018伊始,两个芯片级漏洞Meltdown(熔断)、Spectre(幽灵)漏洞震惊了安全界。受影响的CPU包括Intel、AMD和ARM,基本囊括的消费级CPU市场的绝大部分。Meltdown漏洞可以在用户态越权读取内核态的内存数据,Spectre漏洞可以通过浏览器的Javascript,读取用户态的内存数据。这两个漏洞摧毁了公有云的基石(用户数据隔离),因为通过Meltdown和Spectre的攻击,用户在虚拟机里就可以无限制的读取宿主机或者其他虚拟机的数据。Spectre、Meltdown等攻击方式利用了微处理器的 "微架构"设计中的这些特性(站在安全的角度也可以叫漏洞,包括但不局限于分支预测,推断执行,乱序执行,等)。随着计算机变得越来越复杂,如果计算行业继续优先考虑性能而不是安全,侧信道攻击将会越来越猖獗,今天一个你看似巧妙的设计,非常有可能成为明天攻击的一个突破口。1.2 侧信道攻击的分类对于CPU侧信道攻击,很多公司(比如google和微软)成立了专门的安全团队,用来发现目前市场上主流CPU的安全风险并提供安全解决方案以降低危害(mitigation of the risk)。 随着对上述meltdown和Spectre攻击方式的研究深入,越来越多的基于meltdown和spectre的变种被开发了出来。参考文献[A Systematic Evaluation of Transient Execution Attacks and Defenses]对瞬态执行攻击进行了系统的分析,并把当前已经发现的针对CPU微架构的侧信道攻击方法进行了总结与归类(见图),文献的作者认为当前大部分的安全防护方法无法有效应对当前如此多的攻击方式带来的安全风险。本系列文章主要描述如下几种Spectre变种攻击方式:• Variant 1 (Spectre_PHT): bounds check bypass• Variant 2 (Spectre_BTB): branch target injection• Variant 4 (Spectre_STL): Store bypass• Variant 5 (Spectre_RSB): Return Stack Buffer【注:PHT: Pattern History Table, BTB:Branch Target Buffer, STL:Store To Load, RSB:Return Stack Buffer】Meltdown属于 Variant 3, Meltdown还可以进一步细分为:• Meltdown-US(Supervisor-only Bypass)• Meltdown-P(Virtual Translation Bypass)• Meltdown-GP(System Register Bypass)• Meltdown-NM(FPU Register Bypass)• Meltdown-RW(Readonly Bypass)• Meltdown-PK(Protection Key Bypass)• Meltdown-BR(Bounds Check Bypass)我们重点关注高性能CPU的一些通用设计带来的风险,而对于某些厂家独特设计带来的问题,本文不做过多的描述。
2026年02月26日
43 阅读
0 评论
0 点赞
2025-12-08
windows 知识汇总
1 右键菜单添加使用gvim打开方式①打开注册表编辑器,开始-->运行-->regedit②定位到:HKEY_CLASSSES_ROOT---> * --->Shell,在Shell 上右击,新建---> 项,输入: Open With gvim(使用vim打开)③在 Open With gvim 右键--->新建--->字符串值,数值名称设置为:Icon,数值数据设置为:C:\MyProgram\gvim73\gVimPortable\vim\vim73\gvim.exe,0数值名称:Icon数值数据:C:\MyProgram\gvim73\gVimPortable\vim\vim73\gvim.exe,0④在刚才新建的项:Open With gvim 下面添加一个新项:Command修改 Commnad 项右边窗口的数值数据为:C:\MyProgram\gvim73\gVimPortable\vim\vim73\gvim.exe %1C:\MyProgram\gvim73\gVimPortable\vim\vim73\gvim.exe %1上面的设置会带来一个小问题:当文件名的最后一个字符为空格时,使用GVIM打开某个文件时会新建一个空白的文件,而不是直接打开该文件。解决方法:加引号,如下:C:\MyProgram\gvim73\gVimPortable\vim\vim73\gvim.exe "%1"效果如下:本文转自hapjin博客园博客,原文链接:http://www.cnblogs.com/hapjin/,如需转载请自行联系原作者2 windows 家庭版添加gpedit@echo off pushd "%~dp0" dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >List.txt dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientTools-Package~3*.mum >>List.txt for /f %%i in ('findstr /i . List.txt 2^>nul') do dism /online /norestart /add-package:"C:\Windows\servicing\Packages\%%i" pause
2025年12月08日
25 阅读
0 评论
0 点赞
2025-10-27
各个系统下效率提升工具
windowsutools 快速启动软件文件夹或者自定义功能uTools 是一个极简、插件化的现代桌面软件,通过自由选配丰富的插件,打造得心应手的工具集合。通过快捷键(默认 alt + space )就可以快速呼出这个搜索框。你可以往输入框内粘贴文本、图片、截图、文件、文件夹等等,能够处理此内容的插件也早已准备就绪,统一的设计风格和操作方式,助你高效的得到结果至于好用的截图工具snipaste、历史剪切板工具ditto,ocr 工具等等,在utools 都包含了其功能,甚至是自动化处理流程,utools 还有很多其他插件,等待你去探索,任何一个操作都可以自定义快捷键。还支持window、linux、macos。quicker 自动化鼠标键盘工具,可以自定义自动化工作流、根据当前窗口进程自动弹出自定义操作你的指尖工具箱,提供快捷面板和组合动作定制的自动化工作流神器。 简介 Quicker 是一款专为Windows操作系统设计的高效率工具,它通过引入快捷面板和组合动作功能,致力于简化用户的操作流程,大幅提升工作效率。 Quicker让用户能够创建个性化的捷径,自动化执行一系列复杂任务,并通过多种触发方式快速执行这些任务。 产品功能 快捷面板:提供一键访问常用操作和软件的功能,快速启动应用或执行命令quicker 这个工具除了可以模拟键盘鼠标的任何操作,一键输入用户名密码,还可以识别当前的活动窗口进程,根据不同的活动窗口弹出的操作界面不一样,特别方便,比如识别到当前窗口是wps,按快捷键启动quicker ,弹出的窗口的操作都是wps 的操作。文件或者文件夹快速搜索:Everything"Everything" 是 Windows 上一款搜索引擎,它能够基于文件名快速定文件和文件夹位置。您在搜索框输入的关键词将会筛选显示的文件和文件夹;如果日常生活工作涉及各种文件,那这个工具你绝对不容错过。个人总结:速度非常快,随点随用,比Windows自带的好用太多;搜索全面,连回收站里未清空的文件都能搜索出来;体积很小、完全免费、绿色无广告;支持关键词+检索式检索文档内容搜索:anytxt searchAnytxt Searcher(中文名:文件内容秒搜软件),是一个功能强大的本地全文搜索工具。它内置了一个强悍的文档分析器,几乎可以在1秒以内,搜索出存储在电脑里面所有文字内容。Anytxt Searcher支持对100多种格式文件的全文搜索,包括:文本文档 (txt、cpp、py、java、css 等)Microsoft Outlook电子邮件 (eml)Word文档 (doc、docx)Excel文档 (xls、xlsx)PPT文档 (ppt、pptx)PDF文档格式(pdf)WPS Office文档格式 (wps、et、dps)开放文档格式 (OpenOffice、LibreOffice、ofd 等)电子书格式 (epub、mobi、chm、fb2、azw 等)思维导图格式 (xmind、mm、mmap、lighten 等)图片格式[OCR版] (jpg、png、bmp 等)二进制文件(exe、dll、so 等)压缩归档文件(zip、7z、rar、iso 等)日历 任务 番茄时间管理 :时光序 时光序是一款帮你规划日程、高效完成事务的时间管理应用。它的一大特色之一便是功能强大却不复杂,简约的同时却不简单。 文件浏览&&预览:double commanderDouble Commander 是一款开源的跨平台文件管理软件,灵感来源于 Total Commander,采用了两栏式界面设计,支持 Windows、Linux 和 MacOS 系统。该软件的开发始于 2007 年,旨在提供一个高效、功能丰富的文件管理解决方案。Double Commander 的特点包括对各种文件和压缩包格式的支持,内置文件查看器和文本编辑器,以及可定制的快捷键和外观。用户可以通过插件扩展其功能,满足不同的文件管理需求。优点方面,Double Commander 提供了强大的文件搜索、比较和同步功能,支持批量重命名,且其用户界面可以高度定制,使得文件管理工作更加高效。linuxutools 快速启动软件文件夹或者自定义功能uTools 是一个极简、插件化的现代桌面软件,通过自由选配丰富的插件,打造得心应手的工具集合。通过快捷键(默认 alt + space )就可以快速呼出这个搜索框。你可以往输入框内粘贴文本、图片、截图、文件、文件夹等等,能够处理此内容的插件也早已准备就绪,统一的设计风格和操作方式,助你高效的得到结果至于好用的截图工具snipaste、历史剪切板工具ditto,ocr 工具等等,在utools 都包含了其功能,utools 还有很多其他插件,等待你去探索,任何一个操作都可以自定义快捷键。autokey 自动化鼠标键盘工具,可以自定义自动化工作流AutoKey 是一款专为Linux和X11桌面环境设计的自动化工具,它允许用户通过脚本和快捷方式自动执行常见的输入任务,极大地提高效率。此项目原托管于Google Code,现已全面更新以支持Python 3文件或者文件夹快速搜索: FsearchFSearch 是 Linux 上的一个免费文件搜索工具。据说它的灵感来自于“Everything”搜索引擎,这是一个流行的搜索工具,用于在 Windows上查找文件和文件夹。FSearch 基于 GTK3,用 C 语言编写。除此之外,这使得它在 Linux 上索引和搜索文件时非常快。此外,增加了对使用正则表达式查询的支持,从而实现更快、更灵活的搜索体验。FSearch 有哪些功能?FSearch 是 Linux 上功能丰富的搜索实用程序之一。因此,它带来了以下特性:快速索引即时结果(在输入查询时开始显示结果)高级搜索(支持各种操作符、通配符、修饰符和函数)正则表达式查询过滤器(用于将搜索范围缩小到文件、文件夹或两者都有)快速排序(具有多个排序选项)可定制的用户界面文档内容搜索:docfectcherDocFetcher 直译的意思是“文档获取者”,是一款“站在文件夹顶端”的桌面全文检索引擎。DocFetcher 能够在你指定的一堆文件里,用关键词秒级定位到含有该文字的具体位置,并把上下文像搜索引擎那样高亮呈现出来。DocFetcher 支持 Word、Excel、PPT、PDF、EPUB、TXT、HTML、代码文件(C/C++、Java、Python、Go 等)、邮件 eml、压缩包 zip/7z/rar(内层文件也能穿透)等 40 余种格式,只要先让它“索引”一次,以后每次搜索都像是把 Google 搬进自己硬盘,回车一按,结果立现。日历 任务 番茄时间管理 :时光序 时光序是一款帮你规划日程、高效完成事务的时间管理应用。它的一大特色之一便是功能强大却不复杂,简约的同时却不简单。 文件浏览&&预览:doublecommanderDouble Commander 是一款开源的跨平台文件管理软件,灵感来源于 Total Commander,采用了两栏式界面设计,支持 Windows、Linux 和 MacOS 系统。该软件的开发始于 2007 年,旨在提供一个高效、功能丰富的文件管理解决方案。Double Commander 的特点包括对各种文件和压缩包格式的支持,内置文件查看器和文本编辑器,以及可定制的快捷键和外观。用户可以通过插件扩展其功能,满足不同的文件管理需求。优点方面,Double Commander 提供了强大的文件搜索、比较和同步功能,支持批量重命名,且其用户界面可以高度定制,使得文件管理工作更加高效。macosutools 快速启动软件文件夹或者自定义功能uTools 是一个极简、插件化的现代桌面软件,通过自由选配丰富的插件,打造得心应手的工具集合。通过快捷键(默认 alt + space )就可以快速呼出这个搜索框。你可以往输入框内粘贴文本、图片、截图、文件、文件夹等等,能够处理此内容的插件也早已准备就绪,统一的设计风格和操作方式,助你高效的得到结果至于好用的截图工具snipaste、历史剪切板工具ditto,ocr 工具等等,在utools 都包含了其功能,utools 还有很多其他插件,等待你去探索,任何一个操作都可以自定义快捷键。KeysmithKeysmith 描述自己为「创建自定义快捷键」,实在是有些谦虚,看似简单的功能其实给了用户很大的想象空间。与 Automator 相反,Keysmith 的设计十分克制,你并不可以凭空添加自动化动作,一切动作都始于你的「录制」。也正因这份克制,Keysmith 拥有十分简洁的界面。文件或者文件夹快速搜索: Pro Everything闪电般的搜索速度:全盘文件秒级定位,比 Spotlight 快 100 倍,输入文件名瞬间出结果!隐藏文件全覆盖:系统文件、隐藏文件一个不漏,连 ~/.ssh 这种隐藏文件都能轻松搜出来,Spotlight 直接被秒成渣!文件预览如丝般顺滑:搜索结果直接预览文件内容,省去打开文件的麻烦,效率党狂喜!批量操作逆天省时:支持批量移动、复制、删除,处理上千个文件很轻松!拖放交互超爽:搜索结果直接拖到其他应用,文件分享、编辑很方便,工作效率直接翻倍!隐私保护滴水不漏:仅收集设备序列号和系统版本号,数据安全到让你放心!多语言搜索无压力:中文、英文、日文随便搜,全球用户都能用得爽!轻量级设计:软件体积小到感人,资源占用低文档内容搜索:recollRecoll,跨平台( Recoll是一款开源的桌面搜索软件,支持Windows、Mac和Linux系统)免费的全文搜索软件,支持索引.Recoll是一款开源全文搜索软件,它通过智能索引技术,能够快速定位您电脑中的文件内容。无论是文档、电子书还是其他各类文件,Recoll都能轻松地帮助您找到所需信息,提高工作效率。项目技术分析核心技术Recoll 版本的核心技术是基于Xapian的全文搜索引擎。Xapian是一个开源的搜索引擎库,以其高效性和灵活性著称。以下是该软件的主要技术亮点:全文检索:通过全文检索技术,Recoll能够深入文件内部,搜索到关键词的确切位置。索引构建:软件会自动对指定文件夹内的文件进行索引,加快搜索速度。多格式支持:Recoll支持多种文件格式,包括txt、doc、pdf等,满足不同用户的需求。技术架构Recoll的技术架构主要包括以下几个部分:用户界面:采用简洁直观的图形界面,方便用户操作。索引引擎:基于Xapian的索引引擎,保证搜索的快速和准确。日历 任务 番茄时间管理 :时光序 时光序是一款帮你规划日程、高效完成事务的时间管理应用。它的一大特色之一便是功能强大却不复杂,简约的同时却不简单。 文件浏览&&预览:double commanderDouble Commander 是一款开源的跨平台文件管理软件,灵感来源于 Total Commander,采用了两栏式界面设计,支持 Windows、Linux 和 MacOS 系统。该软件的开发始于 2007 年,旨在提供一个高效、功能丰富的文件管理解决方案。Double Commander 的特点包括对各种文件和压缩包格式的支持,内置文件查看器和文本编辑器,以及可定制的快捷键和外观。用户可以通过插件扩展其功能,满足不同的文件管理需求。优点方面,Double Commander 提供了强大的文件搜索、比较和同步功能,支持批量重命名,且其用户界面可以高度定制,使得文件管理工作更加高效。iosLock Launcher锁屏启动 (Lock Launcher) 是一款 iOS 16 专用的「锁屏小组件」增强 APP 工具,可帮助用户快速一键启动:任意 APP / 微信或支付宝的健康码 (全国或分省) / 出示行程码 / 微信扫一扫 / 收付款码 (支付宝、云闪付) / 乘车码 / 快捷指令 / 网页 Web Apps / URL Scheme / 调用系统功能等,让新的锁屏界面发挥出应有的高效!快捷指令快捷指令是一种可让你使用 App 完成一个或多个任务的快捷方式。“快捷指令” App 可让你创建包含多个步骤的快捷指令。例如,你可以构建一个“冲浪时间”快捷指令来获取冲浪报道、提供预计到达海滩的时间以及播放冲浪音乐播放列表。文件或者文件夹快速搜索:easy searcheasySearch is a fast and efficient search and research tool for your iPad and iPhone. Search for text in files stored on your device, in iCloud, Dropbox, OneDrive, network and external media. Save your findings and track your progress.Find text in different storage locations文档内容搜索:FindText Find and replace text:1). Enter or Paste your text from the clipboard into the TextView2). You can choose Find or Replace function3). Enter the word or phrase you want to replace in Find what.4). Enter your new text in Replace with.日历 任务 番茄时间管理 :时光序 时光序是一款帮你规划日程、高效完成事务的时间管理应用。它的一大特色之一便是功能强大却不复杂,简约的同时却不简单。 文件浏览&&预览:ES文件浏览ES文件浏览器是一款功能强大的本地和网络文件管理器,支持多种文件管理和传输功能,广受用户欢迎。主要功能文件管理:ES文件浏览器支持多种视图和排序方式,用户可以方便地查看和打开各类文件。它允许在本地SD卡、局域网、OTG设备和互联网计算机之间自由传输文件。 应用管理:用户可以通过该应用安装、卸载和备份程序,并创建快捷方式,方便管理手机应用。 压缩与解压:支持文件的压缩和解压功能,用户可以轻松处理ZIP、RAR等格式的文件。 文本编辑:内置强大的文本编辑器,用户可以查看和编辑文本文件。 FTP和局域网访问:用户可以访问远程FTP服务器和局域网内的所有计算机,方便文件的共享和管理。 视频编辑:支持视频转GIF、视频拼接、添加音乐/字幕等功能,增强了多媒体处理能力。 云存储支持:用户可以同时登录多个云存储账号,方便管理和访问网络存储空间。AndroidFast! 快速启动软件文件夹或者自定义功能无论你是职场人士,需要在众多会议应用间快速切换,还是学生族,寻找快速访问学习工具的方式,FAST都能大显身手。对于那些追求效率的极客来说,这款应用更是如虎添翼,通过自定义设置和快捷操作选项(如长按应用图标进行深度管理),极大地提高了设备使用的便捷度。项目特点超快启动:仅需少量字符就能定位到应用。极致简约:不需要额外权限,保障隐私安全。灵活定制:用户可自由调整应用标签或创建快捷方式。高级功能:包括应用锁定、隐藏、通知访问等。开源精神:基于GPLv3许可,鼓励社群参与与贡献。社区支持:活跃的Google+社区,随时解答疑惑。MacroDroid 一款自动化神器——MacroDroid 这可不是什么普通的应用,它是一款功能强大的任务自动化和配置应用程序,能让你的手机变得更智能,从此告别繁琐的手动操作。是一个强大的Android自动化工具,它可以让你的手机根据特定的触发条件自动执行任务。这些任务可以是简单的,比如发送消息、连接网络,也可以是复杂的,比如根据你的位置自动调整手机设置。MacroDroid的界面直观,操作简单,即使是初学者也能轻松上手。文件或者文件夹快速搜索:anysearch这是一个快速搜索文件的工具。1).支持系统目录搜索(需要Root,无Root也可搜索部分系统文件,如系统Apk)2).支持通配符和正则表达式3).支持路径搜索4).支持媒体文件信息预览5).支持多种查看方式文档内容搜索:Anything安卓app手机版是一款安卓手机版的EverythingAnything安卓app手机版是一款安卓手机版的Everything,相信很多用户都对Everything这款PC上的搜索软件比较了解,这款Anything可以说是同样的强大,快速,简洁,准确,可以帮助搜索到很多文件,包括文件名,甚至文件中的内容都能搜到,非常好用。软件特色1)、按照文件名搜索,软件下方有视频、音乐、图片、文档四个分类可以筛选。2)、输入文件后缀也能快速找到文件,比如输入.mp4就能看到自己收藏的文件。3)、如果你实在想不起文件名,别急,它还支持文档搜索,输入文档中的内容也能搜到该文件。4)、Office 文档中除了Word,PPT和Excel表格正文也是支持的。5)、它支持文件忽略大小写搜索,长按文件的话可以直接在APP中打开文件所在路径,不过这里只能删除文件不支持重命名等其他操作。6)、除了上面提到的文件名搜索和office文档正文外,Anything还支持目录名搜索日历 任务 番茄时间管理 :时光序 时光序是一款帮你规划日程、高效完成事务的时间管理应用。它的一大特色之一便是功能强大却不复杂,简约的同时却不简单。 文件浏览&&预览:ES文件浏览ES文件浏览器是一款功能强大的本地和网络文件管理器,支持多种文件管理和传输功能,广受用户欢迎。主要功能文件管理:ES文件浏览器支持多种视图和排序方式,用户可以方便地查看和打开各类文件。它允许在本地SD卡、局域网、OTG设备和互联网计算机之间自由传输文件。 应用管理:用户可以通过该应用安装、卸载和备份程序,并创建快捷方式,方便管理手机应用。 压缩与解压:支持文件的压缩和解压功能,用户可以轻松处理ZIP、RAR等格式的文件。 文本编辑:内置强大的文本编辑器,用户可以查看和编辑文本文件。 FTP和局域网访问:用户可以访问远程FTP服务器和局域网内的所有计算机,方便文件的共享和管理。 视频编辑:支持视频转GIF、视频拼接、添加音乐/字幕等功能,增强了多媒体处理能力。 云存储支持:用户可以同时登录多个云存储账号,方便管理和访问网络存储空间。关于anytxt search、docfetcher、recoll等文件内容搜索的工具的比较,详见:http://www.bennyhe.cn/index.php/archives/357/
2025年10月27日
23 阅读
2 评论
0 点赞
2025-10-26
跨平台且开源的文本扩展器:Espanso
不论是在手机还是电脑上,我们在与人交流的过程中常常会形成或用到一些重复性的表述,这些表述的内容长度可多可少,但由于它们被用到频率十分之高,所以我们通常会更喜欢用类似于缩写的方式来代替我们一字一句输入的过程,例如说「yyds」(永远滴神)、「dddd」(懂的都懂)、「nbnhhsh」(能不能好好说话)等。这些缩写或缩略语通常也可以被看作是用户自定义词典,我们不仅可以在操作设备上自定义,也可以在输入法上自定义。不过它们也仅限于定义一些纯文字性质的内容且长度有限,同时这些自定义设置可能会和特定的操作系统相绑定又或是无法完全导出,迁移成本存在过高的情况。但有这么一类应用和自定义词典类似,它们为了用户自定义输入的缩写内容而生,不仅能定义纯文字性质的内容,还具备较强的扩展性,也被称为是文本扩展器(Text Expander)。文本扩展器的作用表现和我们在使用自定义词典时的方式别无二致,都是输入一个特定的表达式,然后就会被替换成我们事先定义好的内容,比如:---------------------------------> [input] #42 ---------------------------------- [output] 意大利面拌 42 号混凝土 <---------------------------------当我们在文本扩展器中事先设置完整内容之后,只要输入 #42 后就会转换成「意大利面拌 42 号混凝土」完整的句子。知名的文本扩展器有 TextExpander,不过它属于付费应用也不是我们此次讨论的主角;而本文我们所介绍的则是另外一款免费、开源、跨平台且基于 Rust 语言编写的文本扩展器——Espanso,它不仅简单易用、体积小巧,且可配置性强,用户不但可以基于命令行配置扩展内容,而且还可以安装来自于社区的第三方扩展包。快速上手因为 Espanso 是一个开箱即用的工具,其安装步骤简单到可以一笔带过:打开 Espanso 官网,点击推荐的系统版本,下载并安装。注:安装完成并启动 Espanso 时需要额外的操作授权,否则 Espanso 可能无法正确运行。当然我们主要是看看如何使用 Espanso。毕竟安装完毕后启动 Espanso 是不会直接显示什么华丽的界面,因为它本质可以算是一个名不见经传的后台程序,只不过以应用的方式活跃在系统后台。使用 Espanso 的方式十分简单,我们只需在任意一个可以输入内容的地方,像输入代码一样先按下英文冒号「:」,然后再输入剩下的指令就可以神奇地看到 Espanso 已经为我们补全了内容。其中由 : 开始的一系列内容称为触发器(Trigger),而补全后的内容也被称为是匹配项(Match)。比如我们现在输入 :date 的触发器指令那么 Espanso 直接会就帮我们将内容替换为表示当天日期的匹配项:就是这么简单!不过你可能会好奇,我是怎么知道 :date 匹配项的呢?我们也可以在状态栏中找到 Espanso 的图表并点击「Open Search Bar」选项或是按下 Option+空格(Windows 上是 Alt+空格)就可以弹出相应的列表与搜索界面:除此之外,因为我前面说了 Espanso 本质是一个后台程序,所以我们可以通过命令行来与之交互(可以在终端上通过 espanso --help 命令获取所有命令)。这里我们为了查看有哪些匹配项,可以直接使用 espanso match list 命令:espanso match list:espanso - Hi there!:date - {{ date }}可以看到 Espanso 并没有内置过多的匹配项,所以要想它能为我们更好地自动补全内容,就需要我们像自定义缩略语或短语一样事先进行人为配置。Espanso 的配置主要有两部分,我们可以通过 espanso path 命令来找到配置文件路径:espanso pathConfig: /Users/Bobot/Library/Preferences/espansoPackages: /Users/Bobot/Library/Preferences/espanso/match/packagesRuntime: /Users/Bobot/Library/Application Support/espanso上述结果中的 Config 部分即为 Espanso 在当前操作系统中的配置存放路径。当中主要包含了两部分配置:$CONFIG/ config/default.ymlmatch/base.yml其中:config 部分的配置主要是针对 Espanso 程序本身,包括自定义补全的触发符号(比如将前面的英文冒号 : 更改为其他符号)、是否只在特定应用内 Espanso 才会生效等等;match 部分的配置主要就是我们需要自定义补全的部分,也即 :date 这样的匹配项具体设置。默认情况下 Espanso 是对所有应用都生效,因此当我们在应用中输入时很有可能就会极易触发匹配项弄巧成拙,为了避免冲突我们需要在后续在 config 部分进行配置以进行过滤。不论是 Espanso 本身的配置还是自定义匹配项,Espanso 都采用了目前主流的 YAML 配置文件,我们可以直接通过系统自带的文本编辑器打开。但是由于 YAML 的格式有些特殊,对于语法格式有严格要求,所以建议你使用 VS Code 这类编程专用的编辑器并在当中安装对应的 YAML 插件来进行编辑、配置;除此之外,可能你还需要简单学习一下 YAML 语法 才能更好地自定义相关配置内容。现在就让我们来试着定义一组触发器与匹配项练习一番,这里我就使用 VS Code 来进行操作。首先通过前面的命令我们找到了 Espanso 的配置文件夹后点击并拖拽至 VS Code,然后我们可以在 match/base.yml 默认匹配项的基础上进行设置,也可以像我一样新建一个名为 custom.yml 的匹配项进行设置:接着在当中填入如下内容(注意:如果你是在默认的 base.yml 文件中进行设置,由于已经存在了 matches 键就不需要重复填写): # custom.yml matches: - trigger: ":tomorrow" replace: "{{mytime}}" vars: - name: mytime type: date params: format: "%Y-%m-%d" offset: 86400 - trigger: ":yesterday" replace: "{{mytime}}" vars: - name: mytime type: date params: format: "%Y-%m-%d" offset: -86400 当中的内容是由 YAML 语法构成的配置内容,其中每一组由「-」符号并紧接着 trigger 开始到下一个 trigger 前的一整块内容都表示定义一个匹配项,里面包括了触发器以及对应的替换内容等等,关于这部分配置我们在后续深入展开,现在暂时按下不表。检测到有文件修改或保存后 Espanso 会自动重新加载配置文件,之后当我们输入 :tomorrow 或 :yesterday 时,就会看到 Espanso 帮我们进行了自动补全:以上仅是对 Espanso 管中窥豹一番,虽然它用法简单,但如果我们想要最大程度地发挥它的作用,可能还有更多用法有待我们进一步探索,所以接下来就让我们再深入了解一下 Espanso 的相关细节。深入了解 EspansoEspanso 相关配置Espanso 的设置默认会作用到所有应用,但这通常可能会导致一些意想不到地冲突,所以我们最好需要对其进行调整。只在特定应用中生效Espanso 的默认配置为 config/default.yml 文件,但我们也可以针对不同应用在同一层级下添加不同的配置文件,比如 config/vscode.yml。之后我们可以在 vscode.yml 文件中添加过滤选项,即不让 Espanso 在使用 VS Code 时生效: # vscode.yml filter_class: "com.microsoft.VSCode" enable: false当我写入这短短地两行内容并保存之后,Espanso 就不会在我使用 VS Code 时生效从而避免了冲突。Espanso 提供了三种过滤应用的方式,包括上述示例即 filter_title、filter_exec 以及 filter_class,它们也分别对应了按当前活跃窗口的文本标题过滤、按应用的可执行路径过滤以及按当前活跃窗口的类名(编程概念)过滤。这三种方式默认使用正则表达式,倘若你不清楚具体的内容,那你就可以填写正则表达式:filter_exec: "Chrome$"enable: false当然你也可能会好奇我前面的例子是如何找到 VS Code 对应的类名 com.microsoft.VSCode?因为 Espanso 内置了一个探测指令可以一次性帮我们生成对应三种过滤方式的内容。在未屏蔽 Espanso 的情况下,我们可以像使用匹配项那样输入 #detect# 来进行触发,比如我在 macOS 的微信随便选择一个对话框,然后输入该指令即可弹出如下界面。之后我们只需要点击拷贝到剪切板再自行粘贴选择即可。建议你在配置时侧重选择除 filter_title 之外的另外两种方式,因为当前活跃窗口的标题文本内容变化幅度较大并不是很稳定。但除了像上述示例那样直接使用 enable: false 这样简单粗暴的屏蔽方式之外,Espanso 也提供了另外一种模式,让你可以自主选择在特定应用中只屏蔽(exclude)掉对应的匹配项。比如我现在排除掉我前面自定义的 custom.yml 文件:filter_class: "com.microsoft.VSCode"extra_excludes:"../match/custom.yml"默认情况下的路径为当前的 config 路径,而匹配项则是在与 config 同级的路径中,所以我们需要通过 ../match 的方式返回到同级目录然后再选择 match 目录。保存之后在 VS Code 中即便使用 :tomorrow 或 :yesterday 都不会得到相应的匹配项。如果要屏蔽的内容过多,你既可以使用 glob 模式来设置路径,也可以换一种思路,即只让某些匹配项——比如代码片段(Snippets)——在特定应用中生效,比如我现在有一个 match/pycode.yml 配置,当中准备了一些 Python 相关的代码片段,现在我只想这些片段只在 VS Code 中生效,那么此时就应该这样做:filter_class: "com.microsoft.VSCode"extra_includes:"../match/pycode.yml"修改 Espanso 默认设置尽管说 Espanso 有提供了基本的 UI 界面并驻留在状态栏中,但 Espanso 的设置都是需要通过配置文件来修改,这样的方式缺点很明显,就是对于一般用户而言缺少图形化配置界面还需要额外的学习成本;不过对于喜欢折腾的玩家来说也好处颇多,一方面你可以随时随地同步配置文件在,在不同操作系统之间也能保持配置统一;另一方面,你可以根据自己直接手动快速修改。比如 Espanso 默认的搜索框界面可以用 Option+空格(Windows 为 Alt+空格)打开,那么我们也可以直接修改为 Option+Shift+空格 打开:search_shortcut: OPTION+SHIFT+SPACE当然我们也可以禁用搜索框快捷键的同时,自定义快速弹出 Espanso 匹配项的搜索框界面的触发器: # default.yml search_shortcut: off search_trigger: ">esp" 之后我们只要敲击 >esp 就能令搜索框直接弹出。除此之外,如果你不喜欢每次修改配置文件时 Espanso 就自动重载,那么你也可以关闭该选项并在每次配置之后手动点击状态栏的驻留程序并选择「Reload config」选项:auto_restart: false如果你觉得 Espanso 在扩展文本时的速度有点慢,那么也可以直接选择将 pre_paste_delay 选项尽量调低一些(默认为毫秒 ms),以便快速替换而不是保留肉眼可见的延迟:pre_paste_delay: 100更多的匹配项用法Espanso 相比于其他文本扩展器或用户自定义词典最为突出的地方在于它的匹配项是灵活且可配置的,并且还能搭配终端的命令行工具一起使用得到最后的匹配结果,当然这都需要我们进行配置。静态匹配项最简单的匹配项配置就是 Espanso 默认自带的例子,它们通常是由 trigger 和 replace 一组内容来组成: - trigger: ":espanso" replace: "Hi, there!" 像这样内容既定的部分和我们自定义词典没有什么区别,也被称为静态匹配项(Static Matches)。借助于 YAML 语法我们也可以编写长串的替换文本,即: - trigger: ":espanso" replace: "Hi,\nthere!" - trigger: ":espanso" replace: | Hi, there!默认情况下 Espanso 会直接将 replace 的部分作为匹配项的描述内容,这当我们存在多个同名触发器且内容近似的匹配项时会很容易造成困惑,所以 Espanso 支持我们为匹配项加上对应的描述信息(label 标签),以便能更好地知道当前触发器所得到的内容是什么: # custom.yml - trigger: ":espanso" replace: "Hi, there!" label: "inline content" - trigger: ":espanso" replace: "Hi,\nthere!" label: "content with newline(\\n)" - trigger: ":espanso" replace: | Hi, there! label: "content with newline" 之后我们再次触发 :espanso 时就会能看到不同匹配项所对应的不同描述内容是什么。类似地,我们也可以让一个匹配项拥有多个触发器,这里就需要用到 YAML 的数组语法来设置,例如: - trigger: [":espanso", ":greet"] replace: "Hi, there!" label: "inline content"但如果你要设置的匹配项其触发器虽然比较多但表达类似,那么 Espanso 也支持你使用正则表达式的方式来进行设置,我们只将 trigger 替换成 regex 并使用正则表达式即可。我们可以直接将上述示例稍作修改: - regex: ":(espanso|greet)" replace: "Hi, there!" label: "inline content" 动态匹配项除了静态匹配项之外,Espanso 也支持动态匹配项,这也是让 Espanso 灵活且强大之处,我前面给出的明天和昨天日期的示例就是如此。因为这两个匹配项有些重复,这里我就以明天时间日期为例: - trigger: ":tomorrow" replace: "{{mytime}}" vars: - name: mytime type: date params: format: "%Y-%m-%d" offset: 86400在当前的匹配项之下我们还可以自定义变量,也即对应着 vars 之下的内容。变量一词就是编程中经常用来保存内容的基本单位,而 Espanso 允许我们沿用这样的设定直接为匹配项设置一连串的变量,之后动态地生成内容,而不是像静态匹配项那样一成不变。所以在设置 :tomorrow 所对应的匹配项时,我自定义了一个 mytime 变量,这个变量的类型(type)是日期类型,然后又分别表示有 format 用于表示日期展示样式和 offset 日期偏移两个参数。像日期类型这样的变量设置在 Espanso 中又被称为扩展(Extension)。所以除了日期类型之外,Espanso 还支持多种类型以适应动态匹配项的需要,如多选类型、随机类型、脚本类型、Shell 命令类型等等。其中脚本类型和 Shell 命令类型有些类似,只不过前者主要是针对于逻辑更为复杂的脚本文件,它们通常由某种编程语言来编写,而后者主要就是适用于我们所示的终端命令行工具: # custom.yml - trigger: ":pynow" replace: "{{now}}" vars: - name: now type: script params: args: - python3 - -c - | from datetime import datetime print(datetime.now()) - trigger: ":sspai_title" replace: "{{title}}" vars: - name: title type: shell params: cmd: "curl -s https://sspai.com | htmlq --text 'title'" shell: zsh 上述定义的 :pynow 和 :sspai_title 两个动态匹配项里分别用到了脚本类型和 Shell 命令类型,前者是执行 Python 解释器及其来输出最终结果,而后者则是通过系统内的 curl 和 htmlq 两个命令行工具来访问少数派官方并通过 HTML 获得最终的标题内容。除了脚本类型和 Shell 命令类型之外,Espanso 还有一种类型——Form 表单——适用于多处动态内容生成的情况,通常可以被作为模板来使用,比如邮件回复模板、问题反馈模板等等: - trigger: ":reply" form: | Hey [[name]], Thank you for your email. We have already try to handle the [[number]] issue. 在上述匹配项中我们没有 replace 键,取而代之的是 form,并且当中的动态内容部分则是由之前的花括号变成了方括号。这是 Espanso 对于表单内容的一个简写方式,本质上等价于定义变量的方式: - trigger: ":reply" replace: | Hey {{template.name}}, Thank you for your email. We have already try to handle the {{template.number}} issue. vars: - name: template type: form params: layout: | Hey [[name]], Thank you for your email. We have already try to handle the [[number]] issue. 所以当我们配置完毕并保存后,输入 :reply 时会直接弹出 Espanso 为我们准备好的表单界面,我们只需填好其中的部分即可快速生成模板内容。但 Espanso 也还支持某个匹配项在其他匹配项中被使用或引用,极大地提高了灵活性与复用性。比方说我们现在再为这个模板自动带上一个当前回复日期:代码块复制Hey 100gle,Thank you for your email. We have already try to handle the #314 issue.2022-12-12那么我们就可以使用这种引用方式: - trigger: ":today" replace: "{{today}}" vars: - name: today type: date params: format: "%Y-%m-%d" - trigger: ":reply" replace: | Hey {{template.name}}, Thank you for your email. We have already try to handle the {{template.number}} issue. {{today}} vars: - name: today type: match params: trigger: ":today" - name: template type: form params: layout: | Hey [[name]], Thank you for your email. We have already try to handle the [[number]] issue.在 :reply 匹配项的变量中,我们会定义一个 today 变量,它的参数类型是特殊的 match 匹配项,然后当中的 trigger 参数与我们 :today 匹配项的触发器一致。这样只要我们填写完姓名与问题 ID 之后就会在模板中还自动生成当前的回复日期。安装社区第三方扩展包自定义匹配项会是一个永无止境的过程,因为它会随着个人的需要而与日俱增。但人类知识是相通的,也有一些内容可能不仅个人会用到,在互联网某一隅的一群人也会用到,譬如说 Emoji。可你知道吗?在我们日常网络交流中经常使用的每一个 Emoji 表情,其实也都基本有一个相对应称呼(CLDR Short Name),这里我就直接引用 Unicode 官方给出的示例列表:Browser CLDR Short Name😀 grinning face😃 grinning face with big eyes😄 grinning face with smiling eyes上述三个表情虽然都属于笑脸范畴,但是它们对应的 Unicode 编码不同,其文字称呼也不同;这也就意味着我们不仅能够通过 Unicode 编码来找到它们,同理文字称呼也适用。所以你要是恰好知道某个 Emoji 的名称而又不像自己四处翻找,那么借助 Espanso 就可以直接类似 :grinning-face 以文字称呼得到 Emoji 表情。Espanso 允许我们安装来自于社区其他人共享的第三方扩展包,它会类似于插件地形式来扩充我们的匹配项,可以让我们「站在巨人的肩膀」上去更好地使用 Espanso。我们可以直接到 Espanso 的官方 Hub 页面 去搜索。比如我们直接就以前面提到的「Emoji」一词进行搜索就可以找到与之相关的扩展包:但我们与扩展包相关的操作都需要通过命令行来完成:Shell复制espanso install all-emojis # 安装 all-emojis 扩展包espanso uninstall all-emojis # 卸载 all-emojis 扩展包espanso package list # 查看 Espanso 中的所有扩展包espanso package update all-emojis # 更新 all-emojis 扩展包espanso package update all # 更新 Espanso 中的所有扩展包安装完成之后我们就再次按照前面提到的查看匹配项的方式来检查是否安装成功。除上述方式之外 Espanso 还支持额外的安装方式,甚至你也可以自己去创建并分享一个扩展包,当然这些内容 Espanso 都在文档中找到详细说明,这里就不再额外赘述。结尾虽然 Espanso 在使用上直接了当并且功能强大,它不仅可以帮我们扩展静态的模板内容,也可以具备较强的扩展性,例如调用脚本或使用命令行来得到内容。不过为了让它好用、易用可能还需要多花一点心思在配置上。受限于篇幅,本文仅介绍了 Espanso 中比较重要的一些配置内容;但像全局变量、导入外部配置、变量注入、如何分享自己的扩展包等等细节并没有一一涉及。好在 Espanso 的官方文档已经给出了较为细致的说明,这些未提及的内容就留给你自行探索。
2025年10月26日
27 阅读
0 评论
0 点赞
1
...
7
8
9
...
76