Carnac 上游停在 2020 年,fork 從 9 月 28 日起兩週發了四版
Code52/carnac 在 GitHub 上的最後一個 release 是 2.3.13,發佈日期 2020 年 6 月 20 日。下一個 Carnac 的 release 要等到 2026 年 9 月 28 日,換到 doggy8088/carnac 這個 fork 上,版號 v2.4.0。接著是 10 月 10 日的 v2.5.0、11 日的 v2.6.0、12 日的 v2.6.1。這些日期都是 2026 年 10 月 13 日從兩個 repo 的 releases API 抓下來的,用的是 API 給的 UTC 時間。
中間六年三個月多,一版都沒有。
Carnac 做的事很單純:你在 Windows 上按了什麼鍵,它就在螢幕上用浮動框秀出來。需要它的場合是錄操作教學、上台示範、開會分享畫面。觀眾看得到你的螢幕,看不到你的鍵盤。macOS 上同類的 KeyCastr 把用途寫得很白:「KeyCastr enables you to share your keystrokes when creating screencasts, presenting, or collaborating with others.」
沒有這類工具的時候,「我剛剛按了什麼」只能靠講者念出來,或是剪片時補字幕。這是我對一般做法的描述,不是哪份文件寫的。兩條路都靠人記得,講者順手按了一組快捷鍵卻沒念,觀眾只會看到畫面忽然跳走。之前寫過的 OpenScreen 管的是把畫面錄下來,鍵盤這一塊它不負責。
Carnac 把這件事交給程式。而它自己這六年,連怎麼裝到你電腦上都換了一輪。
裝起來要過幾關
上游的版本史可以拆成兩段。2017 年 5 月 2 日有一顆 commit,訊息寫「Bump minor version as we’re now Squirrelified instead of ClickOnce」,所以在那之前走的是 ClickOnce,之後改用 Squirrel 打包,這是從 commit 訊息反推的。那段時間上游發版很密,2.0.0.41 到 2.0.0.112 落在 2017 年 4 月 16 日到 5 月 10 日之間。
然後是最後一版。2.3.13 的 release 說明寫的是:「This release restores the Squirrel package generation after there were some unexpected changes on Appveyor which impacted publishing releases.」
Appveyor 那邊改了東西,發版流程斷掉,他們把 Squirrel 套件的產生修回來,發了這一版。之後就沒有下一版了。上游 repo 到今天沒有封存(archived 是 false),最後一次 push 是 2023 年 2 月 17 日,說它「停更」是我從日期推的,不是它自己掛了牌子。為什麼停,我查不到有人公開講過。
上游最後一次發版,修的是發版這件事本身。fork 接手後動的第一刀,也落在同一個地方。
v2.4.0 的 release 說明開頭是:「The first release of the doggy8088 fork of Carnac with a regular Windows installer, published to WinGet as doggy8088.Carnac.」安裝檔是 Carnac-2.4.0-Setup.exe,原文說它「Installs per user into %LocalAppData%\Programs\Carnac, with no administrator prompt」,需要 .NET Framework 4.5.2 以上。不用跳管理員權限,對公司電腦是實際的差別。這個安裝檔我沒有實際裝過,這台是 Mac,上面只是轉述它的說明。
WinGet 那句要小心讀。同一份說明裡還有一句「once the package is live in WinGet」,看起來發版當下套件還沒上線。我沒有去 winget-pkgs 查它現在上了沒,所以不能跟你說 doggy8088.Carnac 已經裝得到。
v2.5.0 把發佈管道再加兩條:Chocolatey 套件與自動發佈的 workflow(#60),還有免安裝的 portable zip(#34)。Squirrel 則在 10 月 10 日那顆 commit 正式退役,標題是「Retire Squirrel and add an opt-in update check」,同一顆 commit 另外加了更新檢查,要自己打開才會跑。Chocolatey 這條,fork 作者在 9 月 28 日開了 issue #5「Take over maintainership of the Chocolatey carnac package」,現在是 closed。社群套件頁上的維護者和版本是不是已經換過來,我沒有去 Chocolatey 官網查證。
Carnac 的發版紀錄(2026-10-13 查 GitHub releases API)
2015-12-01
上游 releases 頁上最早的紀錄:1.0.0.22 與 1.0.0.24。
2017-04-16 至 2017-05-10
上游密集發出 2.0.0.41 到 2.0.0.112。5 月 2 日的 commit 寫著改用 Squirrel、不再用 ClickOnce。
2018-06-17
doggy8088 建立這個 fork,6 月 19 日、20 日發了 1.0.0.7 與 1.0.0.8,之後就沒有再發 release。
2020-06-20
上游 2.3.13,說明是修好被 Appveyor 變動弄壞的 Squirrel 打包。上游最後一個 release。
2026-09-28
fork 的 v2.4.0:一般 Windows 安裝檔,每使用者安裝,不需要管理員權限。
2026-10-10
v2.5.0:release 說明列了 17 條 PR,含 Chocolatey 與 portable zip。
2026-10-11
v2.6.0:只有一條,滑鼠動作以 keycap 圖示顯示在浮動框裡。
2026-10-12
v2.6.1:說明只有 v2.6.0…v2.6.1 的 Full Changelog 連結,沒寫改了什麼。
fork 本身不是新的。它在 2018 年就建好了,只是隔了八年多才又開始發版。
按下去,螢幕上出現什麼
浮動框裡顯示的東西也變了。下面全部出自 release 說明,浮動框實際長什麼樣,我沒有親眼看過。
v2.4.0 先帶了一份 Kdenlive 剪輯軟體的 keymap,原文是「39 shortcuts for the Kdenlive video editor」,也就是在 Kdenlive 裡按快捷鍵時,浮動框可以秀出那組鍵在這個程式裡叫什麼名字。同一版也修了多螢幕的問題,會記住你選的那台顯示器位置。
v2.5.0 的 17 條 PR 裡,一大半在處理「畫面上出現什麼」。特殊鍵改畫成鍵帽(key caps)的樣子(#6)。連打同一個字元,要連續四個之後才收合成一筆(#7),原文是「Only summarise repeated typed characters after four in a row」。按鍵名稱改成依你當下的鍵盤配置來顯示(#30)。單獨按 Ctrl、Alt、Win 要不要秀,變成可以選(#31)。
再來是過濾。按鍵可以依類別篩,也能指定忽略哪些鍵(#47);chord 的第一個鍵如果等太久,會先自己顯示出來(#44)。滑鼠點擊則多了一圈光圈(#32)。
其中 #6、#7、#30、#31、#32 這五條,release 說明在後面標了上游的編號,#160 到 #164。我沒點進那幾個上游 PR 看它們當年是什麼狀態,所以不替它們編故事。
到 v2.6.0,整版只有一條:「feat: show mouse actions as keycap icons in OSD popup」(#62),滑鼠動作也用鍵帽圖示畫進浮動框。v2.5.0 到 v2.6.0,發版時間只隔不到一天。
33 個 commit,release 說明只列 17 條
拿 GitHub 的 compare 比 v2.4.0 到 v2.5.0,中間有 33 個 commit。release 說明列了 17 條 PR,一條 PR 本來就可能包好幾個 commit,數字對不上不奇怪。奇怪的是有幾件事根本沒出現在說明裡。
10 月 9 日的 commit 56f6458,標題是「Add a capture-friendly window setting for OBS and XSplit」,讓浮動框比較好被 OBS 和 XSplit 擷取。對錄影的人來說,這可能是整版最實用的一條,v2.5.0 的說明裡卻找不到。10 月 10 日的 2d155f0 是「Add error logging and keep the key pipeline alive after a failure」,出錯時寫 log,而且不讓按鍵處理整條斷掉。10 月 9 日的 1366aaa 把 Preferences 視窗、系統匣選單和按鍵標籤做了在地化,支援哪幾種語言,我沒有逐檔去數。
還有一個時間差。把 Chocolatey 套件版本更新到 2.5.0 的那顆 commit(37fdd60),落在 v2.5.0 到 v2.6.0 之間,代表 v2.5.0 發出去之後,choco 那邊才跟上。
這個 fork 發得快,release 說明跟不上程式碼。 想知道某一版到底改了什麼,我會直接開 compare 看 commit 標題,不只讀說明。哪天它的 release 說明開始逐條對得上 commit,像 v2.6.1 那種只丟一個 changelog 連結的版本不再出現,我就回去只讀說明。
換個作業系統,同一件事
按鍵顯示這件事不是 Windows 才有。下表的數字都是 2026 年 10 月 13 日用 GitHub API 和官方文件查的;授權、星數、日期會變,以查詢當天為準。
| 工具 | 平台 | 授權 | 官方文件寫的顯示範圍 | 滑鼠 | 最近動態 |
|---|---|---|---|---|---|
| Carnac(doggy8088 fork) | Windows | MS-PL | 按鍵類別過濾、忽略特定鍵、鍵帽顯示 | 點擊光圈(v2.5.0)、滑鼠 keycap(v2.6.0) | v2.6.1,2026-10-12;60 stars |
| Carnac(Code52 上游) | Windows | MS-PL | 停在 2.3.13 | 最後 release 2020-06-20;最後 push 2023-02-17;4546 stars | |
| KeyCastr | macOS | BSD-3-Clause | command keys、all modified keys、all keystrokes 三選一 | 有「include mouse clicks」選項 | v0.11.1,2026-09-07;15150 stars |
| Screenkey | Linux | GPL-3.0 | 原 GitHub repo 描述:A screencast tool to display your keys | 未查 | GitHub repo 已封存,README 說已搬到 GitLab |
| PowerToys Mouse Highlighter | Windows | MIT | 這份文件只談滑鼠 | 點擊時顯示視覺提示,預設 Win+Shift+H 開關 | PowerToys repo 2026-10-13 仍有 push |
KeyCastr 在 macOS 10.15 以後要到「輸入監控」(Input Monitoring)給權限才能用,README 有寫,安裝是 brew install --cask keycastr。Screenkey 搬到 GitLab 之後的發版狀況,我沒有查到。PowerToys 那一列要讀窄一點:我讀的是 Mouse Utilities 那一頁,裡面列了 CursorWrap、Find My Mouse、Mouse Highlighter、Mouse jump、Mouse Pointer Crosshairs,都是滑鼠,那一頁沒有講按鍵顯示。PowerToys 其他模組有沒有類似功能,我沒有掃完,不能說它沒有。
滑鼠點擊這一格,KeyCastr 有選項、PowerToys 有 Mouse Highlighter,Carnac 的 fork 是在 2026 年 10 月 9 日加了光圈、11 日加了滑鼠 keycap,算是補上大家都有的那一格。
要我選,在 Windows 上秀按鍵,現在該看的是 doggy8088 這個 fork,不是 Code52 上游。上游的最後一個 release 停在 2020 年,這兩週加進來的鍵帽、滑鼠 keycap、OBS 擷取設定都不在裡面,連它用的打包工具 Squirrel,在 fork 裡也已經退役。有兩種情況我會改口。你只需要讓觀眾看到滑鼠點在哪,那 PowerToys 的 Mouse Highlighter 就夠,不必再多常駐一個程式。或是這個 fork 停下來了,例如之後半年都沒有新 release,那它就回到跟上游一樣的處境。
該檢查的東西換了
畫面上,從講者念、剪片補字,換成程式即時把按鍵名稱畫出來,連滑鼠都畫成一顆鍵。交代「我按了什麼」不再靠人記得。
維護上,從 Code52 這個組織的 repo,換成一個人的 fork。星數擺在那裡:上游 4546,fork 60,都是 10 月 13 日的數字。我猜用 Carnac 這個名字去找,多數人會先碰到星數多的上游,看到 2020 年的最後一版,就以為這個工具已經沒人管了。
所以挑這種小工具時,我會先檢查的東西也換了。以前看它功能夠不夠,現在先開 releases 頁,看最上面那一版是哪一天、是誰發的。Carnac 的答案在這兩週剛換過一次。如果你真的要在 Windows 上裝,順手去 winget-pkgs 查一下 doggy8088.Carnac 上線了沒,這一步我還沒做。










