sgoudham 6cbc180ca7 | 2 years ago | |
---|---|---|
.github/workflows | 2 years ago | |
src | 3 years ago | |
.gitignore | 3 years ago | |
LICENSE | 3 years ago | |
README.md | 2 years ago | |
pom.xml | 2 years ago |
README.md
MyClipboard
Utility Library to Access and Manipulate the Default System Clipboard
About
The inspiration for this project came from my frustration of macOS not having clipboard history built-in unlike Windows. This library will allow you to access the system clipboard and manipulate it.
Configuration
Follow the steps below for a basic implementation:
public class Main {
public static void main(String[] args) {
// Retrieve an instance of MyClipboard
MyClipboard myClipboard = MyClipboard.getSystemClipboard();
// Start listening for clipboard notifications
myClipboard.startListening();
// Add event listeners for different types of events (Text, Image & File)
myClipboard.addEventListener((TextEvent) (oldContent, newContent) -> {
String oldText = oldContent.getText();
BufferedImage oldImage = oldContent.getImage();
List<File> oldFiles = oldContent.getFiles();
System.out.println("Old Text: " + oldText);
System.out.println("Old Image: " + oldImage);
System.out.println("Old File: " + oldFiles);
System.out.println("New String Content: " + newContent);
});
myClipboard.addEventListener((ImageEvent) (oldContent, newContent) -> {
String oldText = oldContent.getText();
BufferedImage oldImage = oldContent.getImage();
List<File> oldFiles = oldContent.getFiles();
System.out.println("Old Text: " + oldText);
System.out.println("Old Image: " + oldImage);
System.out.println("Old File: " + oldFiles);
System.out.println("New Image Content: " + newContent);
});
myClipboard.addEventListener((FileEvent) (oldContent, newContent) -> {
String oldText = oldContent.getText();
BufferedImage oldImage = oldContent.getImage();
List<File> oldFiles = oldContent.getFiles();
System.out.println("Old Text: " + oldText);
System.out.println("Old Image: " + oldImage);
System.out.println("Old File" + oldFiles);
System.out.println("New File Content: " + newContent);
});
// Insert into the clipboard
myClipboard.insert("exampleContent");
// Insert and notify MyClipboard of the new content
myClipboard.insertAndNotify("exampleContent");
// Set monitoring for clipboard types
myClipboard.setImageMonitored(true || false);
myClipboard.setTextMonitored(true || false);
myClipboard.setFileMonitored(true || false);
// Toggle monitoring for clipboard types
myClipboard.toggleTextMonitored();
myClipboard.toggleImagesMonitored();
myClipboard.toggleFilesMonitored();
// Stop listening for clipboard notifications
myClipboard.stopListening();
}
}
Windows / *Unix
This approach differs from the macOS section below as Windows/*Unix properly notify the program with global clipboard events. This allows for a more event-driven approach as lostOwnership() is triggered whenever the clipboard has lost ownership - clipboard has new content within it - and the contents can be observed by multiple consumers.
macOS
Unlike the aforementioned event-driven approach, macOS unfortunately is not very good at notifying the program if the system clipboard has changed. To query the system clipboard contents, we need to employ a polling schedule. I have chosen 200ms to ensure that images and large files can be copied over as well as reducing the load on the CPU.
Installation
Be sure to replace the VERSION key below with the one of the versions shown above!
Maven
<!-- https://mvnrepository.com/artifact/me.goudham/MyClipboard -->
<dependency>
<groupId>me.goudham</groupId>
<artifactId>MyClipboard</artifactId>
<version>VERSION</version>
</dependency>
Gradle
repositories {
mavenCentral()
}
dependencies {
// https://mvnrepository.com/artifact/me.goudham/MyClipboard
implementation group: 'me.goudham', name: 'MyClipboard', version: 'VERSION'
}