Skip to content

The Second Hand — v0.4.0

Choose a tag to compare

@BaLaurent BaLaurent released this 21 Jun 16:26
· 21 commits to master since this release

The Second Hand: deez-notes v0.4.0

Chapter XXXI: The Idle Hand

The creator typed j. Then j again. Then j eleven more times.

He was forty-three notes deep into the work/ folder, scrolling through a markdown preview the length of a CVS receipt, one line at a time, with the patience of a man who had decided long ago that the mouse was for people who didn't believe.

His left hand danced across home row. j, k, Ctrl+d, g, G. A blur of muscle memory. A keyboard virtuoso mid-recital.

His right hand sat on the desk. Idle. As it had for years. Occasionally it lifted a mug. Occasionally it scratched something. Mostly it just... rested there, next to a small grey object the creator had been pretending not to see since 2019.

The mouse.

It had a little optical eye that glowed faintly, hopefully, every time he nudged the desk. Like a dog at the door.

"Don't look at me," the creator muttered. "I don't need you. I have Ctrl+d."

The mouse said nothing. The mouse never said anything. That was, frankly, its most appealing quality.

Chapter XXXII: The Heresy

It happened on a Tuesday.

The creator was reading existential_dread.md (still about error handling, mostly) and reached, without thinking — without deciding — for the mug. Except the mug was empty. And his hand, betrayed and aimless, landed instead on the mouse.

And he scrolled.

Nothing happened. Of course nothing happened. It was a TUI. A terminal user interface. Mice don't work here. This is sacred ground. This is where men are men and scrolling is Ctrl+f and your wrists ache by 4pm and you call it craftsmanship.

The wheel spun uselessly. The preview did not move.

The creator stared at his own hand on the mouse like it had committed a crime.

And then a thought arrived, uninvited, the way the worst thoughts always do:

"...why doesn't that work?"

Chapter XXXIII: The Argument With Himself

"Because we're better than that," said the part of him with a Vim sticker on his thermos.

"Are we though," said the part of him that had just spent ninety seconds scrolling a single note.

"Mice are for GUIs. For Electron apps. For people who use the file manager instead of mv."

"I have eighty-seven notes, a wheel that turns, and a hand that's doing nothing. The hand wants to help. Why won't I let the hand help?"

"Because—"

"Because what?"

There was no because. There was never a because. There was only dogma, a perfectly good second hand, and a scroll wheel that had been waiting, glowing, for six years.

The creator opened main.rs.

Chapter XXXIV: Teaching the Terminal to Listen

EnableMouseCapture. One line. That was all it took to make the terminal start listening — to make crossterm whisper every wheel-turn and click into the event loop, right alongside the keystrokes.

But listening isn't understanding. A mouse event is just coordinates: column 14, row 9, wheel-up. The terminal doesn't know that row 9 is the third note in cooking/, or that column 40 is hovering over the preview pane. The creator had to teach it geometry — to take a raw (column, row) and ask: which drawer is the cursor over?

  • Wheel over the preview → the markdown scrolls. The way Xerox intended.
  • Wheel over the note list → the selection glides up and down, no j/k required.
  • Click a note → selected, preview loaded, done.

There was a subtlety, naturally. There always is. When you click row 9, which note is that? Depends how far the list has scrolled. So the side panel had to start remembering its own scroll position between frames — persisting a ListState so a click could be translated honestly into "the seventh note, the one you actually pointed at," and not "the seventh note from the top, assuming you never scrolled, which you did."

And one guard rail, written in the blood of a thousand fat-fingered deletions: the mouse only works in normal mode. Click wildly under a "Delete this note? (y/n)" prompt and nothing shifts beneath you. The note you're about to delete stays the note you meant to delete. The creator had opinions about data loss. Most of them learned the hard way.

Chapter XXXV: The Second Hand Awakens

He rebuilt. He launched. He put his right hand on the mouse — deliberately this time, the way you shake hands with someone you've been ignoring at a party.

He scrolled.

The preview moved. Smooth. Effortless. His left hand, for the first time in the history of deez-notes, did nothing at all. It just sat there. Resting. The way the right hand used to.

The hands had traded places. Balance had been restored to the desk.

"Huh," said the creator, scrolling through deployment_cake_recipe.md with the lazy contentment of a man who has just discovered his own arm.

Chapter XXXVI: The Betrayal (According to xX_DarkTerminal_Xx)

The GitHub issue arrived at 2:47 AM. The title was in all caps. Of course it was.

[CRITICAL] you added MOUSE support??? to a TUI????

bro. BRO. the entire point of a terminal app is that you NEVER LEAVE HOME ROW. i have not touched a mouse since the Obama administration. my wrists are PRISTINE. and now you're telling me deez-notes — DEEZ NOTES — has click to select?? what's next, a ribbon menu? clippy? 📎

i trusted you. i defended you in the orange-site comments. "no no he gets it," i said. "he's one of us."

uninstalling. (with the keyboard. obviously.)

The creator read it. Sipped his coffee. Held the mug in his left hand, because he could do that now.

He typed a reply with one hand:

It still does everything with the keyboard. Every key you love still works. The mouse is just... also there. For your other hand. You have another hand.

Use it. Don't use it. The terminal doesn't judge.

Three dots appeared. Disappeared. Appeared again.

...does the wheel scroll the preview though

Yes.

...that's actually kind of useful on a long note

Yes.

i hate that you're right. closing the issue. NOT because i'm gonna use it. just to clean up my notifications.

Somewhere, a small grey object with a faintly glowing eye finally, after six years, felt seen.


What Changed

Component Before After
Preview scrolling Keyboard only (j/k, Ctrl+d, ...) Mouse wheel over the preview pane
Note navigation Keyboard only Mouse wheel over the side panel
Selecting a note Keyboard selection only Left-click it
Terminal input Keystrokes only Keystrokes and mouse events
Side panel scroll state Recomputed every frame Persisted, so clicks map to the right note
Safety — Mouse ignored while dialogs/menus are open
Keyboard workflow Everything Still everything — nothing was taken away

New: Mouse Controls

Action Result
Wheel up/down over preview Scroll the markdown up/down
Wheel up/down over note list Move the selection up/down
Left-click a note or folder Select it (loads the preview)

Every existing keybinding is unchanged. The mouse is purely additive — for the hand you weren't using.

Who Should Update

  • Anyone with long notes — wheel-scrolling the preview is genuinely nicer
  • Two-handed people — your right hand has been benched for years; put it in
  • xX_DarkTerminal_Xx — you don't have to use it. It's just there. Breathe.
  • Keyboard purists — nothing changed for you. Pretend this release doesn't exist. Your wrists remain pristine.

Updating

Linux:

curl -L https://github.com/BaLaurent/deez-notes/releases/latest/download/deez-notes-linux-amd64 -o deez-notes
chmod +x deez-notes
sudo mv deez-notes /usr/bin/deez-notes

Windows:
Download deez-notes-windows-amd64.exe from the releases page and replace your existing binary.

Arch (AUR):

yay -S deez-notes-bin

From source:

cd deez-notes && git pull && cargo install --path .

Full Changelog: v0.3.0...v0.4.0