繁體中文

新功能

Migration 主題把遷徙路線畫進暮色天空

打開第十四個視覺主題 Migration,面板裡的暮色天空已經有經緯線,三群 V 字鳥群以不同速度橫越天空,翅膀還會動。

每段旅程會以 ROUTE. 7 這類路線標籤標出。它延續 Lepidoptera 面板的插畫式野外圖鑑做法,這次換成遷徙畫面來說故事。

新功能

README 主題圖集重拍,補齊缺圖也遮住真實資料

五份 README(專案說明頁)原本像五張用不同資料填寫的練習卷:照片少了主題又高低不齊,舊圖還是從真實機器手動截圖,讓真實專案名稱和金額帶到公開頁面。

標題說有十三張,卻只有十張截圖;stained_glass 與 origami 沒拍過,catppuccin 只有中文版,Antigravity 卡也比舊圖晚出現。現在 scripts/make_panel_shots.py 以網站同一份合成展示資料重建截圖。圖集每列三張,較矮面板會把整列推歪,所以才統一按最高面板高度拍攝;比其他面板矮 243 像素的寬型畫面資訊層 world_cup 不放進圖集,留下十二張、四列對齊。網站仍各自以原本尺寸呈現十三張。GitHub 會移除 Markdown 裡的腳本與 iframe,所以 README 保留靜態圖片。

新功能

網站圖集改播十三個活面板,語言也會跟著切換

網站上的主題牆從十張靜態截圖,改成能直接看的十三個真實面板。

原先 origami、stained_glass 沒有圖,catppuccin 只顯示中文,於是「十三個主題」實際只看到十個。現在網站把面板網頁原碼放進框架,餵入手寫的展示資料;主題清單從 panels.all_panels() 取得。新增第十四個時,執行 scripts/make_panel_demo.py 即會出現在網站,不必再記得補拍兩張圖。網站選語言時,既有 applyLang() 也會把切換交給面板,因此五種語言都會一起變。面板只供展示,網頁沒有原生端能回應 Switch Panel 與 Quit 按鈕。舊截圖留在 docs/,README 仍連到它們。

新功能

Stained Glass 加入萬花筒般的反向旋轉

Stained Glass 面板原本的光線掃過效果還在,畫面卻開始多了一層轉動。

分層碎片由 kaleidoscopeTurn 反向旋轉,光線掃過則由 kaleidoscopeSweep 接著走。原有的 sunlightSweep 保留,面板的識別碼和名稱也不變,所以這是既有 Stained Glass 的視覺升級,不是另一個新主題。

新功能

七個模組搬進分區,打包時避開 `setup` 撞名

根目錄少七模組,剩 28 個 Python 檔。

panel_window、panel_window_state→panels/,critter_frames→menubar/;setup_hook、session_hooks、statusline_settings、login_item 四模組將 usage 安裝到使用者系統,移入新 installer/。installer/ 不叫 setup:根目錄列入 sys.path(找模組清單),同名頂層套件會遮住 setuptools、py2app 打包的 import setup。僅打包出錯,測試不會發現。四模組循 __file__ 往上找掛鉤腳本;腳本留根目錄由系統 Python 執行,故多找一層。

English

FEATURE

Migration paints migration routes across a dusk sky

Open Migration, fourteenth visual theme, and a dusk sky appears with a latitude-and-longitude grid. Three V-shaped flocks cross it at different speeds, with moving wings.

Route labels such as ROUTE. 7 identify those journeys. This follows illustrated field-guide approach of Lepidoptera panel, using migration as scene this time.

FEATURE

README galleries are rebuilt to complete missing themes and hide real data

Five READMEs were like practice sheets filled with different sample data: photos missed themes, failed to line up, and old images were hand-captured from a real machine, carrying real project names and dollar amounts onto public pages.

Headings claimed thirteen images but showed ten: stained_glass and origami had never been photographed, catppuccin only in Chinese, and old images predated Antigravity card. scripts/make_panel_shots.py now rebuilds shots from same synthetic payload used by website. Since galleries put three pictures in each row, a shorter panel pushes whole grid out of line, so all shots use tallest panel height; wide HUD world_cup, genuinely 243 pixels shorter, stays out. That leaves twelve images in four even rows. Website still displays all thirteen alone at own size. GitHub strips scripts and iframes from Markdown, so README remains static images.

FEATURE

Website gallery runs all thirteen live panels and switches their language

Theme wall on website moves from ten static screenshots to thirteen real panels you can view directly.

origami and stained_glass had no image, while catppuccin showed only Chinese, so thirteen themes meant ten visible themes. Website now puts real panel HTML into frame with hand-written demo payload, and gets theme list from panels.all_panels(). When fourteenth panel arrives, running scripts/make_panel_demo.py places it on site without remembering two more photos. Existing applyLang() also passes site language choice to panel, so all five languages change together. Panel is display-only: no native side on web page can answer Switch Panel or Quit buttons. Old screenshots remain in docs/, and READMEs still link to them.

FEATURE

Stained Glass gains counter-rotation like a kaleidoscope

Stained Glass keeps its existing light sweep, but scene now gains another layer of motion.

Layered fragments counter-rotate through kaleidoscopeTurn, while light sweep follows through kaleidoscopeSweep. Existing sunlightSweep remains, as do panel's id and name, so this upgrades existing Stained Glass visually rather than creating another theme.

FEATURE

Seven modules move into packages to avoid a `setup` naming collision at build time

Project root moves out seven more modules and now holds only 28 Python files.

panel_window and panel_window_state join panels/; critter_frames joins menubar/; four modules setup_hook, session_hooks, statusline_settings, and login_item install usage into user's system and join new installer/ package. It cannot be called setup: repository root sits on Python's sys.path (list of places Python searches for modules), and a top-level package of that name would shadow import setup used by setuptools and py2app during packaging. Failure surfaces only when packaging, not in test suite. Four modules used to walk upward from __file__ for hook scripts; scripts remain at root to run under system Python, so they now walk up one extra level.

原始 CHANGELOG

Original changelogMigration 主題把遷徙路線畫進暮色天空
**Migration is the fourteenth visual theme.** Its dusk sky carries a latitude-and-longitude grid while three V-shaped flocks cross at different speeds, their wings moving as route labels such as `ROUTE. 7` identify the journeys. It follows the Lepidoptera panel's illustrated field-guide approach.
Original changelogREADME 主題圖集重拍,補齊缺圖也遮住真實資料
**The README theme galleries are rebuilt from synthetic data and now line up.** All five READMEs listed ten screenshots under a heading that said thirteen — `stained_glass` and `origami` had never been photographed, `catppuccin` only in Chinese. The old images were also hand-captured from a real machine, so they carried actual project names and dollar amounts onto a public page, and predated the Antigravity card entirely. Every shot is now regenerated by `scripts/make_panel_shots.py` from the same synthetic payload the website uses. The galleries place three images per row, so a panel that is shorter than its neighbours pushes the whole grid out of line; the shots are therefore all captured at the tallest panel's height, and `world_cup` — a wide HUD that is genuinely 243 pixels shorter than the rest — sits this gallery out. Twelve images, four even rows. All thirteen are still on the website, where each one is shown alone at its own size. GitHub strips scripts and iframes from Markdown, so the README stays static images.
Original changelog網站圖集改播十三個活面板,語言也會跟著切換
**The website now shows all thirteen panels, live, instead of ten screenshots.** The gallery held ten static images; `origami` and `stained_glass` had never been photographed at all, and `catppuccin` only in Chinese — so the page showed ten themes under a heading that said thirteen. It now renders the real panel HTML in a frame with a hand-written demo payload, and the theme list comes from `panels.all_panels()`, so a fourteenth panel appears on the site by running `scripts/make_panel_demo.py` rather than by remembering to take two more screenshots. Picking a language on the site switches the panel too, in all five languages, because the site's existing `applyLang()` forwards to it. The panel is display-only — its Switch Panel and Quit buttons have no native side to answer them on a web page. The old screenshots stay in `docs/`; the READMEs still link to them.
Original changelogStained Glass 加入萬花筒般的反向旋轉
**Stained Glass now turns like a kaleidoscope.** The existing `sunlightSweep` remains, while layered fragments counter-rotate through `kaleidoscopeTurn` and the light sweep follows through `kaleidoscopeSweep`; its id and name stay the same, so this is a visual upgrade to the existing panel rather than a new theme.
Original changelog七個模組搬進分區,打包時避開 `setup` 撞名
**Seven more modules moved out of the repository root.** `panel_window` and `panel_window_state` joined `panels/`, `critter_frames` joined `menubar/`, and a new `installer/` package took `setup_hook`, `session_hooks`, `statusline_settings`, and `login_item` — the four modules that install usage into the user's system. The root is down to 28 Python files. The package is named `installer` rather than `setup` because the repository root is on `sys.path` and a top-level `setup` package would shadow the bare `import setup` that setuptools and py2app perform during a build — a failure that only surfaces when packaging, never in the test suite. The four modules that resolve the hook scripts by walking up from `__file__` now walk up one extra level, since those scripts stay at the root to run under the system Python.