golang轻量级Mac剪贴板管理工具插件go-clip的使用
Golang轻量级Mac剪贴板管理工具插件go-clip的使用
简介
go-clip是一个极简的Mac剪贴板管理工具,使用Golang编写。它可以帮助你管理多个临时剪贴内容,但不适用于密码存储或重要数据保存。
特点
- 纯内存操作:不会将任何文本保存到你的电脑上
- 无网络连接:完全离线运行,保障数据安全
- 轻量级:简洁高效,专注于剪贴板管理
基本功能
固定(Pin)功能
固定剪贴项可以防止它们在所有现有剪贴项用完后被覆盖。
模糊显示(Obfuscate)功能
当你复制密码并想暂时保留在工具中时,可以将其模糊显示。它会标记为****
,点击后仍可复制完整密码,但不会在应用中显示明文。
安装方法
从二进制文件安装
- 从发布页面下载最新的
go-clip.app.zip
,解压后将.app
文件复制到Applications
文件夹 - 由于应用未公证,需右键点击
go-clip.app
选择打开
- 看到安全警告后选择
打开
- 系统托盘将显示剪贴板图标,复制文本即可看到效果
从源码安装
确保已安装Go,然后执行以下命令:
git clone https://github.com/prashantgupta24/go-clip.git
cd go-clip
make
这将创建go-clip.app
,将其复制到Applications
文件夹即可使用。
示例代码
以下是使用go-clip API的简单示例:
package main
import (
"github.com/prashantgupta24/go-clip/clipboard"
)
func main() {
// 初始化剪贴板监听器
clipboardChan := clipboard.Initialize()
// 开始监听剪贴板变化
for {
select {
case clip := <-clipboardChan:
// 打印剪贴板内容
println("剪贴板内容:", clip)
// 检查是否是密码类内容(示例)
if isPassword(clip) {
// 模糊显示敏感内容
println("检测到敏感内容,已模糊显示")
}
}
}
}
// 简单判断是否是密码的示例函数
func isPassword(text string) bool {
// 这里可以添加更复杂的逻辑
return len(text) > 8 && containsSpecialChars(text)
}
func containsSpecialChars(s string) bool {
// 检查字符串是否包含特殊字符
for _, r := range s {
if (r < 'a' || r > 'z') && (r < 'A' || r > 'Z') && (r < '0' || r > '9') {
return true
}
}
return false
}
注意事项
- 此应用仅用于管理短期剪贴内容,不应用作密码存储或重要数据保存
- 应用不会保存任何文本到你的电脑,所有数据仅存在于内存中
- 应用完全离线,不会连接互联网
未来计划
等待fyne.io
发布与systray的集成,以提供更好的弹出式剪贴板体验。
更多关于golang轻量级Mac剪贴板管理工具插件go-clip的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang轻量级Mac剪贴板管理工具插件go-clip的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Go-Clip: 轻量级Mac剪贴板管理工具
Go-Clip是一个用Go语言编写的轻量级Mac剪贴板管理工具插件,它提供了简单易用的剪贴板历史记录和管理功能。
主要特性
- 记录剪贴板历史
- 快速访问历史记录
- 支持文本和图片
- 轻量级且高效
- 易于集成到其他应用中
安装
首先确保你已安装Go环境,然后通过以下命令安装:
go get github.com/atotto/clipboard
go get github.com/go-clip/go-clip
基本使用示例
package main
import (
"fmt"
"time"
"github.com/atotto/clipboard"
"github.com/go-clip/go-clip"
)
func main() {
// 初始化剪贴板管理器
manager := clip.NewManager()
// 启动剪贴板监控
go manager.StartMonitoring(2 * time.Second) // 每2秒检查一次剪贴板
// 模拟剪贴板变化
clipboard.WriteAll("示例文本1")
time.Sleep(3 * time.Second)
clipboard.WriteAll("示例文本2")
time.Sleep(3 * time.Second)
// 获取剪贴板历史
history := manager.GetHistory()
fmt.Println("剪贴板历史记录:")
for i, item := range history {
fmt.Printf("%d: %s\n", i+1, item.Content)
}
// 从历史记录中选择一项写入剪贴板
if len(history) > 0 {
err := manager.SelectFromHistory(0) // 选择第一条记录
if err != nil {
fmt.Println("选择历史记录失败:", err)
} else {
current, _ := clipboard.ReadAll()
fmt.Println("当前剪贴板内容:", current)
}
}
}
高级功能实现
1. 持久化存储
func saveHistoryToFile(history []clip.ClipboardItem, filename string) error {
// 实现将历史记录保存到文件
// ...
}
func loadHistoryFromFile(filename string) ([]clip.ClipboardItem, error) {
// 实现从文件加载历史记录
// ...
}
2. 自定义过滤
// 只保留文本类型的剪贴板记录
func filterTextOnly(history []clip.ClipboardItem) []clip.ClipboardItem {
var filtered []clip.ClipboardItem
for _, item := range history {
if item.Type == clip.TextType {
filtered = append(filtered, item)
}
}
return filtered
}
3. 集成到GUI应用
// 使用fyne创建一个简单的GUI界面
func createGUI(manager *clip.Manager) {
app := app.New()
window := app.NewWindow("Go-Clip")
history := manager.GetHistory()
list := widget.NewList(
func() int { return len(history) },
func() fyne.CanvasObject { return widget.NewLabel("") },
func(i widget.ListItemID, o fyne.CanvasObject) {
o.(*widget.Label).SetText(history[i].Content)
},
)
list.OnSelected = func(id widget.ListItemID) {
manager.SelectFromHistory(id)
}
window.SetContent(list)
window.ShowAndRun()
}
性能优化建议
- 限制历史记录数量,避免内存占用过大
- 使用去重功能,避免存储相同内容
- 对于大文件或图片,考虑只存储引用而非完整内容
- 使用适当的检查间隔,平衡响应速度和资源占用
常见问题解决
- 权限问题:确保应用有访问剪贴板的权限
- 内容截断:对于超长文本,考虑截断显示但存储完整内容
- 编码问题:处理不同编码的文本内容
Go-Clip因其简洁的API和良好的性能,非常适合需要剪贴板管理功能的Mac应用集成。通过上述示例,你可以快速将其整合到自己的项目中,或基于此构建更复杂的剪贴板管理工具。