Enumerate multiple X11 clipboard targets.
Project description
cliptargets
Enumerate multiple X11 clipboard targets (formats).
Python package for enumerating and accessing multiple clipboard targets (formats) in X11.
Background
In the X Window System, a clipboard can hold data in multiple different formats simultaneously—in superposition. Each format (such as plain text, UTF-8 text, or images) is identified by a target, with a label that is sometiems a MIMEtype.
- The program that owns the clipboard, such as xclip, announces these available targets to other applications.
- When another application wants to paste, it requests the clipboard data in a specific target format.
- The clipboard owner then converts and provides the data in the requested format.
- Although the clipboard owner stores only one original copy of the data, it can supply this data in various formats, depending on what the requesting application needs.
See How It Works for more details
cliptargets handles encoding (some clipboard targets may be non-UTF8) as either a CLI or Python API for inspecting the clipboard's contents across all available formats.
Features
- Comprehensive Target Discovery: Enumerate all available clipboard targets/formats
- Intelligent Encoding Detection: Automatically detects and properly handles various encodings (UTF-8, UTF-16LE, Latin-1)
- Format-Specific Handling: Special handling for Mozilla-specific formats and other binary formats
- Simple CLI: Command-line interface for quick clipboard inspection
- Clean Python API: Programmatic access to clipboard targets
- JSON Output: Option to export all targets and values as JSON
- Zero Dependencies: Core functionality has no external dependencies (beyond xclip)
Installation
pip install cliptargets
Requirements
- Python 3.10+
xclip
Note: The
xclipcommand-line tool must be installed on your system separately.
- On Debian/Ubuntu:
sudo apt install xclip- On Fedora/RHEL:
sudo dnf install xclip- On Arch Linux:
sudo pacman -S xclip
Usage
Command Line
# Print all clipboard targets and their values
cliptargets
# Print as JSON
cliptargets --json
Python API
from cliptargets import get_all_targets, get_target_value, get_targets
# Get a list of all available targets
targets = get_targets()
print(f"Available targets: {targets}")
# Get the value of a specific target
value = get_target_value("STRING")
print(f"STRING value: {value}")
# Get a dictionary of all targets and their values
all_targets = get_all_targets()
for target, value in all_targets.items():
print(f"{target}: {value}")
Use in Scripts
import cliptargets
import json
# Get HTML content from clipboard if available
html_content = cliptargets.get_target_value("text/html")
if html_content:
print("HTML content found in clipboard!")
# Process the HTML...
# Check if a URL is in the clipboard
url = cliptargets.get_target_value("text/x-moz-url-priv")
if url:
print(f"URL found: {url}")
# Export all clipboard data to a JSON file
all_targets = cliptargets.get_all_targets()
with open("clipboard_data.json", "w") as f:
json.dump(all_targets, f, indent=2)
Why Use This Library?
X11 clipboard can store data in multiple formats simultaneously, but most tools only access the default text format. This library lets you:
- Discover Hidden Data: Access formats like HTML, URLs, and application-specific data
- Debug Copy/Paste Issues: Diagnose why copy/paste operations work differently between applications
- Handle Encoding Correctly: Avoid encoding problems with UTF-16LE and other formats
- Access Raw Data: Get direct access to clipboard data without application interference
- Build Better Tools: Create clipboard managers and data transfer tools with access to all formats
Example Output
STDOUT
Found 9 clipboard targets:
COMPOUND_TEXT : Hello World
MULTIPLE : <not available>
STRING : Hello World
TARGETS :
TIMESTAMP\nTARGETS\nMULTIPLE\nUTF8_STRING\nCOMPOUND_TEXT\nTEXT\nSTRING\ntext/plain;charset=utf-8\ntext/plain\n
TEXT : Hello World
TIMESTAMP : 62401715\n
UTF8_STRING : Hello World
text/plain : Hello World
text/plain;charset=utf-8 : Hello World
JSON
{
"TIMESTAMP": "62401715\n",
"TARGETS":
"TIMESTAMP\nTARGETS\nMULTIPLE\nUTF8_STRING\nCOMPOUND_TEXT\nTEXT\nSTRING\ntext/plain;charset=utf-8\ntext/plain\n",
"MULTIPLE": null,
"UTF8_STRING": "Hello World",
"COMPOUND_TEXT": "Hello World",
"TEXT": "Hello World",
"STRING": "Hello World",
"text/plain;charset=utf-8": "Hello World",
"text/plain": "Hello World"
}
Project Structure
cliptargets/core.py: Core functionality for handling clipboard targets and encodingcliptargets/cli.py: Command-line interface implementationcliptargets/__init__.py: Package exports and version information
Common Clipboard Targets
The library works with any clipboard targets, but here are some common ones you might find:
| Target | Description | Typical Applications |
|---|---|---|
| STRING | Plain text (ISO Latin-1) | Most applications |
| UTF8_STRING | Unicode text | Modern applications |
| text/html | HTML content | Web browsers |
| text/plain | Plain text | Most applications |
| text/uri-list | URLs | Browsers, file managers |
| image/png | PNG image data | Image editors |
| TIMESTAMP | When the selection was made | All applications |
| TARGETS | List of available targets | All applications |
See ICCCM for more details:
Contributing
Contributions are welcome!
- Issues & Discussions: Please open a GitHub issue for bugs, feature requests, or questions.
- Pull Requests: PRs are welcome!
- Install the dev dependencies with
pip install -e ".[dev]" - Make sure tests pass with
pytest - Format code with
pre-commit run --all-files
- Install the dev dependencies with
License
This project is licensed under the MIT License. See LICENSE for details.
Credits
The original inspiration for this tool came from troubleshooting complex clipboard encoding issues with X11 applications. Special thanks to the X.org community and the ICCCM documentation.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cliptargets-0.1.2.tar.gz.
File metadata
- Download URL: cliptargets-0.1.2.tar.gz
- Upload date:
- Size: 11.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: pdm/2.22.3 CPython/3.12.6 Linux/5.15.0-125-generic
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
09dacbe66948f609a7887dfb1074ba91a9a27a902051c73416f69d240bde90c1
|
|
| MD5 |
7e1079700b6f32a4ebd3d5453e5bfc19
|
|
| BLAKE2b-256 |
4d8fad2135158af26b2d1f41b79c67caf3d5877ac3a2e9445601965c33b8c3a8
|
File details
Details for the file cliptargets-0.1.2-py3-none-any.whl.
File metadata
- Download URL: cliptargets-0.1.2-py3-none-any.whl
- Upload date:
- Size: 7.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: pdm/2.22.3 CPython/3.12.6 Linux/5.15.0-125-generic
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f5e52ef90e26131417e656fe948dbcca7ea6abe4a0d6f036891cf770467afca9
|
|
| MD5 |
2890c90392c388f574e831cf9b5b990c
|
|
| BLAKE2b-256 |
8d6be7795bb7e888dbc46d1266e4b5042b2af41deed23c446fa5478cd79548a9
|