ShellRS
ShellRS 是一款免费开源的 SSH 客户端,使用 Rust 编写:主机管理、终端、WinSCP 风格的 SFTP 与端口转发,全部在一个 GPU 渲染窗口中,支持 macOS、Windows 和 Linux。
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Foundation library for the Phoenixml family of XML-aware tools — Editor, Workbench, Studio. Apache-2.0.
The shared, vocabulary-agnostic substrate every Phoenixml app builds on:
IDocument, dirty tracking, command-based undo/redo with merge support, multi-document services.TreeEditorView, TextEditorView, ProblemsView, BreadcrumbView, FindReplaceView. Vocabulary-agnostic; vocabulary packages (e.g. Phoenixml.Platform.Editor.Xml) supply concrete ITreeNodeProvider implementations.MainWindow with custom chrome, composable StatusBar, SplitView for two-pane layouts.PhoenixmlAppBuilder, settings persistence, single-instance coordination, command registry.IStringLocalizer seam from day one; English-only ships in v1, expansion is demand-driven.We deliberately ship the foundation as a single rolled-up NuGet rather than 8+ thin packages. Reasoning lives in the design spec §2.5: every foundation namespace is a transitive dependency of every other anyway, and we already manage plenty of NuGet artifacts in the family. Internal modularity is preserved at the namespace level and enforced via architecture tests.
using Phoenixml.Platform.Abstractions.Documents;
using Phoenixml.Platform.Documents;
// Define a concrete document by deriving from Document.
public sealed class MyDocument : Document
{
public MyDocument(Uri source)
: base(DocumentId.New(), source, displayName: "MyDoc", DocumentKind.Xml) { }
public override ValueTask SaveAsync(CancellationToken ct)
{
// …persist…
MarkClean();
return default;
}
}
// Edits happen via commands on the undo stack.
var doc = new MyDocument(new Uri("file:///tmp/foo.xml"));
doc.Undo.Execute(new MyEditCommand(...));
doc.Undo.Undo();
using Avalonia.Layout;
using Phoenixml.Platform.Editing;
using Phoenixml.Platform.Shell;
// Build a side-by-side tree + text editor inside a SplitView.
var tree = new TreeEditorView();
tree.SetProvider(myTreeProvider); // ITreeNodeProvider supplied by your vocabulary package
var text = new TextEditorView { Text = currentDocumentText };
var split = new SplitView
{
Orientation = Orientation.Horizontal,
Pane1Size = 320,
Pane1Content = tree,
Pane2Content = text,
};
mainWindow.SetContent(split);
The foundation is vocabulary-agnostic — the editor primitives take provider interfaces. Vocabulary-specific NuGet packages supply concrete providers:
Phoenixml.Platform.Editor.Xml (0.1.0) — XML/XSD binding. XmlDocument backed by PhoenixmlDb.Core's XDM; XmlTreeNodeProvider adapts the XDM tree to ITreeNodeProvider; XmlSchemaValidator surfaces XSD validation errors as IDiagnostic for the Problems pane.Phoenixml.Platform.Editor.Xslt, Phoenixml.Platform.Editor.XQuery — Workbench's bindings. Live in the Workbench repo, consume Phoenixml.Platform from NuGet, prove the boundary works without colocation.using Phoenixml.Platform.Editor.Xml;
var doc = await XmlDocument.LoadAsync("/tmp/orders.xml", ct);
documentService.Add(doc);
treeView.SetProvider(doc.TreeNodes); // wire the tree view to the document
Pull requests welcome. By submitting a contribution you agree it is licensed under Apache-2.0 and that you have the right to do so (DCO: include a Signed-off-by: line in commit messages, or use git commit --signoff).