dsh-msg-resize:把 DSH 对话区变成可拖动、可缩放的自由浮窗

前言

DSH 默认把对话区放在一个居中、固定宽度的消息列里,输入框跟在下面。宽度变化要改样式,位置想挪一点也没有把手可用;宽屏下两侧大量空间被空着。下面介绍的插件 dsh-msg-resize(维护者 buddha68)就是处理这件事的:它把消息区和输入框打包成一个浮窗,可以拖动、可以改大小,位置和尺寸会记住。

插件 id 固定为 msg-resize,包名 dsh-msg-resize,当前版本 2.6.0,许可证 MIT。源码在 https://github.com/buddha68/dsh-msg-resize ,目录页在 https://www.skillhub.cn/plugins/buddha68/dsh-msg-resize 。属于客户端 UI 类插件,只作用于你指定的 profile。

这是什么

一句话定位:把 DSH 的对话区(消息区 + 输入框)从固定居中列变成一个能随意摆放、能随意改大小的浮窗。

它解决的问题是默认布局对宽屏不友好,以及没有低成本手段调整对话区尺寸和位置。对比改宿主样式或自己写 CSS 的做法,这个插件把改动封装在插件里,靠把手操作,位置和尺寸存本地,不需要每次重开都重新调。

核心功能

两个把手,一个搬位置、一个改大小:

1、右下角 ⤡:拖动改宽、改高,最小 460×320。
2、右上角 ⠿:拖动把整块对话搬到任意位置。
3、双击对应把手:各自复位到默认。
4、键盘微调:点一下把手聚焦,←→ 改宽、↑↓ 改高;按住 Shift 步长变为 4 倍。
5、位置和尺寸写入浏览器 localStorage,刷新、重开都还在,卸载时只留下一个键 dshMsgResize.v2。
6、活动范围限在对话内容窗格内(内缩 8px):不会盖住左侧栏,也不会跑出屏幕;收起左侧栏后可以继续往左贴。
7、输入框宽度跟随面板宽度、高度不变、始终贴面板下沿。
8、窄屏(< 720px)自动撤下,不动手机端布局。

安装与启用

只装你想用的那个 profile。网页版一般是 web,桌面版是 desktop,两边互不影响。

方式 A:一行命令(需要本机有 git)

dsh plugin --profile web add github:buddha68/dsh-msg-resize

装完重启一次 DSH,或等宿主重组合。包内自带 dsh.bundle 清单与 cordis.patch.yml,安装后会自动挂上「右上移动 / 右下缩放」两个把手。

方式 B:Release 压缩包(免 git)

没有 git 环境时走这条路,按四步做:

1、到 https://github.com/buddha68/dsh-msg-resize/releases 下载 dsh-msg-resize-2.6.0.zip 或源码归档,解压到任意目录,例如 D:\plugins\dsh-msg-resize。
2、把目录链接进 profile 的 node_modules:Windows 用 junction,macOS / Linux 用 symlink。

mklink /J "%DSH_HOME%\profiles\web\node_modules\dsh-msg-resize" "D:\plugins\dsh-msg-resize"
ln -s /path/to/dsh-msg-resize "$DSH_HOME/profiles/web/node_modules/dsh-msg-resize"

3、在该 profile 的 cordis.patch.yml 末尾追加下面的内容(与仓库根目录的 cordis.patch.yml 一致):

- insert:
    - id: msg-resize
      name: 'dsh-msg-resize'

4、等宿主重组合(约 7–10 秒),或重启 DSH 一次。打开任意会话,应出现一个浮窗和两个把手。

DSH_HOME 默认是 dsh 的数据目录,Windows 常见为 F:\dsh-home 或 %USERPROFILE%\.dsh。只装 web profile 就只动 web 的 cordis.patch.yml。

典型用法

装好后不需要额外配置,直接在会话页操作即可。

想做 操作
改大小 拖右下角 ⤡,横向改宽、纵向改高
搬位置 拖右上角 ⠿,整块对话一起移动
回到默认 双击对应的把手
精确微调 点击把手聚焦后按 ←→↑↓,Shift 加大步长

窄屏下把手自动消失,属于预期 behavior,不需要手动关闭。

适用场景与注意事项

谁适合用。 用宽屏跑 DSH、希望对话区占据自己习惯的位置和尺寸的开发者,尤其是同时开着左侧栏、右侧资料窗或多个编辑器窗口的人。桌面版和网页版都行得通,按 profile 分别决定装不装即可。

前置条件与权限。 这个插件以当前 dsh 进程的权限运行,安装前应检查源码与许可证(MIT)。手动安装方式会接触 profile 目录下的 node_modules 和 cordis.patch.yml,改动前先备份这两份配置。

验证环境。 README 声明的验证环境是 DSH web 端 0.2.x(Chromium / Electron),插件 v2.6.0。

已知限制。

1、靶点全部用 CSS Modules 的类名后缀匹配(如 [class$="_scrollBody"]、[class$="_column"]、[class$="_centerCol"]),跨构建比较稳定;宿主如果大改对话区结构,插件会自动失效且不报错(fail-inert),届时需要修改这几处选择器。
2、面板使用 position: fixed,宿主祖先节点不能有 transform 或 filter。当前版本没有;如果将来加入,fixed 定位会被劫持,需要改成 portal。
3、如果同时装了 dsh-chat-drag,那个插件负责横向挪动消息区,把手位置会冲突。本插件在对话页接管移动(把对方的位移归零并隐藏把手),新建会话页不受影响。若没装 dsh-chat-drag,这段逻辑等于空转。
4、折叠左侧栏、切换「便签 / 对话」面板后,活动范围会自动重算;拖到边界附近不会抖动。

卸载。

dsh plugin --profile web remove dsh-msg-resize

手动安装的需要删掉 cordis.patch.yml 里那段 - insert: … msg-resize,删掉 node_modules\dsh-msg-resize 链接,刷新页面;localStorage 里的 dshMsgResize.v2 可以顺手清掉。

结束语

这个插件的价值不在什么新能力,而是把 DSH 对话区的布局从「默认居中固定宽」改成「你说了算,且记得住」。需要细粒度控制时它比改全局样式干净,改动面局限在对话窗格内。目录页:https://www.skillhub.cn/plugins/buddha68/dsh-msg-resize ;源码:https://github.com/buddha68/dsh-msg-resize 。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜