-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathYpsilonPicker.php
More file actions
executable file
·74 lines (61 loc) · 2 KB
/
YpsilonPicker.php
File metadata and controls
executable file
·74 lines (61 loc) · 2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/usr/bin/php
<?php
class YpsilonPicker
{
public function run()
{
echo "Click anywhere on the screen to pick a color...\n";
usleep(500000); // 0.5-second delay
if (!$this->isGdbusAvailable()) {
echo "Error: gdbus not found. Ensure you are running GNOME.\n";
exit(1);
}
$colors = $this->pickColor();
if (!$colors) {
echo "Error: Could not retrieve color data.\n";
exit(1);
}
$rgb = $this->convertToRGB($colors);
if (count($rgb) < 3) {
echo "Error: Invalid color data.\n";
exit(1);
}
$hex = $this->convertToHex($rgb);
$this->outputResult($rgb, $hex);
$this->copyToClipboard($hex);
}
private function isGdbusAvailable(): bool
{
return (bool) shell_exec("command -v gdbus");
}
private function pickColor(): array
{
$command = "gdbus call --session --dest org.gnome.Shell.Screenshot --object-path /org/gnome/Shell/Screenshot --method org.gnome.Shell.Screenshot.PickColor";
$output = shell_exec($command);
preg_match_all('/[0-9\.]+/', $output, $matches);
return array_map('floatval', $matches[0]);
}
private function convertToRGB(array $colors): array
{
return array_map(fn($c) => round($c * 255), $colors);
}
private function convertToHex(array $rgb): string
{
return sprintf("#%02x%02x%02x", $rgb[0], $rgb[1], $rgb[2]);
}
private function outputResult(array $rgb, string $hex): void
{
echo "RGB: {$rgb[0]} {$rgb[1]} {$rgb[2]}\n";
echo "HEX: $hex\n";
}
private function copyToClipboard(string $hex): void
{
if (shell_exec("command -v wl-copy")) {
shell_exec("echo -n '$hex' | wl-copy");
echo "HEX copied to clipboard!\n";
} else {
echo "Install wl-clipboard (`sudo apt install wl-clipboard`) for auto-copy.\n";
}
}
}
(new YpsilonPicker())->run();