!7 static JFrame frame; static S imageMD5, text; p-substance { frame = showFrame("Clipboard"); installTimer(frame, 3000, 0, r { update(); }); hideConsoleIfMainProgram(); } svoid update { BufferedImage img = getImageFromClipboard(); if (img != null) { S md5 = md5OfRGBImage(new RGBImage(img)); if (neq(md5, imageMD5)) { imageMD5 = md5; text = null; setFrameContents(frame, jscroll(new ImageSurface(img))); setFrameTitle(frame, "Clipboard: " + img.getWidth() + "*" + img.getHeight() + " px image"); } ret; } imageMD5 = null; S s = getTextFromClipboard(); if (s != null) { if (neq(text, s)) { text = s; setFrameContents(frame, typeWriterTextArea(s)); setFrameTitle(frame, "Clipboard: " + quote(escapeNewLines(shorten(s, 256)))); } ret; } text = null; // empty clipboard or unknown contents setFrameContents(frame, new JPanel); Transferable transferable = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null); setFrameTitle(frame, transferable != null ? "Unknown clipboard contents (" + join(", ", mimeTypes(transferable)) + ")" : "Empty clipboard"); }