The Autodidacts

Exploring the universe from the inside out

It’s surprisingly hard to reliably paste the current date at the cursor on Linux

Long, long ago, in a dotfiles directory far away, I had this snippet:

bindsym control+semicolon exec date '+%Y-%m-%d' | tr -d "\n" | xsel -i -b && xdotool sleep 0.5 key "ctrl+v"

Isn’t it a beauty?

But it worked, in i3 on X11.

I devoted 500 words to bemoaning how hard it was to port this over to Wayland + Sway. The section was titled More Fun with Segmentation Faults, and my “solution” involved building alpha-quality software from source, and accepting an 80/20 solution.

And then I migrated to a boring version of Linux: Xfce (and later Cinnamon) on Linux Mint. Even though I was on X again, for some reason my original snippet no longer worked 😭.

I ended up running AutoKey 24/7 just so I could have this snippet. And it didn’t even work reliably.

Further reading: Save the Date.

Paste didn’t work in my terminal emulator, and I spend most of my time in Helix text editor, in Fish Shell, running in a Tmux session, in Ghostty (I know, I insist on making things difficult for myself).

I set it to fill the clipboard with the current date so that I could paste it, but I often ended up having something important already on the clipboard when I ran the shortcut, and overwriting it.

So today I made a small improvement. It tries to input the date directly with send_keys. But it also temporarily puts the date on the clipboard. Before it puts the date on the clipboard, it backs-up whatever was on the clipboard. Then, after one second has elapsed, it restores the clipboard to its original state.

So if I’m in Helix, I hit Ctrl+; Ctrl+Shift+V (which is only as many keystrokes as typing 2026-, so we are saving ourselves five whole keypresses here! And that’s assuming I know what the date is in the first place, which I usually don’t.)

Otherwise, it’s Ctrl+; and done.

Here’s my current AutoKey script:

import time
output = system.exec_command("date -I") # ISO 8601 YYYY-MM-DD format
oldtext = clipboard.get_clipboard() # backup what's on the clipboard
clipboard.fill_clipboard(output) # put date on clipboard
keyboard.send_keys("<ctrl>+V") # paste date
time.sleep(1) # give user chance to paste if send_keys failed
clipboard.fill_clipboard(oldtext) # restore previous clipboard content

It still isn’t perfect, but it’s almost good enough.

Sign up for updates

Join the newsletter for curious and thoughtful people.
No Thanks

Great! Check your inbox and click the link to confirm your subscription.