Source code for jacinle.utils.clipboard
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
# File : clipboard.py
# Author : Jiayuan Mao
# Email : maojiayuan@gmail.com
# Date : 09/12/2024
#
# This file is part of Project Concepts.
# Distributed under terms of the MIT license.
"""Utility functions for clipboard operations."""
import platform
import numpy as np
import subprocess
import tempfile
import os
__all__ = ['copy_to_clipboard', 'copy_to_clipboard_image', 'paste_from_clipboard']
def copy_to_clipboard(text: str) -> None:
raise NotImplementedError()
def copy_to_clipboard_image(img: np.ndarray, is_rgb: bool = True) -> None:
raise NotImplementedError()
def paste_from_clipboard() -> str:
raise NotImplementedError()
[docs]
def assert_cv2_available():
try:
import cv2
except ImportError:
raise ImportError('cv2 is required for this function.')
return cv2
if platform.system() == 'Darwin':
def copy_to_clipboard(text: str) -> None:
subprocess.run('pbcopy', universal_newlines=True, input=text)
def copy_to_clipboard_image(img: np.ndarray, is_rgb: bool = True) -> None:
cv2 = assert_cv2_available()
if is_rgb:
img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
tmpfile = tempfile.NamedTemporaryFile(suffix='.jpg', delete=False)
cv2.imwrite(tmpfile.name, img)
copy_to_clipboard_image_path(tmpfile.name)
os.unlink(tmpfile.name)
[docs]
def copy_to_clipboard_image_path(path: str) -> None:
subprocess.run(['osascript', '-e', f'set the clipboard to (read (POSIX file "{path}") as JPEG picture)'])
def paste_from_clipboard() -> str:
return subprocess.run('pbpaste', universal_newlines=True, stdout=subprocess.PIPE).stdout
elif platform.system() == 'Linux':
[docs]
def copy_to_clipboard(text: str) -> None:
subprocess.run(['xclip', '-selection', 'clipboard'], universal_newlines=True, input=text)
[docs]
def copy_to_clipboard_image(img: np.ndarray, is_rgb: bool = True) -> None:
cv2 = assert_cv2_available()
if is_rgb:
img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
tmpfile = tempfile.NamedTemporaryFile(suffix='.png', delete=False)
cv2.imwrite(tmpfile.name, img)
subprocess.run(['xclip', '-selection', 'clipboard', '-t', 'image/png', '-i', tmpfile.name])
os.unlink(tmpfile.name)
[docs]
def paste_from_clipboard() -> str:
return subprocess.run(['xclip', '-selection', 'clipboard', '-o'], universal_newlines=True, stdout=subprocess.PIPE).stdout
else:
pass