剪贴板
根据 维基百科
- 剪贴板是用于短期数据存储和/或通过复制和粘贴操作在文档或应用程序之间传输数据的一种设施。
在 Xorg 和 Wayland 中,剪贴板内容均由复制该内容的程序维护。如果程序关闭,复制的内容将无法访问。若要持久化剪贴板内容,请使用一个能够维护其自身剪贴板内容副本的剪贴板管理器。
历史
在 X10 (1985) 中,引入了剪切缓冲区。这些是存储任意文本的有限缓冲区,并被大多数应用程序使用。然而,它们效率低下且实现方式各不相同,因此引入了选择。剪切缓冲区已长期弃用,尽管某些应用程序(例如 xterm)可能对其有旧版支持,但它们不太可能且不推荐使用。
选择
Freedesktop.org 将两种主要的选择(Selection)描述如下:[5]
- PRIMARY
- 用于当前选定的文本,即使未明确复制,以及用于鼠标中键粘贴。在某些情况下,也可以通过键盘快捷键进行粘贴。
- CLIPBOARD
- 用于涉及键盘快捷键或菜单项的显式复制/粘贴命令。因此,它在行为上类似于 Windows 上的单一剪贴板系统。与 PRIMARY 不同,它还可以处理多种数据格式。
大多数 Xorg 程序,包括 Qt 和 GTK 应用程序,都遵循此行为。虽然 ICCCM 还定义了一个 SECONDARY 选择,但它没有普遍同意的用途。尽管有命名,但所有三个选择基本上都是“剪贴板”。与允许任意应用程序修改剪切缓冲区中存储的数据的旧“剪切缓冲区”系统不同,一次只有一个应用程序可以控制或“拥有”一个选择。这可以防止选择操作中的不一致。
请参阅 键盘快捷键页面,其中列出了许多程序的默认快捷键。
同样重要的是要意识到,根据选择协议,内容只有在粘贴时才会真正被复制。例如,如果您在终端窗口中选定了一个单词,关闭终端后再尝试将其粘贴到其他地方,由于终端进程已结束且文本未被复制到任何地方,操作将会失败。如果您希望在关闭终端窗口后仍能保留该单词,请考虑安装一个剪贴板管理器。
工具
本节列出了用于 X11 操作剪贴板的命令行工具。
- sselp — 简单的选择项打印工具。将选择项打印到标准输出(stdout)。
- xclip — 一个轻量级的、基于命令行的剪贴板接口。
- xsel — 用于获取和设置选择项内容的命令行程序。
Wayland 的命令行工具包括:
- wl-clip-persist — 程序关闭后仍保留 Wayland 剪贴板内容
- wl-clipboard — 一个简单的用于 Wayland 合成器的复制/粘贴工具。
管理器
本节列出了提供诸如剪贴板持久化、历史记录或在 PRIMARY 和 CLIPBOARD 选择项之间同步等附加功能的剪贴板管理器。
- Anamnesis — 存储所有剪贴板历史记录并提供全文本搜索界面的剪贴板管理器。它同时提供命令行和 GUI 模式。
- Autocutsel — 用于同步 PRIMARY、
CLIPBOARD和剪切缓冲区选择的命令行和守护进程接口。
- Clipboard — 易于使用的终端剪贴板管理器,具有多个不同的剪贴板、持久剪贴板和正则表达式选择。
- Clipboard Indicator — GNOME Shell 的剪贴板管理器扩展。将剪贴板指示器添加到顶部面板,并缓存剪贴板历史记录。
- https://github.com/Tudmotu/gnome-shell-extension-clipboard-indicator || gnome-shell-extension-clipboard-indicator-gitAUR
- Clipcat — 用 Rust 编写的剪贴板管理器,允许用户从 dmenu、rofi 等应用程序启动器中选择剪贴板历史记录。
- cliphist — 支持多媒体的 Wayland 剪贴板管理器。
- Clipman — Xfce4 面板的剪贴板管理器插件。它会在应用程序关闭时通常会丢失剪贴板内容时将其保留。它可以处理文本和图像,并具有通过与正则表达式匹配来对特定文本选择执行操作的功能。
- Clipmenu — 基于 Dmenu 的剪贴板管理器
- Clipmon — 一个轻量级的 Wayland 剪贴板管理器。旨在作为一种监控工具,在应用程序自行从剪贴板粘贴时发送通知(此功能正在开发中)。
- Cursor Clip — 使用 Rust 编写的 GTK4 Wayland 剪贴板管理器,具有动态定位功能。具有 Windows 11 风格的剪贴板历史记录,并适配了原生的 GNOME 设计。
- clipse — 一个用 Go 编写的、可配置的、基于 TUI 的剪贴板管理器应用程序,具有最小的依赖性。
- clipsim — 用 C 编写的简单快速的 X 剪贴板管理器。
- Clipster — 一个用 Python 编写的轻量级、命令行驱动的剪贴板管理器。
- Clipton — 具有 Rofi 前端的剪贴板管理器。
- clipvault — Wayland 剪贴板管理器,灵感源自 cliphist
- CopyQ — 智能 Qt 剪贴板管理器,具有可搜索和可编辑的历史记录、项目上的自定义操作以及命令行支持。
- Gnome Clipboard History — Gnome Clipboard History 是一个剪贴板管理器 GNOME 扩展,可将您复制的内容保存到易于访问、可搜索的历史记录面板中。
- GPaste — 剪贴板管理系统,旨在成为新一代 Parcellite,具有模块化结构,分为几个库和一个用于适应性的守护进程。提供 GNOME Shell 扩展和 CLI 接口。
- Greenclip — 与 rofi 集成的简单剪贴板管理器
- Klipper — KDE 桌面的全功能剪贴板管理器。
- Parcellite — 轻量级但功能丰富的剪贴板管理器。它同时提供命令行和 GUI 模式。
- Qlipper — 基于 Qt 的轻量级跨平台剪贴板历史记录小程序。
- xclipboard — 官方 X 剪贴板命令行客户端。
- xcmenu — 为窗口管理器用户开发的剪贴板同步器。
技巧与提示
禁用鼠标中键粘贴
以下方法通过自动清除 PRIMARY 来禁用鼠标中键粘贴行为,而不会禁用鼠标中键按钮或改变其其他功能(如在新标签页中打开或滚动)。
通过 sxhkd 全局禁用
~button2
;echo -n | xclip -in
该命令使用了 xclip。有关配置 sxhkd 自动启动的信息,请参阅 sxhkd#Usage。
通过 xsel 全局禁用
运行脚本
#!/bin/sh
while true; do
xsel --follow --input --nodetach </dev/null
done
应用程序特定
- GTK — 请参阅 GTK#禁用鼠标粘贴
- Firefox — 请参阅 Firefox#鼠标中键行为
- LibreOffice — 可在“工具”>“选项”>“LibreOffice”>“视图”>“鼠标”中禁用
Wayland 上的同步
Wayland 上的剪贴板可以使用 wl-clipboard 并配合命令 wl-paste --primary --watch wl-copy 进行同步。更多示例请参阅从终端复制文本。
在 Sway 中使用 cliphist
此示例在 Sway 和 wofi 中使用了 cliphist
~/.config/sway/config
exec wl-paste --watch cliphist store bindsym Mod1+p exec cliphist list | wofi -S dmenu | cliphist decode | wl-copy