桌面应用【免费下载链接】ewwElKowars wacky widgets项目地址https://gitcode.com/gh_mirrors/ew/eww点击查看免费下载本篇技术指南以仓库根目录下的 CHANGELOG.md 为主体系统梳理 EwwElKowars Wacky Widgets自 0.3.0 以来的全部版本变更破坏性变更、新特性、修复项并结合crates/eww、crates/simplexpr、crates/yuck等模块源码逐项印证其底层实现。读完本文你将掌握 Eww 各版本的能力边界、CLI 演进脉络、simplexpr 表达式函数清单、magic 变量机制以及从旧版本升级到新版时需要注意的全部破坏性变更。版本总览一条清晰的演进时间线CHANGELOG 记录了从 0.2.0 之后开始的全部重要变更覆盖四个已发布版本与一个 Unreleased开发分支阶段版本发布日期核心主题Unreleased—安全访问重构、系统托盘完善、rust 工具链升级到 1.81.00.6.02024-04-21systray系统托盘组件、checkbox的:checked属性0.5.02024-02-17CLI 重构、simplexpr 大规模扩展、label 属性大扩充、双后端默认编译0.4.02022-09-04X11 输出名、:active伪选择器、scale 交互修复0.3.02022-05-26事件占位符 API 重构、状态管理重写、一批核心组件诞生整体脉络清晰可见0.3.0 奠定了组件与表达式函数的基础0.4.0 打磨交互细节0.5.0 是一次能力大爆发表达式语言、CLI、样式系统全面升级0.6.0 引入系统托盘Unreleased 阶段则持续修复并叠加新属性。Unreleased开发分支上的最新能力与破坏性变更破坏性变更安全访问?.行为收紧[#1176] 改变了 safe access?.的行为对空 JSON 字符串进行索引现在会报错。这与同阶段新增的特性支持对安全访问运算符使用空字符串By: ModProg是配套演进。查看 crates/simplexpr/src/eval.rs 中JsonAccess的求值逻辑可以还原这一行为当safe标志为真且字符串为空时直接返回Null而当对解析为 JSON 字符串如的值继续做索引时由于 match 分支中没有字符串类型分支会落入Err(EvalError::CannotIndex(...))即对空 JSON 字符串索引直接报错而非静默返回空值。升级到开发分支时凡是依赖?.[...]在空 JSON 上静默返回null的表达式都需要显式处理错误分支。新特性清单eww poll子命令By: kiana-S强制按脚本重新拉取某个轮询变量即使其自动轮询被禁用。对应 CLI 定义见 crates/eww/src/opts.rs 中的Poll子命令其行为映射到app::DaemonCommand::PollVars。图片组件新增:fill-svg与:preserve-aspect-ratioBy: hypernova7, w-lfchenfill-svg通过正则替换 SVG 源文件中的fill属性来改变矢量图颜色非 SVG 文件会被忽略并输出警告preserve-aspect-ratio默认true控制缩放时是否保持宽高比。实现见 crates/eww/src/widgets/widget_definitions.rs。label 组件新增:truncate属性By: Rayzeq默认关闭但存在兼容性特例——在 0.5.0 及更早版本中会默认启用截断的场景除外。同时配套:lines最大行数默认-1不限制仅在limit-width有值时生效与:wrap-mode取值word/char/wordchar。simplexpr 新增函数min/maxBy: ovalkonia、logBy: topongo、floor/ceilBy: wsbankenstein、formatbytesBy: topongo实现集中在 crates/simplexpr/src/eval.rs 与同文件formatbytes分支支持iec/si两种字节单位模式。graph 组件新增flip-x、flip-y、vertical控制折线图的方向与坐标轴交换属性在 crates/eww/src/widgets/graph.rs 中定义绘制时通过value_to_point统一换算。transform 组件新增transform-origin-x/transform-origin-yBy: mario-kr支持 px 与百分比配合既有的rotate/translate-x/translate-y/scale-x/scale-y使用变换顺序为 rotate → translate → scale。按钮的键盘支持By: julianschulerbutton组件现在监听key_release_event回车键scancode 36与空格键scancode 65均可触发onclick实现见 crates/eww/src/widgets/widget_definitions.rs。scale 组件新增value-posBy: ipsvn控制数值显示位置取值left/right/top/bottom。defwindow新增unfocus-closeBy: liegle窗口失去焦点时自动关闭。jq 函数新增raw-output支持By: RomanHargrave。系统托盘完善:hoverCSS 选择器支持托盘图标By: zeapoz修复移除托盘项By: vnva支持加载无路径注册的托盘项By: Kage-Yami。托盘实现在 crates/eww/src/widgets/systray.rs 与notifier_hostcrate。Wayland 相关focusable 的 OnDemand 支持By: GallowsDove、monitor 名称支持修复By: dragonnn、多显示器处理改进By: bkueng。工具链rust 工具链升级到 1.81.0By: w-lfchen可对照仓库根目录的 rust-toolchain.toml。其他:style属性支持 SCSSBy: ovalkonia、get_locale遵循 POSIX 语言环境选择标准By: mirhahn, w-lfchen、重新启用部分 SCSS 特性By: w-lfchen、nix flake 修复与重构。关键修复修复无效formattime格式串导致的崩溃By: luca3s——对应formattime函数在 eval.rs 的实现现在解析失败会返回诊断错误而非 panic。修复 graph 组件收到 NaN 或无穷大数值时的崩溃By: luca3s——widget_definitions.rs 中value属性现在显式校验is_nan() || is_infinite()并抛出诊断错误。修复 gtkstackBy: ovalkonia与expanderBy: ovalkonia组件、EWW_NET变量取值错误By: mario-kr。0.6.0系统托盘时代开启0.6.0 的核心贡献由 ralismark 的systray组件带来——Eww 自此可以原生托管系统通知图标StatusNotifierItem托盘组件支持spacing、orientation、space-evenly、icon-size、prepend-new等属性其构建逻辑见 crates/eww/src/widgets/widget_definitions.rs底层 DBus 协议实现在notifier_host/src/proxy与watcher.rs中。同期变更还包括checkbox 新增:checked属性By: levnikmyskin设置初始勾选状态配合onchecked/onunchecked命令使用。jq修复By: w-lfchen表达式语言内置的 jq 风格 JSON 处理此前在 0.5.0 引入这里修复了其行为。shell-completions子命令提前执行现在在任何环境初始化之前就运行避免生成补全脚本时受环境状态干扰。label 改用 GTK 截断系统By: Rayzeq为后续 0.5.0/Unreleased 中truncate相关属性的体系化做准备。nix flake 修复。0.5.0能力大爆发的关键版本破坏性变更eww windows被拆分为两个命令eww windows命令被移除替换为eww active-windows列出当前活跃窗口行格式window_id: window_name与eww list-windows列出已定义窗口名称。两者在 crates/eww/src/opts.rs 中定义分别映射到app::DaemonCommand::ListWindows与ListActiveWindows。如果你此前在脚本中依赖eww windows需要按语义迁移想要当前开着的窗口用active-windows想要配置里定义的所有窗口用list-windows。表达式语言simplexpr全面进化0.5.0 将 simplexpr 从简单算术求值器升级为真正可用的配置内嵌语言安全访问?.与带索引的安全访问?.[n]By: oldwomanjosiah, ModProg对 JSON 对象/数组做容错取成员求值实现见 crates/simplexpr/src/eval.rs。and、or、?:惰性求值By: ModProgeval.rs 中And/Or/Elvis三个运算符的右操作数被包裹为闭包b()仅在需要时求值——这消除了0/0之类的短路场景报错也让?:elvis取非空值成为安全的默认值语法。jq函数引入 jq 风格的 JSON 处理能力By: w-lfchen 在 0.6.0 修复底层基于jaq库见 eval.rs 的jaq_interpret::FilterT导入。三角与角度函数By: end-4sin、cos、tan、cot、degtorad、radtodeg实现见 eval.rs。substring、get_envBy: RegenJacob读取环境变量、/0.3.0 已加入这里延续。EWW_TIMEmagic 变量By: Erenoit当前 UNIX 时间戳刷新间隔 1 秒。EWW_BATTERY扩展到 FreeBSD、OpenBSD、NetBSDBy: dangerdyke。label 组件的属性大扩充truncate-leftBy: kawaki-san从左端截断pango::EllipsizeMode::Start。gravityBy: Elekrisk取值south/east/west/north/auto文字倾向朝向重力方向。justifyBy: n3oney对齐方式left/right/center/fill。unindentBy: nrv是否移除前导空格默认true。:xalign/:yalign0.3.0 引入这里沿用。以上属性含后续truncate/lines/wrap-mode全部收敛在 build_gtk_label 一个函数中。窗口与样式系统--duration标志加入eww open窗口自动关闭计时如--duration 1s。monitor 引用primary与多匹配器支持monitor字段现在可以写多个匹配器并可用primary指向主显示器解析逻辑见 crates/yuck/src/config/monitor.rs。stack组件By: vladaviedov同一时刻只显示一个子元素selected按索引切换支持transitioncrossfade等与same-size。tooltip组件By: Rayzeq自定义提示框第一个子元素是提示内容第二个是被提示的组件突破 GTK 只能显示纯文本 tooltip 的限制。Vanilla CSS 支持By: Ezequiel Ramis除 SCSS 外现在可直接使用纯 CSS。eww shell-completions命令为不同 shell 生成补全脚本。:namespace窗口选项、默认同时编译 x11 与 wayland 后端、切换稳定版 rust 工具链1.76。窗口几何支持浮点百分比crates/yuck/src/value/coords.rs。修复EWW_NET取值错误修复、日志文件无限增长修复。0.4.0交互细节打磨破坏性变更calendar 月份从 0 索引改为 1 索引此前calendar组件的month属性按 GTK 惯例从 0 计数0.4.0 改为从 1 计数与人类直觉一致。源码印证build_gtk_calendar 先校验month在 1..12 之间再通过set_month(month - 1)转回 GTK 内部索引。所有依赖月份数值的配置如默认月份变量都需要1调整。新特性X11 输出名支持:monitor现在可用 X11 输出名如HDMI-1选择显示器与 Wayland 的name:port写法统一。eventbox 的:active伪选择器By: viandoxdev按下时置ACTIVE状态标志、释放时清除配合 CSS 实现按下态样式。input 的:passwordBy: viandoxdev通过set_visibility(!password)实现输入遮蔽。重要修复与改进scale 的 onchange 只在用户交互时触发源码中resolve_range_attrswidget_definitions.rs用is_being_dragged与last_set_value两个状态区分脚本 set_value与用户拖拽脚本写入的值不再触发onchange命令。:round-digits加入 scaleBy: gavynriebau。circular-progress 在clockwise: false时正确显示 100%。EWW_TEMPS中某个值为 NaN 时其余温度仍可访问crates/eww/src/config/system_stats.rs。CSS 错误报告改进、deflisten 脚本清理修复。0.3.0奠定架构的奠基版本破坏性变更事件命令多占位符 APIonclick命令 API 改为支持多个占位符。此前 calendar 的onclick会把整个日期day.month.year塞进单个值eventbox 的onhover/onhoverlost把坐标x y塞进单个值现在改为独立占位符calendar{0} 日{1} 月{2} 年eventbox 悬停事件{0} x{1} y。这与 build_gtk_calendar 中run_command(timeout, onclick, [w.day(), w.month(), w.year()])的调用方式完全对应。所有手写的事件处理脚本都必须按新占位符格式改写。新特性一批核心组件诞生eww inspector命令打开 GTK 调试器别名debugger用于检查组件树。--no-daemonize标志前台运行 daemon 便于调试。circular-progressBy: druskus20value0-100源码中clamp(0.0, 100.0)、start-at、thickness、clockwise。graphBy: druskus20随时间变化的折线图value/thickness/time-range/min/max/dynamic/line-style绘制逻辑见 crates/eww/src/widgets/graph.rs。transformBy: druskus20rotate/translate/scale 变换容器。overlayBy: viandoxdev子元素叠放尺寸取第一个子元素。scrollBy: viandoxdevhscroll/vscroll滚动容器。children支持自定义组件可使用children接收子元素。desktop与notification窗口类型By: Alvaro Lopez。eventbox 拖放ondropped接收拖放、dragvalue/dragtype发起拖放file/text。scale 的marksBy: druskus20用逗号分隔的数值列表绘制刻度。input 的:onacceptBy: viandoxdev回车触发。simplexpr 新函数By: MartinJM, ElKowarsearch、captures、stringlength、arraylength、objectlength、matches正则匹配。magic 变量诞生EWW_CMD指向当前 eww 可执行文件与配置目录的完整命令可嵌入事件处理器如:onclick ${EWW_CMD} update foobar、EWW_CONFIG_DIR、EWW_EXECUTABLE。defwindow的 arguments 选项By: WilfSilver与eww open --arg varvalue配套。内部架构变更Rework state management completely, now making local state and dynamic widget hierarchy changes possible.0.3.0 完全重写了状态管理从此支持局部状态与动态组件层级变化——这正是 crates/eww/src/state/ 模块scope.rs、scope_graph.rs、one_to_n_elements_map.rs承担的核心职责也是后续所有动态 UI 能力literal动态渲染、onclick更新变量的基石。其他修复onscroll的 GTK 首事件错误修复By: druskus20、windowtype: normal窗口可被移动、更多示例、magic 变量结构文档化。源码级对照magic 变量与 CLI 的当前全貌magic 变量如何工作所有内置轮询变量在 crates/eww/src/config/inbuilt.rs 中通过宏统一注册每个变量是一个PollScriptVar带独立的轮询间隔变量含义结构间隔EWW_TEMPS各组件温度℃{ name: temperature }2sEWW_RAM内存/交换统计字节{ total_mem, free_mem, ... }2sEWW_DISK挂载分区占用{ mount_point: { name, total, free, used, used_perc } }2sEWW_BATTERY主电池电量{ name: { capacity, status } }2sEWW_CPU各核心频率与使用率{ cores: [...], avg }2sEWW_NET各网卡上下行字节{ name: { up, down } }2sEWW_TIME当前 UNIX 时间戳标量1s此外还有三个常量型 magic 变量EWW_CONFIG_DIR、EWW_CMD、EWW_EXECUTABLE见同文件define_magic_constants!宏。注意这些变量的run_while_expr恒为true即只要 daemon 运行就持续刷新与文档 docs/src/magic-vars.md 中除EWW_TIME外间隔 2s、EWW_TIME为 1s的描述一致。这些变量的取值函数get_temperatures、get_ram、get_battery_capacity、net等位于 crates/eww/src/config/system_stats.rs。CLI 演进至今的完整形态opts.rs 是 CLI 定义的唯一权威来源汇总各版本演进结果全局选项--debug写调试日志、--force-wayland、--config覆盖配置目录、--logs执行命令后跟随日志输出、--no-daemonize、--restart。daemon 管理eww daemon别名d、eww kill别名k、eww ping。窗口操作eww open别名o支持--id、--screen、--pos、--size、--anchor、--toggle、--duration、--arg、eww open-many、eww close别名c、eww close-all别名ca。变量与状态eww update别名u语法variable_namenew_value、eww poll、eww get、eww state--all显示全部变量。诊断eww logs、eww inspector别名debugger、eww debug打印组件结构、eww graph以 graphviz dot 格式输出 scope 图。窗口查询eww list-windows、eww active-windows。其他eww reload别名r、eww shell-completions --shell shell。升级迁移清单破坏性变更汇总0.3.0事件命令占位符改为{0}/{1}/{2}多占位符calendar 日期、eventbox 坐标旧脚本全部重写。0.4.0calendar的month从 0 索引改为 1 索引旧配置月份值1。0.5.0eww windows移除按语义改用eww active-windows或eww list-windows。Unreleasedsafe access 对空 JSON 字符串的索引从静默空值改为报错label的截断行为默认关闭0.5.0 及以前默认开启的场景除外若依赖旧截断行为需显式设置:truncate。结语纵观 CHANGELOG.md 记录的演进史Eww 在两年间从一个纯窗口小部件工具成长为具备自研表达式语言、系统托盘、多后端x11/wayland编译能力的完整桌面方案0.3.0 的状态管理重构为后续所有动态能力奠基0.5.0 的 simplexpr 大爆发让配置可编程0.6.0 的 systray 补齐了桌面组件最后一块拼图。对于配置作者而言本文梳理的属性、函数、命令清单可直接对照源码继续深入对于插件/主题开发者破坏性变更清单则是升级时的第一份检查表。若需从源码验证任一行为建议从 widget_definitions.rs、eval.rs、opts.rs 三个文件开始。赞分享桌面应用【免费下载链接】ewwElKowars wacky widgets项目地址https://gitcode.com/gh_mirrors/ew/eww点击查看免费下载相关推荐Apache APISIX 版本演进与升级指南从 0.6.0 到 3.9.0 的完整变更史解读Apache APISIX 版本演进与升级指南从 0.6.0 到 3.9.0 的完整变更史解读 本文以仓库根目录的 CHANGELOG.md https://后端微服务云原生Hyperledger Fabric 版本演进史从 v0.6 到 v2.0 的变更日志解读与源码印证Hyperledger Fabric 版本演进史从 v0.6 到 v2.0 的变更日志解读与源码印证 导读 本篇文章以仓库根目录 CHANGELOG.md h区块链密码学Bluebird Promise 库版本演进全解析从 0.3.0 到 3.7.2 的完整变更日志深度解读Bluebird Promise 库版本演进全解析从 0.3.0 到 3.7.2 的完整变更日志深度解读 本篇技术指南以仓库 docs/docs/change后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考