77 lines
1.9 KiB
Python
77 lines
1.9 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 clipboard using wl-copy (Wayland) or xclip (X11) as fallback."""
|
|
try:
|
|
# Try wl-copy first (Wayland)
|
|
subprocess.run(['wl-copy'], input=text.encode(), check=True)
|
|
except FileNotFoundError:
|
|
# Fallback to xclip (X11)
|
|
try:
|
|
subprocess.run(['xclip', '-selection', 'clipboard'],
|
|
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()
|