ox0pine/mojian
ox0pine/mojian has 76 GitHub stars and 2 forks. Star changes are not measured yet. Last checked 2026-11-13 23:46 UTC. Last push 2026-11-12.
可以做什么
- Ordinary files and folders. A project is a folder on disk. Nothing is imported, indexed, or synced, and edits stay in memory until you save.
- Tabs as workspaces. Each tab contains a split tree of editors, image and PDF viewers, and terminals.
- Persistent terminals. Shells run in a detached session server and reattach when Mojian opens again.
- Built-in Git diffs. Inspect staged, unstaged, and untracked work without leaving the window.
实测星标增长
- 24小时
- 正在收集历史
- 7天
- 正在收集历史
- 15天
- 正在收集历史
- 1个月
- 正在收集历史
各周期内的星标净变化,周期相互重叠,并非每日新增。缺失的测量保持空白。星标代表关注度,不代表软件质量。
关于
A quiet text editor for plain files: native tabs, split panes, terminals, Git and SSH projects. Built with MyGo for macOS, Linux and Windows.
开发工具README.zh-CN.md
原文墨间 · Mojian
字落于纸,工具退于幕后。
墨间是一款直接打开普通文件夹的原生纯文本编辑器。编辑文件、预览图片与 PDF、运行常驻终端,并在平铺工作区中查看 Git diff。没有数据库、账号、WebView 或 cgo。支持 macOS 13+、Linux 与 Windows 10 1809+。

功能
- 普通文件与文件夹。 项目就是磁盘上的文件夹。没有导入、索引或同步,编辑内容留在内存,保存时才写入。
- 标签页即工作区。 每个标签页包含一棵拆分树,装着编辑器、图片与 PDF 查看器和终端。
- 终端常驻。 shell 运行在独立的会话服务器中,重新打开墨间时接回。
- 内置 Git diff。 不离开窗口即可查看已暂存、未暂存和未跟踪的改动。
- 通过 SSH 的远程项目。 在 macOS 与 Linux 上,文件、Git 和终端直接在配置的主机上运行。
- 单个 Go 二进制的原生界面。 MyGo 在 macOS 上用 Metal、在 Linux 上用 GTK 3、在 Windows 上用 Direct3D 11 绘制界面。没有 Electron,也没有 JavaScript 构建。
安装
从 Releases 下载最新构建。
macOS
| 架构 | 下载 |
|---|---|
| Apple Silicon | mojian-<版本>-arm64.dmg |
| Intel | mojian-<版本>-amd64.dmg |
打开磁盘映像,把墨间拖进「应用程序」。发布构建采用 ad-hoc 签名、未经公证。如果 macOS 拦截首次启动,请在 Finder 中右键墨间并选择 打开。
Linux
墨间需要 GTK 3 和桌面会话。
安装 Debian 或 RPM 包:
sudo apt install ./mojian_<版本>_<架构>.deb # Debian、Ubuntu
sudo dnf install ./mojian-<版本>-<rpm 架构>.rpm # Fedora、RHEL
<架构> 为 amd64 或 arm64;<rpm 架构> 为 x86_64 或 aarch64。
如果想安装到用户目录、不需要 root:把 install.sh 和
mojian-<版本>-linux-<架构>.tar.gz 放在同一目录,然后运行:
sh install.sh
Windows
墨间需要 Windows 10 1809 或更高版本。
| 架构 | 下载 |
|---|---|
| x64 | mojian-setup-<版本>-amd64.exe |
| ARM64 | mojian-setup-<版本>-arm64.exe |
安装器为当前用户安装,不需要管理员权限。目前构建未签名,SmartScreen 可能提示。启用更新时,可以一行安装:
irm https://github.com/ox0pine/mojian/releases/latest/download/install.ps1 | iex
Windows 目前是仅本地客户端:本地文件、Git、图片、Poppler PDF 和本地终端可用;SSH 与远程项目暂不可用。
项目与文件
macOS 用 Cmd+O,Linux 与 Windows 用 Ctrl+O 打开文件夹。项目徽标切换最近项目;在 macOS 与 Linux 上,服务器徽标在本地与已配置的 SSH 主机之间切换。每个项目保留自己的标签页、窗格和最近文件。
也可以在终端里直接指定项目文件夹或文件:
mojian . # 当前文件夹
mojian ~/git/abc # 项目文件夹
mojian ~/git/abc/README.md # 文件,其所在文件夹成为项目
文件会在该项目已保存布局的当前窗格中打开。应用包内的可执行文件位于 Mojian.app/Contents/MacOS/Mojian;把它链接为 mojian 即可使用上面的命令,mojian --help 查看用法。
从终端启动后命令会立即返回:结束终端或按 Ctrl+C 不再影响已打开的窗口。由 Finder 等无终端方式启动时保持原样;脱离终端后的窗口错误写入数据目录下的 app.log。在 Windows 上,应用包内的 Mojian.exe 可以直接运行,也可以把所在目录加入 PATH 后使用 Mojian 命令。
要在 zsh 或 bash 中直接运行 mojian,可在 设置 › 高级 › Shell command 中把别名写入 ~/.zshrc 或 bash 的启动文件;同一行可以更新或移除。
「打开文件夹」选择器会列出通过符号链接指向的文件夹,Cancel 左侧的 Hidden folders 开关会显示以点开头的隐藏文件夹。
首次启动且未选择项目时,墨间会打开 ~/Documents/Mojian;文件夹为空时留下一张欢迎笔记。
文件树展示磁盘上真实存在的目录:
- 用
Cmd+B/Ctrl+B显示或隐藏。 - 用文件树的搜索框过滤可见目录。
- 用 打开文件(
Cmd+P/Ctrl+P)搜索项目中的所有文件。 - 直接在文件树中新建文件与文件夹。
- 右键可打开、重命名、创建副本、复制、剪切、复制路径、在文件管理器中显示,或移到废纸篓。
.git、node_modules、dist、build 等生成目录默认隐藏。
标签页、窗格与终端
按 Cmd+T / Ctrl+Shift+T 打开标签页,与 Ghostty 一致。用 Cmd+D / Shift+Cmd+D(Linux 上是 Ctrl+Shift+O / Ctrl+Shift+E)向右或向下拆分当前窗格;向左、向上默认没有快捷键,可在 设置 › 快捷键 中绑定。新窗格会带一个内联文件搜索。
拖动窗格标题到另一个窗格的边缘即可移动它。用 Option+Cmd / Ctrl+Alt 加方向键在窗格之间移动焦点,用 Shift+Cmd+Enter / Ctrl+Shift+Enter 放大当前窗格,用 Cmd+W 关闭窗格,用 Option+Cmd+W / Ctrl+Alt+W 关闭标签页。
双击标签页重命名,双击窗格标题放大,或右键标签页查看更多操作。
按 Ctrl 加反引号键(macOS 上是 ⌃ 加反引号)在项目根目录切换终端。终端也是窗格,可以像其他窗格一样拆分、移动、放大和关闭。在 macOS、Linux 和 Windows 上,退出墨间后 shell 仍然存活,重新打开会接回。
在 macOS 或 Linux 上,按 Shift+Cmd+S / Ctrl+Shift+S 打开到 设置 › 主机 中某个主机的 SSH 终端。
写作与预览
代码保留行号,散文自动换行。语法高亮覆盖 Python、JavaScript、TypeScript、Go、Rust、C 与 C++、Swift、Kotlin、Ruby、JSON、YAML、TOML、SQL、HTML、CSS、Markdown 等语言。
Markdown 窗格可在标题栏切换源码与预览。设置 › 编辑器 可以让新打开的 .md 文件默认渲染。图片(包括 SVG)在窗格内的查看器中打开;PDF 可以逐页查看全部页面:装了 Poppler 的 pdftoppm 时用它渲染,macOS 上则用 PDFKit。
按 Cmd+S / Ctrl+S 原子写入所有未保存的笔记;关闭窗口时也会写入未保存的修改。
Git、命令与设置
Git
按 Ctrl+Shift+G(macOS 上是 ⌃⇧G)将工作区与 HEAD 比较。左侧显示状态,右侧是带两列行号的 diff,包含已暂存、未暂存和未跟踪的改动。
命令面板
按 Shift+Cmd+P / Ctrl+Shift+P 用模糊匹配搜索命令、文件和标签页。
设置
按 Cmd+, / Ctrl+, 打开独立的设置窗口:通用、外观、编辑器、终端、Shell、通知、快捷键、主机、Git、高级、更新。
搜索可以按名称或关键词找到设置项,Cmd+F 聚焦搜索框。墨间默认跟随系统外观;视图 › 外观 可以覆盖它,外观页的主题网格还可以从十种配色里选一种(Petal、Mist、Meadow、Dusk、Tide、Apricot、Aurora、Dune、Paper、Plain),统一决定窗口、编辑器与终端的颜色。
远程项目
- 在 设置 › 主机 中添加主机。
- 在该行选择 配置服务器。墨间会把
mojian-server与libghostty-vt上传到~/.local/share/mojian,并检查服务器能否响应。 - 从服务器徽标选择该主机并打开文件夹。
配置不需要 root 权限、监听端口或系统服务。
文件树列出主机上的文件。打开文件时才读取内容,保存和文件操作直接写回。Git 也在主机上运行。项目打开后保持加载,切回时恢复标签页和终端,不需要重新读取。
远端服务器及其终端在墨间或 SSH 连接断开后仍然存活。每个终端都会记住所属的服务器。运行 mojian-server -stop 可以显式结束服务器。
更新
打开 设置 › 更新 检查 GitHub 上最新的签名版本:
- 检查更新 报告是否有更新版本。
- 安装更新 下载并校验签名。
- 重启更新 应用已暂存的更新并重新启动墨间。
自动更新要求安装位置可写,例如 macOS 应用包、Linux 用户目录安装或 Windows 安装器。安装在 /opt 的 .deb 或 .rpm 由包管理器负责更新。
快捷键
应用内会按平台显示对应按键。下表是默认绑定;设置 › 快捷键 可以重新绑定、恢复默认或解除绑定。标签页与窗格的默认键位跟随 Ghostty:⌘ 用于文件、标签页与工具,⌘⌥ 用于在窗格间移动,⌃ 用于旁边的面板。
| 操作 | macOS | Linux |
|---|---|---|
| 打开项目 | ⌘O |
Ctrl+O |
| 打开文件 | ⌘P |
Ctrl+P |
| 新建文件 | ⌘N |
Ctrl+N |
| 新建文件夹 | ⇧⌘N |
Ctrl+Shift+N |
| 重命名选中项 | F2 |
F2 |
| 移到废纸篓 | ⌘⌫ |
Ctrl+Backspace |
| 保存 | ⌘S |
Ctrl+S |
| 新建标签页 | ⌘T |
Ctrl+Shift+T |
| 关闭窗格 / 标签页 | ⌘W / ⌥⌘W |
Ctrl+Shift+W / Ctrl+Alt+W |
| 下一个 / 上一个标签页 | ⇧⌘] / ⇧⌘[ |
Ctrl+Tab / Ctrl+Shift+Tab |
| 显示标签页 1-9 | ⌘1…⌘9 |
Alt+1…Alt+9 |
| 向右 / 向下拆分 | ⌘D / ⇧⌘D |
Ctrl+Shift+O / Ctrl+Shift+E |
| 向左 / 向上拆分 | 在设置中绑定 | 在设置中绑定 |
| 聚焦相邻窗格 | ⌥⌘ + 方向键 |
Ctrl+Alt + 方向键 |
| 移动当前窗格 | 拖动,或在设置中绑定 | 拖动,或在设置中绑定 |
| 放大窗格 | ⇧⌘↩ |
Ctrl+Shift+Enter |
| 显示 / 隐藏文件树 | ⌘B |
Ctrl+B |
| 打开 / 关闭终端 | ⌃ + 反引号 |
Ctrl + 反引号 |
| SSH 终端 | ⇧⌘S |
Ctrl+Shift+S |
| Git 工作区 | ⌃⇧G |
Ctrl+Shift+G |
| 命令面板 | ⇧⌘P |
Ctrl+Shift+P |
| 设置 | ⌘, |
Ctrl+, |
有两个 Ghostty 键位留给编辑器:⌘[ / ⌘] 减少 / 增加缩进,⌘Enter 在下方插入一行。
在 Windows 上,Cmd 键位对应 Ctrl;设置 › 快捷键 会显示实际按键。终端快捷键在 macOS、Linux 和 Windows 上可用;SSH 快捷键仅在 macOS 和 Linux 上可用。
从源码构建
墨间需要 Go 1.27.3 或更高版本。MyGo 作为 Go tool 固定在 go.mod 中,所以第一次运行 go tool mygo 会下载对应版本。
git clone https://github.com/ox0pine/mojian.git
cd mojian
go tool mygo dev # 开发模式,修改后自动重载
go test ./... # 单元与集成测试
go tool mygo vet . # go vet 与 MyGo 的 UI 生命周期检查
go tool mygo dev -web 会在浏览器中打开界面,文件只保存在内存里。
无头 UI 测试工具
cmd/harness 通过 mygo-mcp 把真实的窗口与设置视图提供给 MCP 客户端,agent 无需桌面窗口即可检查、点击、输入并截图界面:
go run ./cmd/harness # http://127.0.0.1:8080/mcp
go run ./cmd/harness -addr 127.0.0.1:8090
每次运行都会在临时目录中生成一个一次性项目;这些夹具绝不会打开原生窗口、启动终端,也不会触碰你的项目与设置。该端点没有身份验证,请保持在回环地址上。
发布构建
go tool mygo build -platform darwin/arm64,darwin/amd64
go tool mygo build -platform linux/amd64,linux/arm64
go tool mygo build -platform windows/amd64,windows/arm64
产物位于 build/<系统>-<架构>/。macOS 生成 .app 与 .dmg;Linux 生成 .tar.gz、.deb 与 .rpm;Windows 生成应用与 mojian-setup-<版本>-<架构>.exe。
修改会话协议或 cmd/mojian-server 后,重新生成嵌入的远程二进制:
go generate ./internal/remotebin
发布版本
推送 vX.Y.Z tag 会运行 .github/workflows/release.yml:先测试代码树,再构建全部平台,创建草稿 Release,上传安装包和 SHA256SUMS,所有上传成功后才正式发布。完整流程见 RELEASING.md。
每次发布包含:
- macOS:
mojian-<版本>-arm64.dmg和mojian-<版本>-amd64.dmg - Linux:
mojian-<版本>-linux-{amd64,arm64}.tar.gz、对应的.deb与.rpm包和install.sh - Windows:
mojian-setup-<版本>-{amd64,arm64}.exe、install.ps1和mojian-<版本>-windows-{amd64,arm64}.tar.gz - 签名更新包(
*-darwin-*.tar.gz、*-linux-*.tar.gz、*-windows-*.tar.gz)与update-<target>.json清单 SHA256SUMS
设计
墨 #1F1B16,纸 #FBF7EF,朱砂 #D24A2B。几乎一切都是纸上的墨,只有光标保留朱砂,那是页面唯一提高的声音。
致谢
- 操作图标:Lucide,ISC
- 文件图标:Material Icon Theme,MIT
- 界面字体:JetBrains Mono,OFL
- 字标:Literata,SIL OFL
- 终端:libghostty-vt 与 creack/pty,MIT
- 窗口与交互参考:GoRex 与 Kero
- 原生界面:MyGo
许可证
MIT,详见 LICENSE。