☰
DEsk Mod开发者教程:如何为新语言、新设置项和新声音扩展代码
2026/10/19 3:32:10 网站建设 项目流程

【免费下载链接】DEsk

项目地址:https://gitcode.com/gh_mirrors/desk7/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 步:

  1. 注册名字:在 include/sound.h 的enum desk_sound中,于DESK_SND_COUNT之前加DESK_SND_YOURS;
  2. 写出合成函数:在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让每次播放略有不同,没有任何两个瞬间完全相同;
  3. 登记与播放:在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-werror
  • meson 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

项目地址:https://gitcode.com/gh_mirrors/desk7/DEsk
点击查看免费下载
上一篇:WinUI 3 引擎内幕:DComp 树遍历器(DCompTreeHelper)的架构原理与重新启用实战指南
下一篇:用 Cloudflare Agents 构建 Chat SDK 持久化状态:`agents/chat-sdk` 完整接入指南

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询