<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Hotkey on Nick Liu - Software Engineer</title>
    <link>/tags/hotkey/</link>
    <description>Recent content in Hotkey on Nick Liu - Software Engineer</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <managingEditor>nickboy@users.noreply.github.com (Nick Liu)</managingEditor>
    <webMaster>nickboy@users.noreply.github.com (Nick Liu)</webMaster>
    <copyright>2026 Nick Liu</copyright>
    <lastBuildDate>Sun, 10 May 2026 22:48:37 -0700</lastBuildDate><atom:link href="/tags/hotkey/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>What replaced CGEventPost in my Stream Deck daemon</title>
      <link>/posts/tahoe-hotkey-dead-end/</link>
      <pubDate>Sun, 10 May 2026 00:00:00 +0000</pubDate>
      <author>nickboy@users.noreply.github.com (Nick Liu)</author>
      <guid>/posts/tahoe-hotkey-dead-end/</guid>
      <description>&lt;div class=&#34;lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl&#34;&gt;&#xA;  &#xA;I press the Stream Deck key. The daemon logs the press, synthesizes `Cmd+Opt+;` through CoreGraphics, and exits cleanly. Wispr Flow does nothing. Three Apple subsystems and one decompiled Electron bundle later, the working trigger turned out to be a one-line URL.&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;The plan was the boring kind: Stream Deck key (the physical button on Elgato&amp;rsquo;s programmable USB grid) → WebSocket message → my daemon (long-running background process) → synthesized global hotkey → Wispr Flow&amp;rsquo;s hands-free dictation starts — Wispr Flow is the voice-to-text Mac app that types your speech into the focused window — → I talk → words show up in my editor. I&amp;rsquo;d done variants of this with &lt;code&gt;osascript&lt;/code&gt; (macOS&amp;rsquo;s command-line AppleScript runner) years ago. Should have taken an afternoon.&lt;/p&gt;</description>
      
    </item>
    
  </channel>
</rss>
