【免费下载链接】DEsk
DEsk 是一款拟物风格的 Wayland Linux 桌面环境,把整个桌面画成一张真实的书桌:窗口是纸、通知是信箱里的信、声音全部实时合成。想给 DEsk 添加新语言、新设置项或新声音吗?这份 Mod 教程将带你完整走通这三类最常见的代码扩展,每步都标出要改的文件和检查方法。
先阅读官方 Mod 文档 docs/MODDING.md 和架构文档 docs/ARCHITECTURE.md。DEsk 是 MIT 协议,修改副本时保留LICENSE并在 README 中说明改动即可。
环境搭建:三步完成构建与预览
meson setup build meson compile -C build meson test -C build # 会校验翻译表改完代码后,最轻量的验证方式是desk-preview,它不需要合成器,直接把画面画成 PNG:
./build/desk-preview -o out.png -s 1440x900 ./build/desk-preview -o out.png --lang de --shelf # 德语书架视图一、添加新语言:让桌面上的文字说你的语言
DEsk 的界面文字不读资源文件,全部走代码里的翻译表。核心机制很简单:英文是键,TR("TO DO")在英语下就是 "TO DO",在其他语言下查表取翻译(见 include/i18n.h 的注释)。
第 1 步:注册语言枚举
在 include/i18n.h 的enum desk_lang中,于DESK_LANG_COUNT之前插入新语言,例如DESK_LANG_IT。
第 2 步:填翻译表与语言码
在 src/i18n.c 里做三件事:
CODES表(第 1517 行)加一行{ "it", "italian" },它是shell.conf的language键和系统 locale 的识别码;WORDS大表的每一行按语言顺序(en、ja、zh、ko、es、fr、de…)追加一列,没有翻译就写NULL,会自动回退显示英文,所以可以一点点补;MONTH_WHOLE、MONTH_SHORT、DAY_WHOLE、DAY_SHORT、DAY_LETTER五张日期表各加一行。
如果新语言字间无空格(如 CJK),还要让desk_lang_wide对返回true(第 1575 行)。
第 3 步:更新日期、设置与字体的配套位置
- src/index.c:应用索引的 AM/PM 词表
HALF; - src/settings.c:语言选项的
LANG_WORDS(用该语言自称)与LANG_VALS各加一项; - src/wm.c:
conf_other中language键接受的代码列表; - src/apps.c:
REGION表登记该语言常用 locale(决定应用按什么语言归档); - CJK 语言还需在 src/fonts.c 配置字体区域。
验证:meson test -C build会检查列数、重复键和 printf 占位符;再用desk-preview --lang xx分别加--shelf、--console、--calendar、--lock逐视图查看,重点看最长的德语和 CJK 语言是否溢出(个别地方会自动缩字,仍然溢出的要换更短的译文)。
二、添加新设置项:一行 shell.conf,一行设置面板
一个设置 =shell.conf里的一行配置 + Shell Settings 面板里的一行表单,共 4 处改动。
第 1 步:配置读取(wm.c)
在 src/wm.c 的struct shell_conf(第 205 行)加字段,shell_conf_defaults里给默认值,然后写读取逻辑:
- 是/否型:挂进
shell_conf_read_file的 yes/no 连串里; - 其他取值:加进
conf_other(第 10032 行起),参考现成的motion、camera_bounce:值不认识就用wlr_log(WLR_ERROR, ...)报出来并保留默认值——DEsk 不认识的键会写日志但不删,这正是新旧版本能共享一份shell.conf的原因。
最后在shell_apply_all里让设置生效:它不仅在启动时跑,shell.conf每次变化都会重跑。
第 2 步:设置面板表单(settings.c)
在 src/settings.c 的SETTINGS数组中,放到对应分区下:
- 开关用
S_CHECK; - 选项用
S_CHOICE,配*_WORDS(显示词,如MOTION_WORDS)和*_VALS(写入 shell.conf 的值)两个数组。
第 3 步:文案与文档
标签、说明文字和各选项词都要走WORDS翻译表(见上节),并把新键写入 docs/CONFIGURATION.md。
三、添加新声音:从零合成,不录一个音
DEsk 的所有音效在 src/sfx.c 里用物理建模实时合成:敲击是一组谐振衰减(mode)、摩擦是着色噪声(friction)、纸是爆响加气流(crackle+swish)、铰链是滑移声(creak)。加一个新声音只要 3 步:
- 注册名字:在 include/sound.h 的
enum desk_sound中,于DESK_SND_COUNT之前加DESK_SND_YOURS; - 写出合成函数:在
sfx.c里实现s_yours(struct buf *b, struct rng *r, int v),用文件顶部的积木(strike、burst、mode、crackle、swish、finish)拼出材质感,结尾务必调finish(b, rms_db, peak_db)归一响度;参数里的随机数r让每次播放略有不同,没有任何两个瞬间完全相同; - 登记与播放:在
SFX表(第 1377 行起)登记{ "yours", 秒数, 变体数, s_yours },然后在事件处调用:
desk_sound_play(DESK_SND_YOURS, pan, gain, 0.0);pan从 -1(左)到 1(右),一般取发声物在屏幕上的位置,声音就会从那个方向传来。
不吵人的调试技巧:设置DESK_SOUND=file:/tmp/desk-%p.wav运行,混音会写成 WAV 文件而不是进音箱,方便反复试听。
四、分享前的自检清单
meson test -C build meson setup b-min -Dpost=disabled -Dsound=disabled -Dxwayland=disabled meson setup b-werror -Dbuildtype=debug -Dwerror=true meson compile -C b-min && meson compile -C b-werrormeson test通过(翻译表列数、键唯一、占位符一致);desk-preview下用你的语言、最长假(通常是德语)和 CJK 假各看一遍;- 图形等级切到 2D Fallback(
graphics = 2d)确认没变卡; - 日志无
[ERROR]行(嵌套运行时在 stderr,安装后在~/.local/state/desk/session.log)。
掌握以上三块——翻译表、shell.conf读取链、合成音积木——你就能覆盖 DEsk Mod 的绝大多数扩展需求;若改到房间几何,记得 src/draw.c 与 src/room.glsl 必须用同样的方式改两处,再用desk-gputest --room核对两者一致。
【免费下载链接】DEsk
相关推荐
Lan Mouse 开发者指南:如何为项目贡献代码和扩展新后端
Lan Mouse 开发者指南:如何为项目贡献代码和扩展新后端 Lan Mouse 是一款跨平台的鼠标和键盘共享软件,类似于 Apple 设备上的 Univer
桌面应用网络通信AlertToast实战教程:5种弹窗类型的完整使用示例
AlertToast实战教程:5种弹窗类型的完整使用示例 AlertToast是一款专为SwiftUI打造的轻量级弹窗组件,能够帮助开发者快速实现Apple风格
UI库/组件移动开发桌面应用PRO Elements深度解析:解锁Elementor Pro核心功能的实战指南
PRO Elements深度解析:解锁Elementor Pro核心功能的实战指南 你是否曾经在构建WordPress网站时,因为Elementor Pro的高
前端CMS
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考