golang轻量级Mac剪贴板管理工具插件go-clip的使用

Golang轻量级Mac剪贴板管理工具插件go-clip的使用

简介

go-clip是一个极简的Mac剪贴板管理工具,使用Golang编写。它可以帮助你管理多个临时剪贴内容,但不适用于密码存储或重要数据保存

特点

  1. 纯内存操作:不会将任何文本保存到你的电脑上
  2. 无网络连接:完全离线运行,保障数据安全
  3. 轻量级:简洁高效,专注于剪贴板管理

基本功能

固定(Pin)功能

固定剪贴项可以防止它们在所有现有剪贴项用完后被覆盖。

模糊显示(Obfuscate)功能

当你复制密码并想暂时保留在工具中时,可以将其模糊显示。它会标记为****,点击后仍可复制完整密码,但不会在应用中显示明文。

安装方法

从二进制文件安装

  1. 从发布页面下载最新的go-clip.app.zip,解压后将.app文件复制到Applications文件夹
  2. 由于应用未公证,需右键点击go-clip.app选择打开
  3. 看到安全警告后选择打开
  4. 系统托盘将显示剪贴板图标,复制文本即可看到效果

从源码安装

确保已安装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
}

注意事项

  1. 此应用仅用于管理短期剪贴内容,不应用作密码存储或重要数据保存
  2. 应用不会保存任何文本到你的电脑,所有数据仅存在于内存中
  3. 应用完全离线,不会连接互联网

未来计划

等待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剪贴板管理工具插件,它提供了简单易用的剪贴板历史记录和管理功能。

主要特性

  1. 记录剪贴板历史
  2. 快速访问历史记录
  3. 支持文本和图片
  4. 轻量级且高效
  5. 易于集成到其他应用中

安装

首先确保你已安装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()
}

性能优化建议

  1. 限制历史记录数量,避免内存占用过大
  2. 使用去重功能,避免存储相同内容
  3. 对于大文件或图片,考虑只存储引用而非完整内容
  4. 使用适当的检查间隔,平衡响应速度和资源占用

常见问题解决

  1. 权限问题:确保应用有访问剪贴板的权限
  2. 内容截断:对于超长文本,考虑截断显示但存储完整内容
  3. 编码问题:处理不同编码的文本内容

Go-Clip因其简洁的API和良好的性能,非常适合需要剪贴板管理功能的Mac应用集成。通过上述示例,你可以快速将其整合到自己的项目中,或基于此构建更复杂的剪贴板管理工具。

回到顶部