From a77e342eb7fa4add700a96a661226649e8c4763f Mon Sep 17 00:00:00 2001 From: Gabriel Schneider Date: Fri, 31 Jul 2026 00:52:02 -0300 Subject: output panes remember the command that opened them MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit An output buffer was a file pane with a flag, and everything special about it was re-derived from outside by asking the wrong question: the buffer NAME ("+Search", "+Help"), a parallel search_kind field, and f.output predicates sprinkled through kind-agnostic code. Now it carries its Origin — the Builtin, or the lsp.Kind for the five gotos helix binds as motions rather than words — plus that command's argument, and one Traits table answers every question the scattered code used to ask: what it is called, whether n/N steps it, whether it is a doc for layout, whether Esc dismisses it, whether it saves. The name is derived FROM the command instead of being the thing that identifies it. Adding a kind of output pane is adding a row. No golden moved. --- src/lsp/lsp.zig | 26 ++++---------------------- src/lsp/lsp_zls.zig | 2 +- 2 files changed, 5 insertions(+), 23 deletions(-) (limited to 'src/lsp') diff --git a/src/lsp/lsp.zig b/src/lsp/lsp.zig index 610c5604..abb91874 100644 --- a/src/lsp/lsp.zig +++ b/src/lsp/lsp.zig @@ -17,7 +17,6 @@ //! implementations are measured against each other: same core, same harness, //! same rows, different `query`. const std = @import("std"); -const config = @import("../config.zig"); /// What the caller wants to know. The helix command each one backs is named /// alongside, because the keymap is helix's and these are its verbs. @@ -62,27 +61,10 @@ pub const Kind = enum { /// away from what `gd` actually did. explain, - /// Whether an answer of exactly one row should JUMP rather than open a - /// results buffer. Helix: the five gotos jump on a single location and - /// show a picker on several; a symbol list is always a picker. - pub fn jumpsWhenSingle(k: Kind) bool { - return switch (k) { - .definition, .declaration, .type_definition, .implementation, .references => true, - else => false, - }; - } - - /// The buffer an answer opens. Kept distinct from `+Search` only where the - /// content is not a list of locations — n/N over prose is nonsense. - pub fn bufferName(k: Kind) []const u8 { - return switch (k) { - .hover => config.hover_buffer, - .code_action, .format, .rename => config.lsp_buffer, - // prose about the backend, never a list of locations - .status, .explain => config.lsp_buffer, - else => config.search_buffer, - }; - } + // What an ANSWER becomes — which buffer it opens, whether a single row + // jumps instead, whether n/N walk it — is not here: it is one row per Kind + // in output_pane.traits, beside the same questions asked of `/`, Find, + // Grep and Help. A Kind added above will not compile until it has one. }; /// One question. `source` is a snapshot of the buffer taken by the shell diff --git a/src/lsp/lsp_zls.zig b/src/lsp/lsp_zls.zig index 6f5bbcdd..8a36a151 100644 --- a/src/lsp/lsp_zls.zig +++ b/src/lsp/lsp_zls.zig @@ -681,7 +681,7 @@ fn documentSymbols( } /// Depth-first so the rows read in source order, with the parent's name as a -/// qualifier — `Kind.jumpsWhenSingle` rather than a bare `jumpsWhenSingle`, +/// qualifier — `Pardes.runBuiltin` rather than a bare `runBuiltin`, /// because a flat list of method names is not navigable. fn emitSymbols( gpa: std.mem.Allocator, -- cgit v1.3