Files
deskmeter/dmapp/dmos/datetime-clipboard.py
2025-12-29 14:17:17 -03:00

85 lines
2.1 KiB
Python

#!/usr/bin/env python3
"""
Date/time clipboard utility for GNOME keyboard shortcuts.
Copies various date/time formats to clipboard for quick pasting.
Usage:
datetime-clipboard.py wd # ISO week.day (e.g., 51.2)
datetime-clipboard.py 3t # 360-time format (0-359)
datetime-clipboard.py uid # UUID first 8 chars
"""
import sys
import subprocess
from datetime import datetime
import uuid
def copy_to_clipboard(text):
"""Copy text to both clipboard and primary selection (for Shift+Insert in terminals)."""
try:
# Try wl-copy first (Wayland)
subprocess.run(["wl-copy"], input=text.encode(), check=True)
subprocess.run(["wl-copy", "--primary"], input=text.encode(), check=True)
except FileNotFoundError:
# Fallback to xclip (X11)
try:
subprocess.run(
["xclip", "-selection", "clipboard"], input=text.encode(), check=True
)
subprocess.run(
["xclip", "-selection", "primary"], input=text.encode(), check=True
)
except FileNotFoundError:
print(
"Error: Neither wl-copy nor xclip found. Install wl-clipboard or xclip.",
file=sys.stderr,
)
sys.exit(1)
def get_weekday():
"""ISO week.day format (e.g., 51.2)"""
ywd = datetime.now().isocalendar()
return f"{ywd[1]}.{ywd[2]}"
def get_360time():
"""Day divided into 360 parts (0-359)"""
t = datetime.now()
return str((t.hour * 60 + t.minute) // (1440 // 360))
def get_uid():
"""First 8 characters of UUID"""
return str(uuid.uuid4())[:8]
def main():
if len(sys.argv) < 2:
print(__doc__)
sys.exit(1)
format_type = sys.argv[1].lower()
formatters = {
"wd": get_weekday,
"3t": get_360time,
"uid": get_uid,
}
if format_type not in formatters:
print(f"Unknown format: {format_type}")
print(__doc__)
sys.exit(1)
text = formatters[format_type]()
copy_to_clipboard(text)
# Optional: print to stdout for verification
print(f"Copied to clipboard: {text}")
if __name__ == "__main__":
main()