open markdown files in the reader, not the editor

The files panel and the Claude Config tab called ipc.request('editor.open')
for every file, which targets the editor — so a .md click never reached the
right-side markdown reader (it opens only when something publishes
('builtin.markdown','selection')). Route .md clicks from the files panel
(tree + filtered rows), the Config tab's file-backed rows, and .md wiki links
in the viewer to that channel; non-.md files still open in the editor. Also
remove the dead DaemonEvent fallback that listened for 'editor.buffer_activated'
(the registry emits 'editor.active-changed').

T-187.

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-05-31 16:16:34 +02:00
co-authored by Claude
parent 4340dc38d0
commit c56b60622b
7 changed files with 369 additions and 49 deletions
+18 -9
View File
@@ -212,14 +212,19 @@ class _FileRow extends StatelessWidget {
void _openFile(BuildContext context, String path) {
final kernel = ClideKernel.of(context);
// editor.open is a daemon-side IPC handler (lib/src/daemon/
// editor_commands.dart), not a kernel command. Fire the request
// and let the editor extension's controller pick up the
// editor.active-changed / editor.opened event — no need to await
// or handle the response here.
unawaited(
kernel.ipc.request('editor.open', args: {'path': path}),
);
if (path.toLowerCase().endsWith('.md')) {
// Route .md files to the markdown reader panel via the kernel MessageBus.
kernel.messages.publish('builtin.markdown', 'selection', {'path': path});
} else {
// editor.open is a daemon-side IPC handler (lib/src/daemon/
// editor_commands.dart), not a kernel command. Fire the request
// and let the editor extension's controller pick up the
// editor.active-changed / editor.opened event — no need to await
// or handle the response here.
unawaited(
kernel.ipc.request('editor.open', args: {'path': path}),
);
}
}
}
@@ -282,7 +287,11 @@ class _FilteredFileRow extends StatelessWidget {
return ClideTappable(
onTap: () {
final kernel = ClideKernel.of(context);
unawaited(kernel.ipc.request('editor.open', args: {'path': entry.path}));
if (entry.path.toLowerCase().endsWith('.md')) {
kernel.messages.publish('builtin.markdown', 'selection', {'path': entry.path});
} else {
unawaited(kernel.ipc.request('editor.open', args: {'path': entry.path}));
}
},
builder: (context, hovered, _) => Container(
color: hovered ? tokens.sidebarItemHover : null,