v0.3.0 96f3aeb

protocol-migration.md RawHistoryFolder

Canonical core / migration (v0.x)

protocol/core replaces root-package and wl shim core object types. Bootstrap Display, Registry, Context, and BaseProxy remain in the root/wl transport. Bind globals using core.NewCompositor(display.Context()), core.NewSeat(display.Context()), etc. and display.Registry().Bind(name, core.CompositorInterface, version, compositor). Requests create typed registered children (seat.GetKeyboard(), surface.Frame(), shm.CreatePool()) and server-side new_id events register concrete objects before invoking handlers. Do not overwrite registered objects with a second wrapper.

Breaking changes: wlturbo/wl Seat, Surface, Pointer, Keyboard, Touch, Output, Region, Compositor, their constructors, and seat capability aliases have moved to protocol/core. Generated methods accept concrete core objects and return concrete children, not wl.Object. Legacy raw Event.Fd() is not for generated events; generated FD handlers receive *wlturbo.OwnedFD with Take() (int,error) or Close(); second and later handlers receive nil FD. On a successful full send a generated FD request closes the local descriptor; on error the caller keeps it. Registry.BindID remains for legacy callers but cannot register typed event dispatch: prefer Bind and generated constructors. Unrecognized custom-proxy event opcodes now fail unless declared via Display.RegisterEventSignature.

The scanner accepts -import wl_surface=github.com/bnema/wlturbo/protocol/core (repeat for each external type); local XML definitions take precedence, then explicit external mapping, then only bootstrap display/registry. Generate with GOWORK=off go generate ./...; metadata and XML license are in protocol/SOURCE.md. Extension packages under protocol/ use the same scanner and public core mappings; the generator carries no compositor policy.

source
1# Canonical core / migration (v0.x)
2
3`protocol/core` replaces root-package and `wl` shim core object types. Bootstrap
4`Display`, `Registry`, `Context`, and `BaseProxy` remain in the root/`wl`
5transport. Bind globals using `core.NewCompositor(display.Context())`,
6`core.NewSeat(display.Context())`, etc. and `display.Registry().Bind(name,
7core.CompositorInterface, version, compositor)`. Requests create typed registered
8children (`seat.GetKeyboard()`, `surface.Frame()`, `shm.CreatePool()`) and
9server-side `new_id` events register concrete objects before invoking handlers.
10Do not overwrite registered objects with a second wrapper.
11
12Breaking changes: `wlturbo`/`wl` `Seat`, `Surface`, `Pointer`, `Keyboard`,
13`Touch`, `Output`, `Region`, `Compositor`, their constructors, and seat
14capability aliases have moved to `protocol/core`. Generated methods accept
15concrete core objects and return concrete children, not `wl.Object`. Legacy
16raw `Event.Fd()` is not for generated events; generated FD handlers receive
17`*wlturbo.OwnedFD` with `Take() (int,error)` or `Close()`; second and later
18handlers receive nil FD. On a successful full send a generated FD request
19closes the local descriptor; on error the caller keeps it. `Registry.BindID`
20remains for legacy callers but cannot register typed event dispatch: prefer
21`Bind` and generated constructors. Unrecognized custom-proxy event opcodes
22now fail unless declared via `Display.RegisterEventSignature`.
23
24The scanner accepts `-import wl_surface=github.com/bnema/wlturbo/protocol/core`
25(repeat for each external type); local XML definitions take precedence, then
26explicit external mapping, then only bootstrap display/registry. Generate with
27`GOWORK=off go generate ./...`; metadata and XML license are in
28`protocol/SOURCE.md`. Extension packages under `protocol/` use the same scanner
29and public core mappings; the generator carries no compositor policy.

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 1

Tags 8

↑↓ moveenter openesc close